wchevreuil commented on a change in pull request #307: HBase 22537
URL: https://github.com/apache/hbase/pull/307#discussion_r299463921
 
 

 ##########
 File path: 
hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncNonMetaRegionLocator.java
 ##########
 @@ -390,6 +404,98 @@ public RegionLocations getRegionLocations(TableName 
tableName, int replicaId, bo
     });
   }
 
+  @Test
+  public void testRegionReplicaRitRecovery() throws Exception {
+    int startRowNum = 11;
+    int rowCount = 60;
+
+    final TableName tableName = TableName.valueOf(name.getMethodName());
+    final ProcedureExecutor<MasterProcedureEnv> procExec = 
getMasterProcedureExecutor();
+    TEST_UTIL.getAdmin().createTable(
+      TableDescriptorBuilder.newBuilder(tableName)
+          
.setColumnFamily(ColumnFamilyDescriptorBuilder.of(FAMILY)).setRegionReplication(2)
+          .build());
+    TEST_UTIL.waitUntilAllRegionsAssigned(tableName);
+    RegionLocations locs = new Locator() {
+
+      @Override
+      public void updateCachedLocationOnError(HRegionLocation loc, Throwable 
error)
+          throws Exception {
+        LOCATOR.updateCachedLocationOnError(loc, error);
+      }
+
+      @Override
+      public RegionLocations getRegionLocations(TableName tableName, int 
replicaId, boolean reload)
+          throws Exception {
+        return LOCATOR.getRegionLocations(tableName, EMPTY_START_ROW, 
replicaId,
+          RegionLocateType.CURRENT, reload).get();
+      }
+    }.getRegionLocations(tableName, 0, false);
+    ServerName serverName =
+        RegionReplicaTestHelper.getRSCarryingReplica(TEST_UTIL, tableName, 
1).get();
+    List<RegionInfo> regions = TEST_UTIL.getAdmin().getRegions(tableName);
+    insertData(tableName);
+    int splitRowNum = startRowNum + rowCount / 2;
+    byte[] splitKey = Bytes.toBytes("" + splitRowNum);
+
+    // Split region of the table
+    long procId =
+        procExec.submitProcedure(new 
SplitTableRegionProcedure(procExec.getEnvironment(), regions
+            .get(0), splitKey));
+    // Wait the completion
+    ProcedureTestingUtility.waitProcedure(procExec, procId);
+
+    // Disable the table
+    long procId1 =
+        procExec.submitProcedure(new 
DisableTableProcedure(procExec.getEnvironment(), tableName,
+            false));
+    // Wait the completion
+    ProcedureTestingUtility.waitProcedure(procExec, procId1);
+
+    long procId2 =
+        procExec.submitProcedure(new 
DeleteTableProcedure(procExec.getEnvironment(), tableName));
+    // Wait the completion
+    ProcedureTestingUtility.waitProcedure(procExec, procId2);
+
+    AssignmentTestingUtil.killRs(TEST_UTIL, serverName);
+    long procId3 = getSCPProcId(procExec);
+    Threads.sleepWithoutInterrupt(5000);
+
+    boolean hasRegionsInTransition =
+        
TEST_UTIL.getMiniHBaseCluster().getMaster().getAssignmentManager().getRegionStates()
+            .hasRegionsInTransition();
+
+    assertEquals(false, hasRegionsInTransition);
+
+  }
+
+  private ProcedureExecutor<MasterProcedureEnv> getMasterProcedureExecutor() {
+    return 
TEST_UTIL.getHBaseCluster().getMaster().getMasterProcedureExecutor();
+  }
+
+  private long getSCPProcId(ProcedureExecutor<?> procExec) {
+    TEST_UTIL.waitFor(35000, () -> !procExec.getProcedures().isEmpty());
+    return 
procExec.getActiveProcIds().stream().mapToLong(Long::longValue).min().getAsLong();
+  }
+
+  private void insertData(final TableName tableName) throws IOException, 
InterruptedException {
 
 Review comment:
   Sure, it may be required for some of the tests there, but in this specific 
case, we don't need flushes, nor the simultaneous insertion on two separate 
halves. Had simplified it on the latest commit.

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


With regards,
Apache Git Services

Reply via email to