/** * Notice that, we will return true if {@code expected} is empty. * <p/> * This is a bit strange but we need this logic, for example, we can change the state to OPENING * from any state, as in SCP we will not change the state to CLOSED before opening the region. */ public boolean isInState(State... expected) { if (expected.length == 0) { return true; } return getState().matches(expected); }
public String toShortString() { // rit= is the current Region-In-Transition State -- see State enum. return String.format("rit=%s, location=%s", getState(), getRegionLocation()); }
/** * Set new {@link State} but only if currently in <code>expected</code> State (if not, throw * {@link UnexpectedStateException}. */ public void transitionState(final State update, final State... expected) throws UnexpectedStateException { if (!setState(update, expected)) { throw new UnexpectedStateException("Expected " + Arrays.toString(expected) + " so could move to " + update + " but current state=" + getState()); } }
public Map<RegionState.State, List<RegionInfo>> getRegionByStateOfTable(TableName tableName) { final State[] states = State.values(); final Map<RegionState.State, List<RegionInfo>> tableRegions = new HashMap<State, List<RegionInfo>>(states.length); for (int i = 0; i < states.length; ++i) { tableRegions.put(states[i], new ArrayList<RegionInfo>()); } for (RegionStateNode node: regionsMap.values()) { if (node.getTable().equals(tableName)) { tableRegions.get(node.getState()).add(node.getRegionInfo()); } } return tableRegions; }
private void transitStateAndUpdate(RegionStateNode regionNode, RegionState.State newState, RegionState.State... expectedStates) throws IOException { RegionState.State state = regionNode.getState(); regionNode.transitionState(newState, expectedStates); boolean succ = false; try { regionStateStore.updateRegionLocation(regionNode); succ = true; } finally { if (!succ) { // revert regionNode.setState(state); } } }
public RegionState toRegionState() { return new RegionState(getRegionInfo(), getState(), getLastUpdate(), getRegionLocation()); }
public void updateRegionLocation(RegionStateNode regionStateNode) throws IOException { if (regionStateNode.getRegionInfo().isMetaRegion()) { updateMetaLocation(regionStateNode.getRegionInfo(), regionStateNode.getRegionLocation(), regionStateNode.getState()); } else { long openSeqNum = regionStateNode.getState() == State.OPEN ? regionStateNode.getOpenSeqNum() : HConstants.NO_SEQNUM; updateUserRegionLocation(regionStateNode.getRegionInfo(), regionStateNode.getState(), regionStateNode.getRegionLocation(), openSeqNum, // The regionStateNode may have no procedure in a test scenario; allow for this. regionStateNode.getProcedure() != null ? regionStateNode.getProcedure().getProcId() : Procedure.NO_PROC_ID); } }
void regionFailedOpen(RegionStateNode regionNode, boolean giveUp) throws IOException { RegionState.State state = regionNode.getState(); ServerName regionLocation = regionNode.getRegionLocation(); if (giveUp) { regionNode.setState(State.FAILED_OPEN); regionNode.setRegionLocation(null); boolean succ = false; try { regionStateStore.updateRegionLocation(regionNode); succ = true; } finally { if (!succ) { // revert regionNode.setState(state); regionNode.setRegionLocation(regionLocation); } } } if (regionLocation != null) { regionStates.removeRegionFromServer(regionLocation, regionNode); } }
if (table != null && state != null && !table.equals("null") && !state.equals("null")) { rit = rit.stream().filter(regionStateNode -> regionStateNode.getTable().getNameAsString().equals(table)) .filter(regionStateNode -> regionStateNode.getState().name().equals(state)) .collect(Collectors.toList()); out.print( regionStateNode.getRegionInfo().getTable() ); out.write("</td>\n <td>"); out.print( regionStateNode.getState() ); out.write("</td>\n <td>"); out.print( regionStateNode.getProcedure().getProcId() );
" FAILED because state=" + node.getState() + "; expected " + Arrays.toString(EXPECTED_SPLIT_STATES))); return false;
void regionClosed(RegionStateNode regionNode, boolean normally) throws IOException { RegionState.State state = regionNode.getState(); ServerName regionLocation = regionNode.getRegionLocation(); if (normally) { regionNode.transitionState(State.CLOSED, STATES_EXPECTED_ON_CLOSED); } else { // For SCP regionNode.transitionState(State.ABNORMALLY_CLOSED); } regionNode.setRegionLocation(null); boolean succ = false; try { regionStateStore.updateRegionLocation(regionNode); succ = true; } finally { if (!succ) { // revert regionNode.setState(state); regionNode.setRegionLocation(regionLocation); } } if (regionLocation != null) { regionNode.setLastHost(regionLocation); regionStates.removeRegionFromServer(regionLocation, regionNode); } }
() -> proc.getCurrentStateId() == REGION_STATE_TRANSITION_CONFIRM_OPENED_VALUE); assertEquals(RegionState.State.OPENING, rsn.getState());