.map(regionNode -> { TransitRegionStateProcedure proc = TransitRegionStateProcedure.assign(env, regionNode.getRegionInfo(), targetServer); regionNode.lock(); try {
public long assign(RegionInfo regionInfo, ServerName sn) throws IOException { // TODO: should we use getRegionStateNode? RegionStateNode regionNode = regionStates.getOrCreateRegionStateNode(regionInfo); TransitRegionStateProcedure proc; regionNode.lock(); try { preTransitCheck(regionNode, STATES_EXPECTED_ON_ASSIGN); proc = TransitRegionStateProcedure.assign(getProcedureEnvironment(), regionInfo, sn); regionNode.setProcedure(proc); } finally { regionNode.unlock(); } ProcedureSyncWait.submitAndWaitProcedure(master.getMasterProcedureExecutor(), proc); return proc.getProcId(); }
private TransitRegionStateProcedure createAssignProcedure(RegionStateNode regionNode, ServerName targetServer, boolean override) { TransitRegionStateProcedure proc; regionNode.lock(); try { if(override && regionNode.getProcedure() != null) { regionNode.unsetProcedure(regionNode.getProcedure()); } assert regionNode.getProcedure() == null; proc = TransitRegionStateProcedure.assign(getProcedureEnvironment(), regionNode.getRegionInfo(), targetServer); regionNode.setProcedure(proc); } finally { regionNode.unlock(); } return proc; }
continue; TransitRegionStateProcedure proc = TransitRegionStateProcedure.assign(env, region, null); regionNode.setProcedure(proc); addChildProcedure(proc);
@Test public void testRecoveryAndDoubleExecutionUnassignAndAssign() throws Exception { HMaster master = UTIL.getMiniHBaseCluster().getMaster(); MasterProcedureEnv env = master.getMasterProcedureExecutor().getEnvironment(); HRegion region = UTIL.getMiniHBaseCluster().getRegions(tableName).get(0); RegionInfo regionInfo = region.getRegionInfo(); long openSeqNum = region.getOpenSeqNum(); TransitRegionStateProcedure unassign = TransitRegionStateProcedure.unassign(env, regionInfo); testRecoveryAndDoubleExcution(unassign); AssignmentManager am = master.getAssignmentManager(); assertTrue(am.getRegionStates().getRegionState(regionInfo).isClosed()); TransitRegionStateProcedure assign = TransitRegionStateProcedure.assign(env, regionInfo, null); testRecoveryAndDoubleExcution(assign); HRegion region2 = UTIL.getMiniHBaseCluster().getRegions(tableName).get(0); long openSeqNum2 = region2.getOpenSeqNum(); // confirm that the region is successfully opened assertTrue(openSeqNum2 > openSeqNum); } }