HBASE-17127 Locate region should fail fast if underlying Connection already closed
This commit is contained in:
parent
af4e4b6450
commit
ec9c9e201a
|
@ -652,7 +652,7 @@ class ConnectionImplementation implements ClusterConnection, Closeable {
|
||||||
final byte [] row, boolean useCache, boolean retry, int replicaId)
|
final byte [] row, boolean useCache, boolean retry, int replicaId)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
if (this.closed) {
|
if (this.closed) {
|
||||||
throw new IOException(toString() + " closed");
|
throw new DoNotRetryIOException(toString() + " closed");
|
||||||
}
|
}
|
||||||
if (tableName== null || tableName.getName().length == 0) {
|
if (tableName== null || tableName.getName().length == 0) {
|
||||||
throw new IllegalArgumentException(
|
throw new IllegalArgumentException(
|
||||||
|
|
|
@ -33,7 +33,7 @@ import java.util.concurrent.Executors;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
import java.util.concurrent.atomic.AtomicLong;
|
import java.util.concurrent.atomic.AtomicLong;
|
||||||
import org.apache.hadoop.hbase.CellComparator;
|
import org.apache.hadoop.hbase.CellComparator;
|
||||||
|
import org.apache.hadoop.hbase.DoNotRetryIOException;
|
||||||
import org.apache.commons.lang.NotImplementedException;
|
import org.apache.commons.lang.NotImplementedException;
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
@ -263,6 +263,32 @@ public class TestClientNoCluster extends Configured implements Tool {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testConnectionClosedOnRegionLocate() throws IOException {
|
||||||
|
Configuration testConf = new Configuration(this.conf);
|
||||||
|
testConf.setInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER, 2);
|
||||||
|
// Go against meta else we will try to find first region for the table on construction which
|
||||||
|
// means we'll have to do a bunch more mocking. Tests that go against meta only should be
|
||||||
|
// good for a bit of testing.
|
||||||
|
Connection connection = ConnectionFactory.createConnection(testConf);
|
||||||
|
Table table = connection.getTable(TableName.META_TABLE_NAME);
|
||||||
|
connection.close();
|
||||||
|
try {
|
||||||
|
Get get = new Get(Bytes.toBytes("dummyRow"));
|
||||||
|
table.get(get);
|
||||||
|
fail("Should have thrown DoNotRetryException but no exception thrown");
|
||||||
|
} catch (Exception e) {
|
||||||
|
if (!(e instanceof DoNotRetryIOException)) {
|
||||||
|
String errMsg =
|
||||||
|
"Should have thrown DoNotRetryException but actually " + e.getClass().getSimpleName();
|
||||||
|
LOG.error(errMsg, e);
|
||||||
|
fail(errMsg);
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
table.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Override to shutdown going to zookeeper for cluster id and meta location.
|
* Override to shutdown going to zookeeper for cluster id and meta location.
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue