HBASE-5060 HBase client is blocked forever (Jinchao)
git-svn-id: https://svn.apache.org/repos/asf/hbase/trunk@1220863 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
a46959a370
commit
4e09ea6be8
|
@ -837,6 +837,7 @@ Release 0.90.6 - Unreleased
|
||||||
|
|
||||||
BUG FIXES
|
BUG FIXES
|
||||||
HBASE-4970 Add a parameter so that keepAliveTime of Htable thread pool can be changed (gaojinchao)
|
HBASE-4970 Add a parameter so that keepAliveTime of Htable thread pool can be changed (gaojinchao)
|
||||||
|
HBASE-5060 HBase client is blocked forever (Jinchao)
|
||||||
|
|
||||||
Release 0.90.5 - Unreleased
|
Release 0.90.5 - Unreleased
|
||||||
|
|
||||||
|
|
|
@ -105,6 +105,7 @@ public class CatalogTracker {
|
||||||
private final MetaNodeTracker metaNodeTracker;
|
private final MetaNodeTracker metaNodeTracker;
|
||||||
private final AtomicBoolean metaAvailable = new AtomicBoolean(false);
|
private final AtomicBoolean metaAvailable = new AtomicBoolean(false);
|
||||||
private boolean instantiatedzkw = false;
|
private boolean instantiatedzkw = false;
|
||||||
|
private Abortable abortable;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Do not clear this address once set. Its needed when we do
|
* Do not clear this address once set. Its needed when we do
|
||||||
|
@ -184,8 +185,21 @@ public class CatalogTracker {
|
||||||
this.connection = connection;
|
this.connection = connection;
|
||||||
if (abortable == null) {
|
if (abortable == null) {
|
||||||
// A connection is abortable.
|
// A connection is abortable.
|
||||||
abortable = this.connection;
|
this.abortable = this.connection;
|
||||||
}
|
}
|
||||||
|
Abortable throwableAborter = new Abortable() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void abort(String why, Throwable e) {
|
||||||
|
throw new RuntimeException(why, e);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isAborted() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
if (zk == null) {
|
if (zk == null) {
|
||||||
// Create our own. Set flag so we tear it down on stop.
|
// Create our own. Set flag so we tear it down on stop.
|
||||||
this.zookeeper =
|
this.zookeeper =
|
||||||
|
@ -195,10 +209,10 @@ public class CatalogTracker {
|
||||||
} else {
|
} else {
|
||||||
this.zookeeper = zk;
|
this.zookeeper = zk;
|
||||||
}
|
}
|
||||||
this.rootRegionTracker = new RootRegionTracker(zookeeper, abortable);
|
this.rootRegionTracker = new RootRegionTracker(zookeeper, throwableAborter);
|
||||||
final CatalogTracker ct = this;
|
final CatalogTracker ct = this;
|
||||||
// Override nodeDeleted so we get notified when meta node deleted
|
// Override nodeDeleted so we get notified when meta node deleted
|
||||||
this.metaNodeTracker = new MetaNodeTracker(zookeeper, abortable) {
|
this.metaNodeTracker = new MetaNodeTracker(zookeeper, throwableAborter) {
|
||||||
public void nodeDeleted(String path) {
|
public void nodeDeleted(String path) {
|
||||||
if (!path.equals(node)) return;
|
if (!path.equals(node)) return;
|
||||||
ct.resetMetaLocation();
|
ct.resetMetaLocation();
|
||||||
|
@ -216,8 +230,14 @@ public class CatalogTracker {
|
||||||
*/
|
*/
|
||||||
public void start() throws IOException, InterruptedException {
|
public void start() throws IOException, InterruptedException {
|
||||||
LOG.debug("Starting catalog tracker " + this);
|
LOG.debug("Starting catalog tracker " + this);
|
||||||
|
try {
|
||||||
this.rootRegionTracker.start();
|
this.rootRegionTracker.start();
|
||||||
this.metaNodeTracker.start();
|
this.metaNodeTracker.start();
|
||||||
|
} catch (RuntimeException e) {
|
||||||
|
Throwable t = e.getCause();
|
||||||
|
this.abortable.abort(e.getMessage(), t);
|
||||||
|
throw new IOException("Attempt to start root/meta tracker failed.", t);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue