HBASE-21943 The usage of RegionLocations.mergeRegionLocations is wrong for async client
Signed-off-by: Guanghao Zhang <zghao@apache.org>
This commit is contained in:
parent
607ac735c4
commit
3ccc6fec6c
|
@ -23,7 +23,6 @@ import static org.apache.hadoop.hbase.TableName.META_TABLE_NAME;
|
||||||
import static org.apache.hadoop.hbase.client.AsyncRegionLocatorHelper.canUpdateOnError;
|
import static org.apache.hadoop.hbase.client.AsyncRegionLocatorHelper.canUpdateOnError;
|
||||||
import static org.apache.hadoop.hbase.client.AsyncRegionLocatorHelper.createRegionLocations;
|
import static org.apache.hadoop.hbase.client.AsyncRegionLocatorHelper.createRegionLocations;
|
||||||
import static org.apache.hadoop.hbase.client.AsyncRegionLocatorHelper.isGood;
|
import static org.apache.hadoop.hbase.client.AsyncRegionLocatorHelper.isGood;
|
||||||
import static org.apache.hadoop.hbase.client.AsyncRegionLocatorHelper.mergeRegionLocations;
|
|
||||||
import static org.apache.hadoop.hbase.client.AsyncRegionLocatorHelper.removeRegionLocation;
|
import static org.apache.hadoop.hbase.client.AsyncRegionLocatorHelper.removeRegionLocation;
|
||||||
import static org.apache.hadoop.hbase.client.ConnectionUtils.createClosestRowAfter;
|
import static org.apache.hadoop.hbase.client.ConnectionUtils.createClosestRowAfter;
|
||||||
import static org.apache.hadoop.hbase.client.ConnectionUtils.isEmptyStopRow;
|
import static org.apache.hadoop.hbase.client.ConnectionUtils.isEmptyStopRow;
|
||||||
|
@ -218,7 +217,7 @@ class AsyncNonMetaRegionLocator {
|
||||||
if (loc1.getSeqNum() != loc2.getSeqNum()) {
|
if (loc1.getSeqNum() != loc2.getSeqNum()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (Objects.equal(loc1.getServerName(), loc2.getServerName())) {
|
if (!Objects.equal(loc1.getServerName(), loc2.getServerName())) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -235,7 +234,7 @@ class AsyncNonMetaRegionLocator {
|
||||||
if (oldLocs == null) {
|
if (oldLocs == null) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
RegionLocations mergedLocs = mergeRegionLocations(locs, oldLocs);
|
RegionLocations mergedLocs = oldLocs.mergeLocations(locs);
|
||||||
if (isEqual(mergedLocs, oldLocs)) {
|
if (isEqual(mergedLocs, oldLocs)) {
|
||||||
// the merged one is the same with the old one, give up
|
// the merged one is the same with the old one, give up
|
||||||
LOG.trace("Will not add {} to cache because the old value {} " +
|
LOG.trace("Will not add {} to cache because the old value {} " +
|
||||||
|
|
|
@ -129,20 +129,6 @@ final class AsyncRegionLocatorHelper {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a new {@link RegionLocations} which is the merging result for the given two
|
|
||||||
* {@link RegionLocations}.
|
|
||||||
* <p/>
|
|
||||||
* All the {@link RegionLocations} in async locator related class are immutable because we want to
|
|
||||||
* access them concurrently, so here we need to create a new one, instead of calling
|
|
||||||
* {@link RegionLocations#mergeLocations(RegionLocations)} directly.
|
|
||||||
*/
|
|
||||||
static RegionLocations mergeRegionLocations(RegionLocations newLocs, RegionLocations oldLocs) {
|
|
||||||
RegionLocations locs = new RegionLocations(newLocs.getRegionLocations());
|
|
||||||
locs.mergeLocations(oldLocs);
|
|
||||||
return locs;
|
|
||||||
}
|
|
||||||
|
|
||||||
static boolean isGood(RegionLocations locs, int replicaId) {
|
static boolean isGood(RegionLocations locs, int replicaId) {
|
||||||
if (locs == null) {
|
if (locs == null) {
|
||||||
return false;
|
return false;
|
||||||
|
|
Loading…
Reference in New Issue