diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/TableSnapshotReadsMapReduceIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/TableSnapshotReadsMapReduceIT.java index e493b17703a..39d70bbd492 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/TableSnapshotReadsMapReduceIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/TableSnapshotReadsMapReduceIT.java @@ -405,35 +405,6 @@ private void snapshotCreateSync(TableName hbaseTableName, } } - private void splitTableSync(Admin admin, TableName hbaseTableName, - byte[] splitPoint, int expectedRegions) throws IOException, - InterruptedException { - admin.split(hbaseTableName, splitPoint); - AssignmentManager assignmentManager = - getUtility().getHBaseCluster().getMaster().getAssignmentManager(); - // wait for split daughter regions coming online for ~20s - for (int i = 0; i < 20; i++) { - Thread.sleep(1000); - List regions = getUtility().getHBaseCluster() - .getRegions(hbaseTableName); - if (regions.size() >= expectedRegions) { - boolean allRegionsOnline = true; - for (HRegion region : regions) { - if (!assignmentManager.getRegionStates() - .isRegionOnline(region.getRegionInfo())) { - allRegionsOnline = false; - break; - } - } - if (allRegionsOnline) { - break; - } - } - LOGGER.info("Sleeping for 1000 ms while waiting for {} to split and all regions to come online", - hbaseTableName.getNameAsString()); - } - } - private void deleteSnapshotIfExists(String snapshotName) throws Exception { try (Connection conn = DriverManager.getConnection(getUrl()); Admin admin = conn.unwrap(PhoenixConnection.class).getQueryServices().getAdmin()) { diff --git a/phoenix-core/src/test/java/org/apache/phoenix/query/BaseTest.java b/phoenix-core/src/test/java/org/apache/phoenix/query/BaseTest.java index faf2a18d8ba..29600817851 100644 --- a/phoenix-core/src/test/java/org/apache/phoenix/query/BaseTest.java +++ b/phoenix-core/src/test/java/org/apache/phoenix/query/BaseTest.java @@ -130,6 +130,7 @@ import org.apache.hadoop.hbase.ipc.PhoenixRpcSchedulerFactory; import org.apache.hadoop.hbase.master.HMaster; import org.apache.hadoop.hbase.master.assignment.AssignmentManager; +import org.apache.hadoop.hbase.regionserver.HRegion; import org.apache.hadoop.hbase.regionserver.HRegionServer; import org.apache.hadoop.hbase.regionserver.RSRpcServices; import org.apache.hadoop.hbase.util.Bytes; @@ -1824,20 +1825,35 @@ private static void verifySequence(String tenantID, String sequenceName, String } phxConn.close(); } - /** * Synchronously split table at the given split point */ - protected static void splitRegion(TableName fullTableName, byte[] splitPoint) throws SQLException, IOException, InterruptedException { - Admin admin = - driver.getConnectionQueryServices(getUrl(), TestUtil.TEST_PROPERTIES).getAdmin(); - admin.split(fullTableName, splitPoint); - // make sure the split finishes (there's no synchronous splitting before HBase 2.x) - admin.disableTable(fullTableName); - admin.enableTable(fullTableName); + protected static void splitTableSync(Admin admin, TableName hbaseTableName, byte[] splitPoint, + int expectedRegions) throws IOException, InterruptedException { + admin.split(hbaseTableName, splitPoint); + for (int i = 0; i < 30; i++) { + List regions = getUtility().getHBaseCluster().getRegions(hbaseTableName); + if (regions.size() >= expectedRegions) { + boolean splitSuccessful = true; + for (HRegion region : regions) { + if (!region.isSplittable()) { + splitSuccessful = false; + } + } + if(splitSuccessful) { + return; + } + } + LOGGER.info( + "Sleeping for 1000 ms while waiting for {} to split and all regions to come online", + hbaseTableName.getNameAsString()); + Thread.sleep(1000); + } + throw new IOException("Split did not succeed for table: " + hbaseTableName.getNameAsString() + + " , expected regions after split: " + expectedRegions); } - + /** * Returns true if the region contains atleast one of the metadata rows we are interested in */ @@ -1866,8 +1882,10 @@ protected static void splitTable(TableName fullTableName, List splitPoin AssignmentManager am = master.getAssignmentManager(); // No need to split on the first splitPoint since the end key of region boundaries are exclusive for (int i=1; i regionInfoList = admin.getRegions(fullTableName); + assertEquals(splitPoints.size(), regionInfoList.size()); HashMap> serverToRegionsList = Maps.newHashMapWithExpectedSize(NUM_SLAVES_BASE); Deque availableRegionServers = new ArrayDeque(NUM_SLAVES_BASE); for (int i=0; i