private TransitRegionStateProcedure[] createUnassignProcedures(MasterProcedureEnv env) throws IOException { return AssignmentManagerUtil.createUnassignProceduresForSplitOrMerge(env, Stream.of(regionsToMerge), getRegionReplication(env)); }
private void checkClosedRegions(MasterProcedureEnv env) throws IOException { // theoretically this should not happen any more after we use TRSP, but anyway let's add a check // here for (RegionInfo region : regionsToMerge) { AssignmentManagerUtil.checkClosedRegion(env, region); } }
static TransitRegionStateProcedure[] createAssignProceduresForOpeningNewRegions( MasterProcedureEnv env, List<RegionInfo> regions, int regionReplication, ServerName targetServer) { return createAssignProcedures(env, regions, regionReplication, targetServer, false); }
private boolean isMergeable(final MasterProcedureEnv env, final RegionState rs) throws IOException { GetRegionInfoResponse response = AssignmentManagerUtil.getRegionInfoResponse(env, rs.getServerName(), rs.getRegion()); return response.hasMergeable() && response.getMergeable(); }
private TransitRegionStateProcedure[] createAssignProcedures(MasterProcedureEnv env) throws IOException { List<RegionInfo> hris = new ArrayList<RegionInfo>(2); hris.add(daughter_1_RI); hris.add(daughter_2_RI); return AssignmentManagerUtil.createAssignProceduresForOpeningNewRegions(env, hris, getRegionReplication(env), getParentRegionServerName(env)); }
private void removeNonDefaultReplicas(MasterProcedureEnv env) throws IOException { AssignmentManagerUtil.removeNonDefaultReplicas(env, Stream.of(regionsToMerge), getRegionReplication(env)); }
/** * Rollback close regions **/ private void rollbackCloseRegionsForMerge(MasterProcedureEnv env) throws IOException { AssignmentManagerUtil.reopenRegionsForRollback(env, Arrays.asList(regionsToMerge), getRegionReplication(env), getServerName(env)); }
GetRegionInfoResponse response = AssignmentManagerUtil.getRegionInfoResponse(env, node.getRegionLocation(), node.getRegionInfo(), true); if(bestSplitRow == null || bestSplitRow.length == 0) {
private TransitRegionStateProcedure[] createAssignProcedures(MasterProcedureEnv env) throws IOException { return AssignmentManagerUtil.createAssignProceduresForOpeningNewRegions(env, Collections.singletonList(mergedRegion), getRegionReplication(env), getServerName(env)); }
private void removeNonDefaultReplicas(MasterProcedureEnv env) throws IOException { AssignmentManagerUtil.removeNonDefaultReplicas(env, Stream.of(getParentRegion()), getRegionReplication(env)); }
/** * Rollback close parent region */ private void openParentRegion(MasterProcedureEnv env) throws IOException { AssignmentManagerUtil.reopenRegionsForRollback(env, Collections.singletonList((getParentRegion())), getRegionReplication(env), getParentRegionServerName(env)); }
private TransitRegionStateProcedure[] createUnassignProcedures(MasterProcedureEnv env) throws IOException { return AssignmentManagerUtil.createUnassignProceduresForSplitOrMerge(env, Stream.of(getParentRegion()), getRegionReplication(env)); }
static GetRegionInfoResponse getRegionInfoResponse(final MasterProcedureEnv env, final ServerName regionLocation, final RegionInfo hri, boolean includeBestSplitRow) throws IOException { // TODO: There is no timeout on this controller. Set one! HBaseRpcController controller = env.getMasterServices().getClusterConnection().getRpcControllerFactory().newController(); final AdminService.BlockingInterface admin = env.getMasterServices().getClusterConnection().getAdmin(regionLocation); GetRegionInfoRequest request = null; if (includeBestSplitRow) { request = RequestConverter.buildGetRegionInfoRequest(hri.getRegionName(), false, true); } else { request = RequestConverter.buildGetRegionInfoRequest(hri.getRegionName()); } try { return admin.getRegionInfo(controller, request); } catch (ServiceException e) { throw ProtobufUtil.handleRemoteException(e); } }
private void checkClosedRegions(MasterProcedureEnv env) throws IOException { // theoretically this should not happen any more after we use TRSP, but anyway let's add a check // here AssignmentManagerUtil.checkClosedRegion(env, getParentRegion()); }
static void reopenRegionsForRollback(MasterProcedureEnv env, List<RegionInfo> regions, int regionReplication, ServerName targetServer) { TransitRegionStateProcedure[] procs = createAssignProcedures(env, regions, regionReplication, targetServer, true); if (procs.length > 0) { env.getMasterServices().getMasterProcedureExecutor().submitProcedures(procs); } }
@Test public void testCreateUnassignProcedureForSplitFail() throws IOException { RegionInfo region = getPrimaryRegions().get(0); AM.getRegionStates().getRegionStateNode(region) .setProcedure(TransitRegionStateProcedure.unassign(ENV, region)); try { AssignmentManagerUtil.createUnassignProceduresForSplitOrMerge(ENV, Stream.of(region), REGION_REPLICATION); fail("Should fail as the region is in transition"); } catch (HBaseIOException e) { // expected } }
@Test public void testCreateUnassignProceduresForMergeFail() throws IOException { List<RegionInfo> regions = getPrimaryRegions(); RegionInfo regionA = regions.get(0); RegionInfo regionB = regions.get(1); AM.getRegionStates().getRegionStateNode(regionB) .setProcedure(TransitRegionStateProcedure.unassign(ENV, regionB)); try { AssignmentManagerUtil.createUnassignProceduresForSplitOrMerge(ENV, Stream.of(regionA, regionB), REGION_REPLICATION); fail("Should fail as the region is in transition"); } catch (HBaseIOException e) { // expected } IntStream.range(0, REGION_REPLICATION) .mapToObj(i -> RegionReplicaUtil.getRegionInfoForReplica(regionA, i)) .map(AM.getRegionStates()::getRegionStateNode).forEachOrdered( rn -> assertFalse("Should have unset the proc for " + rn, rn.isInTransition())); } }