/** * @return Return online regions of table; does not include OFFLINE or SPLITTING regions. */ public List<RegionInfo> getRegionsOfTable(TableName table, boolean offline) { return getRegionsOfTable(table, state -> include(state, offline)); }
/** * Called by DisableTableProcedure to unassign all the regions for a table. */ public TransitRegionStateProcedure[] createUnassignProceduresForDisabling(TableName tableName) { return regionStates.getTableRegionStateNodes(tableName).stream().map(regionNode -> { regionNode.lock(); try { if (!regionStates.include(regionNode, false) || regionStates.isRegionOffline(regionNode.getRegionInfo())) { return null; } // As in DisableTableProcedure, we will hold the xlock for table, so we can make sure that // this procedure has not been executed yet, as TRSP will hold the shared lock for table all // the time. So here we will unset it and when it is actually executed, it will find that // the attach procedure is not itself and quit immediately. if (regionNode.getProcedure() != null) { regionNode.unsetProcedure(regionNode.getProcedure()); } TransitRegionStateProcedure proc = TransitRegionStateProcedure .unassign(getProcedureEnvironment(), regionNode.getRegionInfo()); regionNode.setProcedure(proc); return proc; } finally { regionNode.unlock(); } }).filter(p -> p != null).toArray(TransitRegionStateProcedure[]::new); }
private HRegionLocation createRegionForReopen(RegionStateNode node) { node.lock(); try { if (!include(node, false)) { return null; } if (node.isInState(State.OPEN)) { return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(), node.getOpenSeqNum()); } else if (node.isInState(State.OPENING)) { return new HRegionLocation(node.getRegionInfo(), node.getRegionLocation(), -1); } else { return null; } } finally { node.unlock(); } }