Repository: hbase Updated Branches: refs/heads/master 0ff05f46e -> 098f8c440
HBASE-11462 MetaTableAccessor shouldn't use ZooKeeeper (Mikhail Antononv) Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/7d0f5eba Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/7d0f5eba Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/7d0f5eba Branch: refs/heads/master Commit: 7d0f5eba2d9fc9dcc8c8900ced86560f7443257f Parents: 0ff05f4 Author: stack <st...@apache.org> Authored: Fri Sep 19 11:02:35 2014 -0700 Committer: stack <st...@apache.org> Committed: Fri Sep 19 11:02:35 2014 -0700 ---------------------------------------------------------------------- .../apache/hadoop/hbase/MetaTableAccessor.java | 48 ++++++++------------ .../apache/hadoop/hbase/client/HBaseAdmin.java | 35 ++++++++++---- .../hbase/zookeeper/MetaTableLocator.java | 34 ++++++++++++++ .../hadoop/hbase/master/AssignmentManager.java | 11 +++-- .../master/handler/EnableTableHandler.java | 15 ++++-- .../hbase/master/handler/TableEventHandler.java | 10 ++-- .../master/snapshot/MasterSnapshotVerifier.java | 9 +++- .../master/snapshot/TakeSnapshotHandler.java | 12 +++-- .../flush/MasterFlushTableProcedureManager.java | 14 ++++-- .../hadoop/hbase/TestMetaTableAccessor.java | 19 ++++---- .../TestLoadIncrementalHFilesSplitRecovery.java | 2 +- .../apache/hadoop/hbase/master/TestMaster.java | 7 ++- .../TestMasterOperationsForRegionReplicas.java | 11 ++--- .../TestRegionMergeTransactionOnCluster.java | 17 ++++--- .../hadoop/hbase/util/TestMergeTable.java | 6 +-- 15 files changed, 156 insertions(+), 94 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/7d0f5eba/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java ---------------------------------------------------------------------- diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java index 04979b5..b4ecdd9 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/MetaTableAccessor.java @@ -44,8 +44,6 @@ import org.apache.hadoop.hbase.util.EnvironmentEdgeManager; import org.apache.hadoop.hbase.util.Pair; import org.apache.hadoop.hbase.util.PairOfSameType; import org.apache.hadoop.hbase.util.Threads; -import org.apache.hadoop.hbase.zookeeper.MetaTableLocator; -import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; import java.io.IOException; import java.io.InterruptedIOException; @@ -367,22 +365,21 @@ public class MetaTableAccessor { } /** - * Gets all of the regions of the specified table. - * @param zkw zookeeper connection to access meta table + * Gets all of the regions of the specified table. Do not use this method + * to get meta table regions, use methods in MetaTableLocator instead. * @param hConnection connection we're using * @param tableName table we're looking for * @return Ordered list of {@link HRegionInfo}. * @throws IOException */ - public static List<HRegionInfo> getTableRegions(ZooKeeperWatcher zkw, - HConnection hConnection, TableName tableName) + public static List<HRegionInfo> getTableRegions(HConnection hConnection, TableName tableName) throws IOException { - return getTableRegions(zkw, hConnection, tableName, false); + return getTableRegions(hConnection, tableName, false); } /** - * Gets all of the regions of the specified table. - * @param zkw zookeeper connection to access meta table + * Gets all of the regions of the specified table. Do not use this method + * to get meta table regions, use methods in MetaTableLocator instead. * @param hConnection connection we're using * @param tableName table we're looking for * @param excludeOfflinedSplitParents If true, do not include offlined split @@ -390,12 +387,12 @@ public class MetaTableAccessor { * @return Ordered list of {@link HRegionInfo}. * @throws IOException */ - public static List<HRegionInfo> getTableRegions(ZooKeeperWatcher zkw, - HConnection hConnection, TableName tableName, final boolean excludeOfflinedSplitParents) - throws IOException { - List<Pair<HRegionInfo, ServerName>> result = null; + public static List<HRegionInfo> getTableRegions(HConnection hConnection, + TableName tableName, final boolean excludeOfflinedSplitParents) + throws IOException { + List<Pair<HRegionInfo, ServerName>> result; try { - result = getTableRegionsAndLocations(zkw, hConnection, tableName, + result = getTableRegionsAndLocations(hConnection, tableName, excludeOfflinedSplitParents); } catch (InterruptedException e) { throw (InterruptedIOException)new InterruptedIOException().initCause(e); @@ -457,7 +454,7 @@ public class MetaTableAccessor { } /** - * @param zkw zookeeper connection to access meta table + * Do not use this method to get meta table regions, use methods in MetaTableLocator instead. * @param hConnection connection we're using * @param tableName table we're looking for * @return Return list of regioninfos and server. @@ -465,14 +462,13 @@ public class MetaTableAccessor { * @throws InterruptedException */ public static List<Pair<HRegionInfo, ServerName>> - getTableRegionsAndLocations(ZooKeeperWatcher zkw, - HConnection hConnection, TableName tableName) - throws IOException, InterruptedException { - return getTableRegionsAndLocations(zkw, hConnection, tableName, true); + getTableRegionsAndLocations(HConnection hConnection, TableName tableName) + throws IOException, InterruptedException { + return getTableRegionsAndLocations(hConnection, tableName, true); } /** - * @param zkw ZooKeeperWatcher instance we're using to get hbase:meta location + * Do not use this method to get meta table regions, use methods in MetaTableLocator instead. * @param hConnection connection we're using * @param tableName table to work with * @return Return list of regioninfos and server addresses. @@ -480,17 +476,11 @@ public class MetaTableAccessor { * @throws InterruptedException */ public static List<Pair<HRegionInfo, ServerName>> getTableRegionsAndLocations( - ZooKeeperWatcher zkw, HConnection hConnection, final TableName tableName, + HConnection hConnection, final TableName tableName, final boolean excludeOfflinedSplitParents) throws IOException, InterruptedException { - if (tableName.equals(TableName.META_TABLE_NAME)) { - // If meta, do a bit of special handling. - ServerName serverName = new MetaTableLocator().getMetaRegionLocation(zkw); - List<Pair<HRegionInfo, ServerName>> list = - new ArrayList<Pair<HRegionInfo, ServerName>>(); - list.add(new Pair<HRegionInfo, ServerName>(HRegionInfo.FIRST_META_REGIONINFO, - serverName)); - return list; + throw new IOException("This method can't be used to locate meta regions;" + + " use MetaTableLocator instead"); } // Make a version of CollectingVisitor that collects HRegionInfo and ServerAddress CollectingVisitor<Pair<HRegionInfo, ServerName>> visitor = http://git-wip-us.apache.org/repos/asf/hbase/blob/7d0f5eba/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java ---------------------------------------------------------------------- diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java index aa8d21e..232538d 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java @@ -146,6 +146,7 @@ import org.apache.hadoop.hbase.util.Addressing; import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.hbase.util.EnvironmentEdgeManager; import org.apache.hadoop.hbase.util.Pair; +import org.apache.hadoop.hbase.zookeeper.MetaTableLocator; import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; import org.apache.hadoop.ipc.RemoteException; import org.apache.hadoop.util.StringUtils; @@ -1724,8 +1725,12 @@ public class HBaseAdmin implements Admin { checkTableExists(tableName); zookeeper = new ZooKeeperWatcher(conf, ZK_IDENTIFIER_PREFIX + connection.toString(), new ThrowableAbortable()); - List<Pair<HRegionInfo, ServerName>> pairs = - MetaTableAccessor.getTableRegionsAndLocations(zookeeper, connection, tableName); + List<Pair<HRegionInfo, ServerName>> pairs; + if (TableName.META_TABLE_NAME.equals(tableName)) { + pairs = new MetaTableLocator().getMetaRegionsAndLocations(zookeeper); + } else { + pairs = MetaTableAccessor.getTableRegionsAndLocations(connection, tableName); + } for (Pair<HRegionInfo, ServerName> pair: pairs) { if (pair.getFirst().isOffline()) continue; if (pair.getSecond() == null) continue; @@ -2078,8 +2083,12 @@ public class HBaseAdmin implements Admin { checkTableExists(tableName); zookeeper = new ZooKeeperWatcher(conf, ZK_IDENTIFIER_PREFIX + connection.toString(), new ThrowableAbortable()); - List<Pair<HRegionInfo, ServerName>> pairs = - MetaTableAccessor.getTableRegionsAndLocations(zookeeper, connection, tableName); + List<Pair<HRegionInfo, ServerName>> pairs; + if (TableName.META_TABLE_NAME.equals(tableName)) { + pairs = new MetaTableLocator().getMetaRegionsAndLocations(zookeeper); + } else { + pairs = MetaTableAccessor.getTableRegionsAndLocations(connection, tableName); + } for (Pair<HRegionInfo, ServerName> pair: pairs) { // May not be a server for a particular row if (pair.getSecond() == null) continue; @@ -2559,13 +2568,17 @@ public class HBaseAdmin implements Admin { ZooKeeperWatcher zookeeper = new ZooKeeperWatcher(conf, ZK_IDENTIFIER_PREFIX + connection.toString(), new ThrowableAbortable()); - List<HRegionInfo> Regions = null; + List<HRegionInfo> regions = null; try { - Regions = MetaTableAccessor.getTableRegions(zookeeper, connection, tableName, true); + if (TableName.META_TABLE_NAME.equals(tableName)) { + regions = new MetaTableLocator().getMetaRegions(zookeeper); + } else { + regions = MetaTableAccessor.getTableRegions(connection, tableName, true); + } } finally { zookeeper.close(); } - return Regions; + return regions; } public List<HRegionInfo> getTableRegions(final byte[] tableName) @@ -2664,8 +2677,12 @@ public class HBaseAdmin implements Admin { new ThrowableAbortable()); try { checkTableExists(tableName); - List<Pair<HRegionInfo, ServerName>> pairs = - MetaTableAccessor.getTableRegionsAndLocations(zookeeper, connection, tableName); + List<Pair<HRegionInfo, ServerName>> pairs; + if (TableName.META_TABLE_NAME.equals(tableName)) { + pairs = new MetaTableLocator().getMetaRegionsAndLocations(zookeeper); + } else { + pairs = MetaTableAccessor.getTableRegionsAndLocations(connection, tableName); + } for (Pair<HRegionInfo, ServerName> pair: pairs) { if (pair.getFirst().isOffline()) continue; if (pair.getSecond() == null) continue; http://git-wip-us.apache.org/repos/asf/hbase/blob/7d0f5eba/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/MetaTableLocator.java ---------------------------------------------------------------------- diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/MetaTableLocator.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/MetaTableLocator.java index f0c1d87..98a69ff 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/MetaTableLocator.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/zookeeper/MetaTableLocator.java @@ -24,6 +24,8 @@ import java.net.NoRouteToHostException; import java.net.SocketException; import java.net.SocketTimeoutException; import java.rmi.UnknownHostException; +import java.util.ArrayList; +import java.util.List; import javax.annotation.Nullable; @@ -48,6 +50,7 @@ import org.apache.hadoop.hbase.protobuf.generated.ZooKeeperProtos; import org.apache.hadoop.hbase.protobuf.generated.ZooKeeperProtos.MetaRegionServer; import org.apache.hadoop.hbase.regionserver.RegionServerStoppedException; import org.apache.hadoop.hbase.util.Bytes; +import org.apache.hadoop.hbase.util.Pair; import org.apache.hadoop.ipc.RemoteException; import org.apache.zookeeper.KeeperException; @@ -88,6 +91,37 @@ public class MetaTableLocator { } /** + * @param zkw ZooKeeper watcher to be used + * @return meta table regions and their locations. + */ + public List<Pair<HRegionInfo, ServerName>> getMetaRegionsAndLocations(ZooKeeperWatcher zkw) { + ServerName serverName = new MetaTableLocator().getMetaRegionLocation(zkw); + List<Pair<HRegionInfo, ServerName>> list = new ArrayList<>(); + list.add(new Pair<>(HRegionInfo.FIRST_META_REGIONINFO, serverName)); + return list; + } + + /** + * @param zkw ZooKeeper watcher to be used + * @return List of meta regions + */ + public List<HRegionInfo> getMetaRegions(ZooKeeperWatcher zkw) { + List<Pair<HRegionInfo, ServerName>> result; + result = getMetaRegionsAndLocations(zkw); + return getListOfHRegionInfos(result); + } + + private List<HRegionInfo> getListOfHRegionInfos( + final List<Pair<HRegionInfo, ServerName>> pairs) { + if (pairs == null || pairs.isEmpty()) return null; + List<HRegionInfo> result = new ArrayList<>(pairs.size()); + for (Pair<HRegionInfo, ServerName> pair: pairs) { + result.add(pair.getFirst()); + } + return result; + } + + /** * Gets the meta region location, if available. Does not block. * @param zkw zookeeper connection to use * @return server name or null if we failed to get the data. http://git-wip-us.apache.org/repos/asf/hbase/blob/7d0f5eba/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java index 7e0a5e2..f184ba0 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java @@ -84,6 +84,7 @@ import org.apache.hadoop.hbase.util.KeyLocker; import org.apache.hadoop.hbase.util.Pair; import org.apache.hadoop.hbase.util.PairOfSameType; import org.apache.hadoop.hbase.util.Threads; +import org.apache.hadoop.hbase.zookeeper.MetaTableLocator; import org.apache.hadoop.ipc.RemoteException; import org.apache.zookeeper.KeeperException; @@ -335,9 +336,13 @@ public class AssignmentManager { */ public Pair<Integer, Integer> getReopenStatus(TableName tableName) throws IOException { - List <HRegionInfo> hris = MetaTableAccessor.getTableRegions( - this.server.getZooKeeper(), this.server.getShortCircuitConnection(), - tableName, true); + List<HRegionInfo> hris; + if (TableName.META_TABLE_NAME.equals(tableName)) { + hris = new MetaTableLocator().getMetaRegions(server.getZooKeeper()); + } else { + hris = MetaTableAccessor.getTableRegions(server.getShortCircuitConnection(), tableName, true); + } + Integer pending = 0; for (HRegionInfo hri : hris) { String name = hri.getEncodedName(); http://git-wip-us.apache.org/repos/asf/hbase/blob/7d0f5eba/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/EnableTableHandler.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/EnableTableHandler.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/EnableTableHandler.java index 5f31389..3f3c81a 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/EnableTableHandler.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/EnableTableHandler.java @@ -48,6 +48,7 @@ import org.apache.hadoop.hbase.master.ServerManager; import org.apache.hadoop.hbase.master.TableLockManager; import org.apache.hadoop.hbase.master.TableLockManager.TableLock; import org.apache.hadoop.hbase.util.Pair; +import org.apache.hadoop.hbase.zookeeper.MetaTableLocator; /** * Handler to run enable of a table. @@ -170,9 +171,15 @@ public class EnableTableHandler extends EventHandler { ServerManager serverManager = ((HMaster)this.server).getServerManager(); // Get the regions of this table. We're done when all listed // tables are onlined. - List<Pair<HRegionInfo, ServerName>> tableRegionsAndLocations = MetaTableAccessor - .getTableRegionsAndLocations(this.server.getZooKeeper(), - this.server.getShortCircuitConnection(), tableName, true); + List<Pair<HRegionInfo, ServerName>> tableRegionsAndLocations; + if (TableName.META_TABLE_NAME.equals(tableName)) { + tableRegionsAndLocations = new MetaTableLocator().getMetaRegionsAndLocations( + server.getZooKeeper()); + } else { + tableRegionsAndLocations = MetaTableAccessor.getTableRegionsAndLocations( + server.getShortCircuitConnection(), tableName, true); + } + int countOfRegionsInTable = tableRegionsAndLocations.size(); Map<HRegionInfo, ServerName> regionsToAssign = regionsToAssignWithServerName(tableRegionsAndLocations); @@ -202,7 +209,7 @@ public class EnableTableHandler extends EventHandler { this.assignmentManager.getBalancer().retainAssignment(regionsToAssign, onlineServers); LOG.info("Bulk assigning " + regionsCount + " region(s) across " + bulkPlan.size() + " server(s), retainAssignment=true"); - + BulkAssigner ba = new GeneralBulkAssigner(this.server, bulkPlan, this.assignmentManager, true); try { if (ba.bulkAssign()) { http://git-wip-us.apache.org/repos/asf/hbase/blob/7d0f5eba/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/TableEventHandler.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/TableEventHandler.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/TableEventHandler.java index 8993840..1a4d1f6 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/TableEventHandler.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/handler/TableEventHandler.java @@ -51,6 +51,7 @@ import org.apache.hadoop.hbase.util.Bytes; import com.google.common.collect.Lists; import com.google.common.collect.Maps; +import org.apache.hadoop.hbase.zookeeper.MetaTableLocator; /** * Base class for performing operations against tables. @@ -125,9 +126,12 @@ public abstract class TableEventHandler extends EventHandler { LOG.info("Handling table operation " + eventType + " on table " + tableName); - List<HRegionInfo> hris = - MetaTableAccessor.getTableRegions(this.server.getZooKeeper(), - this.server.getShortCircuitConnection(), tableName); + List<HRegionInfo> hris; + if (TableName.META_TABLE_NAME.equals(tableName)) { + hris = new MetaTableLocator().getMetaRegions(server.getZooKeeper()); + } else { + hris = MetaTableAccessor.getTableRegions(server.getShortCircuitConnection(), tableName); + } handleTableOperation(hris); if (eventType.isOnlineSchemaChangeSupported() && this.masterServices. getAssignmentManager().getTableStateManager().isTableState( http://git-wip-us.apache.org/repos/asf/hbase/blob/7d0f5eba/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/MasterSnapshotVerifier.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/MasterSnapshotVerifier.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/MasterSnapshotVerifier.java index b140300..8a1b113 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/MasterSnapshotVerifier.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/MasterSnapshotVerifier.java @@ -42,6 +42,7 @@ import org.apache.hadoop.hbase.snapshot.CorruptedSnapshotException; import org.apache.hadoop.hbase.snapshot.SnapshotDescriptionUtils; import org.apache.hadoop.hbase.snapshot.SnapshotManifest; import org.apache.hadoop.hbase.snapshot.SnapshotReferenceUtil; +import org.apache.hadoop.hbase.zookeeper.MetaTableLocator; /** * General snapshot verification on the master. @@ -150,8 +151,12 @@ public final class MasterSnapshotVerifier { * @throws IOException if we can't reach hbase:meta or read the files from the FS */ private void verifyRegions(final SnapshotManifest manifest) throws IOException { - List<HRegionInfo> regions = MetaTableAccessor.getTableRegions( - this.services.getZooKeeper(), this.services.getShortCircuitConnection(), tableName); + List<HRegionInfo> regions; + if (TableName.META_TABLE_NAME.equals(tableName)) { + regions = new MetaTableLocator().getMetaRegions(services.getZooKeeper()); + } else { + regions = MetaTableAccessor.getTableRegions(services.getShortCircuitConnection(), tableName); + } // Remove the non-default regions RegionReplicaUtil.removeNonDefaultRegions(regions); http://git-wip-us.apache.org/repos/asf/hbase/blob/7d0f5eba/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.java index 9857acf..f7c7b5f 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.java @@ -54,6 +54,7 @@ import org.apache.hadoop.hbase.snapshot.SnapshotDescriptionUtils; import org.apache.hadoop.hbase.snapshot.SnapshotManifest; import org.apache.hadoop.hbase.util.FSUtils; import org.apache.hadoop.hbase.util.Pair; +import org.apache.hadoop.hbase.zookeeper.MetaTableLocator; import org.apache.zookeeper.KeeperException; /** @@ -167,9 +168,14 @@ public abstract class TakeSnapshotHandler extends EventHandler implements Snapsh snapshotManifest.addTableDescriptor(this.htd); monitor.rethrowException(); - List<Pair<HRegionInfo, ServerName>> regionsAndLocations = - MetaTableAccessor.getTableRegionsAndLocations(this.server.getZooKeeper(), - this.server.getShortCircuitConnection(), snapshotTable, false); + List<Pair<HRegionInfo, ServerName>> regionsAndLocations; + if (TableName.META_TABLE_NAME.equals(snapshotTable)) { + regionsAndLocations = new MetaTableLocator().getMetaRegionsAndLocations( + server.getZooKeeper()); + } else { + regionsAndLocations = MetaTableAccessor.getTableRegionsAndLocations( + server.getShortCircuitConnection(), snapshotTable, false); + } // run the snapshot snapshotRegions(regionsAndLocations); http://git-wip-us.apache.org/repos/asf/hbase/blob/7d0f5eba/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/flush/MasterFlushTableProcedureManager.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/flush/MasterFlushTableProcedureManager.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/flush/MasterFlushTableProcedureManager.java index e92b1e0..abee323 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/flush/MasterFlushTableProcedureManager.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/flush/MasterFlushTableProcedureManager.java @@ -45,6 +45,7 @@ import org.apache.hadoop.hbase.procedure.ProcedureCoordinatorRpcs; import org.apache.hadoop.hbase.procedure.ZKProcedureCoordinatorRpcs; import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.ProcedureDescription; import org.apache.hadoop.hbase.util.Pair; +import org.apache.hadoop.hbase.zookeeper.MetaTableLocator; import org.apache.zookeeper.KeeperException; import com.google.common.collect.Lists; @@ -124,12 +125,15 @@ public class MasterFlushTableProcedureManager extends MasterProcedureManager { // It is possible that regions may move after we get the region server list. // Each region server will get its own online regions for the table. // We may still miss regions that need to be flushed. - List<Pair<HRegionInfo, ServerName>> regionsAndLocations = null; + List<Pair<HRegionInfo, ServerName>> regionsAndLocations; try { - regionsAndLocations = - MetaTableAccessor.getTableRegionsAndLocations(this.master.getZooKeeper(), - this.master.getShortCircuitConnection(), - TableName.valueOf(desc.getInstance()), false); + if (TableName.META_TABLE_NAME.equals(tableName)) { + regionsAndLocations = new MetaTableLocator().getMetaRegionsAndLocations( + master.getZooKeeper()); + } else { + regionsAndLocations = MetaTableAccessor.getTableRegionsAndLocations( + master.getShortCircuitConnection(), tableName, false); + } } catch (InterruptedException e1) { String msg = "Failed to get regions for '" + desc.getInstance() + "'"; LOG.error(msg); http://git-wip-us.apache.org/repos/asf/hbase/blob/7d0f5eba/hbase-server/src/test/java/org/apache/hadoop/hbase/TestMetaTableAccessor.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/TestMetaTableAccessor.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/TestMetaTableAccessor.java index 1a43796..66a859e 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/TestMetaTableAccessor.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/TestMetaTableAccessor.java @@ -41,6 +41,7 @@ import org.apache.hadoop.hbase.testclassification.MediumTests; import org.apache.hadoop.hbase.testclassification.MiscTests; import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.hbase.util.Pair; +import org.apache.hadoop.hbase.zookeeper.MetaTableLocator; import org.junit.AfterClass; import org.junit.Assert; import org.junit.BeforeClass; @@ -198,14 +199,13 @@ public class TestMetaTableAccessor { abstract void metaTask() throws Throwable; } - @Test public void testGetRegionsCatalogTables() + @Test public void testGetRegionsFromMetaTable() throws IOException, InterruptedException { List<HRegionInfo> regions = - MetaTableAccessor.getTableRegions(UTIL.getZooKeeperWatcher(), - hConnection, TableName.META_TABLE_NAME); + new MetaTableLocator().getMetaRegions(UTIL.getZooKeeperWatcher()); assertTrue(regions.size() >= 1); - assertTrue(MetaTableAccessor.getTableRegionsAndLocations(UTIL.getZooKeeperWatcher(), - hConnection,TableName.META_TABLE_NAME).size() >= 1); + assertTrue(new MetaTableLocator().getMetaRegionsAndLocations( + UTIL.getZooKeeperWatcher()).size() >= 1); } @Test public void testTableExists() throws IOException { @@ -252,17 +252,14 @@ public class TestMetaTableAccessor { // Now make sure we only get the regions from 1 of the tables at a time - assertEquals(1, MetaTableAccessor.getTableRegions(UTIL.getZooKeeperWatcher(), - hConnection, name).size()); - assertEquals(1, MetaTableAccessor.getTableRegions(UTIL.getZooKeeperWatcher(), - hConnection, greaterName).size()); + assertEquals(1, MetaTableAccessor.getTableRegions(hConnection, name).size()); + assertEquals(1, MetaTableAccessor.getTableRegions(hConnection, greaterName).size()); } private static List<HRegionInfo> testGettingTableRegions(final HConnection hConnection, final TableName name, final int regionCount) throws IOException, InterruptedException { - List<HRegionInfo> regions = MetaTableAccessor.getTableRegions(UTIL.getZooKeeperWatcher(), - hConnection, name); + List<HRegionInfo> regions = MetaTableAccessor.getTableRegions(hConnection, name); assertEquals(regionCount, regions.size()); Pair<HRegionInfo, ServerName> pair = MetaTableAccessor.getRegion(hConnection, regions.get(0).getRegionName()); http://git-wip-us.apache.org/repos/asf/hbase/blob/7d0f5eba/hbase-server/src/test/java/org/apache/hadoop/hbase/mapreduce/TestLoadIncrementalHFilesSplitRecovery.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/mapreduce/TestLoadIncrementalHFilesSplitRecovery.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/mapreduce/TestLoadIncrementalHFilesSplitRecovery.java index 6ea14c9..e7b1516 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/mapreduce/TestLoadIncrementalHFilesSplitRecovery.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/mapreduce/TestLoadIncrementalHFilesSplitRecovery.java @@ -477,7 +477,7 @@ public class TestLoadIncrementalHFilesSplitRecovery { // Mess it up by leaving a hole in the hbase:meta HConnection hConnection = HConnectionManager.getConnection(util.getConfiguration()); List<HRegionInfo> regionInfos = MetaTableAccessor.getTableRegions( - util.getZooKeeperWatcher(), hConnection, TableName.valueOf(tableName)); + hConnection, TableName.valueOf(tableName)); for (HRegionInfo regionInfo : regionInfos) { if (Bytes.equals(regionInfo.getStartKey(), HConstants.EMPTY_BYTE_ARRAY)) { MetaTableAccessor.deleteRegion(hConnection, regionInfo); http://git-wip-us.apache.org/repos/asf/hbase/blob/7d0f5eba/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java index 6129dd7..73a1663 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMaster.java @@ -86,8 +86,7 @@ public class TestMaster { TEST_UTIL.loadTable(ht, FAMILYNAME, false); ht.close(); - List<Pair<HRegionInfo, ServerName>> tableRegions = - MetaTableAccessor.getTableRegionsAndLocations(m.getZooKeeper(), + List<Pair<HRegionInfo, ServerName>> tableRegions = MetaTableAccessor.getTableRegionsAndLocations( m.getShortCircuitConnection(), TABLENAME); LOG.info("Regions after load: " + Joiner.on(',').join(tableRegions)); assertEquals(1, tableRegions.size()); @@ -105,8 +104,8 @@ public class TestMaster { Thread.sleep(100); } LOG.info("Making sure we can call getTableRegions while opening"); - tableRegions = MetaTableAccessor.getTableRegionsAndLocations(m.getZooKeeper(), - m.getShortCircuitConnection(), TABLENAME, false); + tableRegions = MetaTableAccessor.getTableRegionsAndLocations(m.getShortCircuitConnection(), + TABLENAME, false); LOG.info("Regions: " + Joiner.on(',').join(tableRegions)); // We have three regions because one is split-in-progress http://git-wip-us.apache.org/repos/asf/hbase/blob/7d0f5eba/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterOperationsForRegionReplicas.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterOperationsForRegionReplicas.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterOperationsForRegionReplicas.java index 8f894c8..61967b7 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterOperationsForRegionReplicas.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterOperationsForRegionReplicas.java @@ -95,7 +95,7 @@ public class TestMasterOperationsForRegionReplicas { admin.createTable(desc, Bytes.toBytes("A"), Bytes.toBytes("Z"), numRegions); validateNumberOfRowsInMeta(table, numRegions, admin.getConnection()); - List<HRegionInfo> hris = MetaTableAccessor.getTableRegions(TEST_UTIL.getZooKeeperWatcher(), + List<HRegionInfo> hris = MetaTableAccessor.getTableRegions( admin.getConnection(), table); assert(hris.size() == numRegions * numReplica); } finally { @@ -117,8 +117,7 @@ public class TestMasterOperationsForRegionReplicas { TEST_UTIL.waitTableEnabled(table.getName()); validateNumberOfRowsInMeta(table, numRegions, admin.getConnection()); - List<HRegionInfo> hris = MetaTableAccessor.getTableRegions(TEST_UTIL.getZooKeeperWatcher(), - admin.getConnection(), table); + List<HRegionInfo> hris = MetaTableAccessor.getTableRegions(admin.getConnection(), table); assert(hris.size() == numRegions * numReplica); // check that the master created expected number of RegionState objects for (int i = 0; i < numRegions; i++) { @@ -211,8 +210,7 @@ public class TestMasterOperationsForRegionReplicas { .getAssignmentManager().getRegionStates().getRegionsOfTable(table); assert(regions.size() == numRegions * numReplica); //also make sure the meta table has the replica locations removed - hris = MetaTableAccessor.getTableRegions(TEST_UTIL.getZooKeeperWatcher(), - admin.getConnection(), table); + hris = MetaTableAccessor.getTableRegions(admin.getConnection(), table); assert(hris.size() == numRegions * numReplica); //just check that the number of default replica regions in the meta table are the same //as the number of regions the table was created with, and the count of the @@ -247,8 +245,7 @@ public class TestMasterOperationsForRegionReplicas { admin.createTable(desc, Bytes.toBytes("A"), Bytes.toBytes("Z"), numRegions); TEST_UTIL.waitTableEnabled(table.getName()); Set<byte[]> tableRows = new HashSet<byte[]>(); - List<HRegionInfo> hris = MetaTableAccessor.getTableRegions(TEST_UTIL.getZooKeeperWatcher(), - admin.getConnection(), table); + List<HRegionInfo> hris = MetaTableAccessor.getTableRegions(admin.getConnection(), table); for (HRegionInfo hri : hris) { tableRows.add(hri.getRegionName()); } http://git-wip-us.apache.org/repos/asf/hbase/blob/7d0f5eba/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionMergeTransactionOnCluster.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionMergeTransactionOnCluster.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionMergeTransactionOnCluster.java index a0cc36d..07c1a58 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionMergeTransactionOnCluster.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionMergeTransactionOnCluster.java @@ -173,8 +173,7 @@ public class TestRegionMergeTransactionOnCluster { table.close(); List<Pair<HRegionInfo, ServerName>> tableRegions = MetaTableAccessor - .getTableRegionsAndLocations(master.getZooKeeper(), - master.getShortCircuitConnection(), tableName); + .getTableRegionsAndLocations(master.getShortCircuitConnection(), tableName); HRegionInfo mergedRegionInfo = tableRegions.get(0).getFirst(); HTableDescriptor tableDescritor = master.getTableDescriptors().get( tableName); @@ -291,13 +290,13 @@ public class TestRegionMergeTransactionOnCluster { // Create table and load data. createTableAndLoadData(master, tableName, 5, 2); List<Pair<HRegionInfo, ServerName>> initialRegionToServers = - MetaTableAccessor.getTableRegionsAndLocations(master.getZooKeeper(), + MetaTableAccessor.getTableRegionsAndLocations( master.getShortCircuitConnection(), tableName); // Merge 1st and 2nd region PairOfSameType<HRegionInfo> mergedRegions = mergeRegionsAndVerifyRegionNum(master, tableName, 0, 2, 5 * 2 - 2); List<Pair<HRegionInfo, ServerName>> currentRegionToServers = - MetaTableAccessor.getTableRegionsAndLocations(master.getZooKeeper(), + MetaTableAccessor.getTableRegionsAndLocations( master.getShortCircuitConnection(), tableName); List<HRegionInfo> initialRegions = new ArrayList<HRegionInfo>(); for (Pair<HRegionInfo, ServerName> p : initialRegionToServers) { @@ -337,7 +336,7 @@ public class TestRegionMergeTransactionOnCluster { HMaster master, TableName tablename, int regionAnum, int regionBnum) throws Exception { List<Pair<HRegionInfo, ServerName>> tableRegions = MetaTableAccessor - .getTableRegionsAndLocations(master.getZooKeeper(), + .getTableRegionsAndLocations( master.getShortCircuitConnection(), tablename); HRegionInfo regionA = tableRegions.get(regionAnum).getFirst(); HRegionInfo regionB = tableRegions.get(regionBnum).getFirst(); @@ -354,7 +353,7 @@ public class TestRegionMergeTransactionOnCluster { long timeout = System.currentTimeMillis() + waitTime; while (System.currentTimeMillis() < timeout) { tableRegionsInMeta = MetaTableAccessor.getTableRegionsAndLocations( - master.getZooKeeper(), master.getShortCircuitConnection(), tablename); + master.getShortCircuitConnection(), tablename); tableRegionsInMaster = master.getAssignmentManager().getRegionStates() .getRegionsOfTable(tablename); if (tableRegionsInMeta.size() == expectedRegionNum @@ -365,7 +364,7 @@ public class TestRegionMergeTransactionOnCluster { } tableRegionsInMeta = MetaTableAccessor.getTableRegionsAndLocations( - master.getZooKeeper(), master.getShortCircuitConnection(), tablename); + master.getShortCircuitConnection(), tablename); LOG.info("Regions after merge:" + Joiner.on(',').join(tableRegionsInMeta)); assertEquals(expectedRegionNum, tableRegionsInMeta.size()); } @@ -395,14 +394,14 @@ public class TestRegionMergeTransactionOnCluster { List<Pair<HRegionInfo, ServerName>> tableRegions; while (System.currentTimeMillis() < timeout) { tableRegions = MetaTableAccessor.getTableRegionsAndLocations( - master.getZooKeeper(), master.getShortCircuitConnection(), tablename); + master.getShortCircuitConnection(), tablename); if (tableRegions.size() == numRegions * replication) break; Thread.sleep(250); } tableRegions = MetaTableAccessor.getTableRegionsAndLocations( - master.getZooKeeper(), master.getShortCircuitConnection(), tablename); + master.getShortCircuitConnection(), tablename); LOG.info("Regions after load: " + Joiner.on(',').join(tableRegions)); assertEquals(numRegions * replication, tableRegions.size()); return table; http://git-wip-us.apache.org/repos/asf/hbase/blob/7d0f5eba/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestMergeTable.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestMergeTable.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestMergeTable.java index 418f977..828dcfa 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestMergeTable.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestMergeTable.java @@ -118,16 +118,14 @@ public class TestMergeTable { HConnection hConnection = HConnectionManager.getConnection(c); List<HRegionInfo> originalTableRegions = - MetaTableAccessor.getTableRegions(UTIL.getZooKeeperWatcher(), hConnection, - desc.getTableName()); + MetaTableAccessor.getTableRegions(hConnection, desc.getTableName()); LOG.info("originalTableRegions size=" + originalTableRegions.size() + "; " + originalTableRegions); Admin admin = new HBaseAdmin(c); admin.disableTable(desc.getTableName()); HMerge.merge(c, FileSystem.get(c), desc.getTableName()); List<HRegionInfo> postMergeTableRegions = - MetaTableAccessor.getTableRegions(UTIL.getZooKeeperWatcher(), hConnection, - desc.getTableName()); + MetaTableAccessor.getTableRegions(hConnection, desc.getTableName()); LOG.info("postMergeTableRegions size=" + postMergeTableRegions.size() + "; " + postMergeTableRegions); assertTrue("originalTableRegions=" + originalTableRegions.size() +