HBASE-11332 Fix for metas location cache from HBASE-10785
This commit is contained in:
parent
8e40fa0c41
commit
14a09e79bd
|
@ -1092,7 +1092,6 @@ class ConnectionManager {
|
||||||
throw new IllegalArgumentException(
|
throw new IllegalArgumentException(
|
||||||
"table name cannot be null or zero length");
|
"table name cannot be null or zero length");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tableName.equals(TableName.META_TABLE_NAME)) {
|
if (tableName.equals(TableName.META_TABLE_NAME)) {
|
||||||
return locateMeta(tableName, useCache, replicaId);
|
return locateMeta(tableName, useCache, replicaId);
|
||||||
} else {
|
} else {
|
||||||
|
@ -1119,10 +1118,13 @@ class ConnectionManager {
|
||||||
synchronized (metaRegionLock) {
|
synchronized (metaRegionLock) {
|
||||||
// Check the cache again for a hit in case some other thread made the
|
// Check the cache again for a hit in case some other thread made the
|
||||||
// same query while we were waiting on the lock.
|
// same query while we were waiting on the lock.
|
||||||
|
if (useCache) {
|
||||||
locations = getCachedLocation(tableName, metaCacheKey);
|
locations = getCachedLocation(tableName, metaCacheKey);
|
||||||
if (locations != null) {
|
if (locations != null) {
|
||||||
return locations;
|
return locations;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Look up from zookeeper
|
// Look up from zookeeper
|
||||||
locations = this.registry.getMetaRegionLocation();
|
locations = this.registry.getMetaRegionLocation();
|
||||||
if (locations != null) {
|
if (locations != null) {
|
||||||
|
|
|
@ -356,6 +356,7 @@ public class TestHCM {
|
||||||
|
|
||||||
final AtomicReference<Throwable> failed = new AtomicReference<Throwable>(null);
|
final AtomicReference<Throwable> failed = new AtomicReference<Throwable>(null);
|
||||||
Thread t = new Thread("testConnectionCloseThread") {
|
Thread t = new Thread("testConnectionCloseThread") {
|
||||||
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
int done = 0;
|
int done = 0;
|
||||||
try {
|
try {
|
||||||
|
@ -1263,5 +1264,28 @@ public class TestHCM {
|
||||||
}
|
}
|
||||||
pool.shutdownNow();
|
pool.shutdownNow();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test(timeout = 60000)
|
||||||
|
public void testConnectionRideOverClusterRestart() throws IOException, InterruptedException {
|
||||||
|
Configuration config = new Configuration(TEST_UTIL.getConfiguration());
|
||||||
|
|
||||||
|
TableName tableName = TableName.valueOf("testConnectionRideOverClusterRestart");
|
||||||
|
TEST_UTIL.createTable(tableName.getName(), new byte[][] {FAM_NAM}, config).close();
|
||||||
|
|
||||||
|
HConnection connection = HConnectionManager.createConnection(config);
|
||||||
|
HTableInterface table = connection.getTable(tableName);
|
||||||
|
|
||||||
|
// this will cache the meta location and table's region location
|
||||||
|
table.get(new Get(Bytes.toBytes("foo")));
|
||||||
|
|
||||||
|
// restart HBase
|
||||||
|
TEST_UTIL.shutdownMiniHBaseCluster();
|
||||||
|
TEST_UTIL.restartHBaseCluster(2);
|
||||||
|
// this should be able to discover new locations for meta and table's region
|
||||||
|
table.get(new Get(Bytes.toBytes("foo")));
|
||||||
|
TEST_UTIL.deleteTable(tableName);
|
||||||
|
table.close();
|
||||||
|
connection.close();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue