HBASE-17127 Locate region should fail fast if underlying Connection already closed
This commit is contained in:
parent
3c45ff08d9
commit
e30329e372
|
@ -1175,7 +1175,7 @@ class ConnectionManager {
|
|||
public RegionLocations locateRegion(final TableName tableName,
|
||||
final byte [] row, boolean useCache, boolean retry, int replicaId)
|
||||
throws IOException {
|
||||
if (this.closed) throw new IOException(toString() + " closed");
|
||||
if (this.closed) throw new DoNotRetryIOException(toString() + " closed");
|
||||
if (tableName== null || tableName.getName().length == 0) {
|
||||
throw new IllegalArgumentException(
|
||||
"table name cannot be null or zero length");
|
||||
|
|
|
@ -39,6 +39,7 @@ import org.apache.commons.logging.Log;
|
|||
import org.apache.commons.logging.LogFactory;
|
||||
import org.apache.hadoop.conf.Configuration;
|
||||
import org.apache.hadoop.conf.Configured;
|
||||
import org.apache.hadoop.hbase.DoNotRetryIOException;
|
||||
import org.apache.hadoop.hbase.HBaseConfiguration;
|
||||
import org.apache.hadoop.hbase.HConstants;
|
||||
import org.apache.hadoop.hbase.HRegionInfo;
|
||||
|
@ -286,6 +287,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.
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue