/** * Log split is done for a given region, so it is assignable now. */ public void logSplit(final HRegionInfo region) { clearLastAssignment(region); }
/** * Add a list of regions to RegionStates. If a region is split * and offline, its state will be SPLIT. Otherwise, its state will * be OFFLINE. Region already in RegionStates will be skipped. */ public void createRegionStates( final List<HRegionInfo> hris) { for (HRegionInfo hri: hris) { createRegionState(hri); } }
|| RegionState.isUnassignable(expectedState), "Offlined region should not be " + expectedState); if (isRegionInState(hri, State.SPLITTING_NEW, State.MERGING_NEW)) { deleteRegion(hri); return; updateRegionState(hri, newState); String encodedName = hri.getEncodedName(); synchronized (this) { removeFromServerHoldings(oldServerName, hri); removeFromReplicaMapping(hri); } else {
if (isRegionOnline(region)) { regionsToOffline.add(region); } else if (isRegionInState(region, State.SPLITTING, State.MERGING)) { LOG.debug("Offline splitting/merging region " + getRegionState(region)); try { regionOffline(hri); cleanIfNoMetaEntry(regionsToCleanIfNoMetaEntry); return rits;
RegionState state = regionStates.getRegionState(region); if (state == null) { LOG.warn("Assigning but not in region states: " + region); state = regionStates.createRegionState(region); case FAILED_OPEN: unassign(region, state, -1, null, false, null); state = regionStates.getRegionState(region); if (state.isFailedClose()) { && regionStates.isServerDeadAndNotProcessed(sn) && wasRegionOnDeadServerByMeta(region, sn)) { if (!regionStates.isRegionInTransition(region)) { LOG.info("Updating the state to " + State.OFFLINE + " to allow to be reassigned by SSH"); regionStates.updateRegionState(region, State.OFFLINE);
return; updateRegionState(hri, State.OPEN, serverName, openSeqNum); LOG.debug("Onlined " + hri.getShortNameToLog() + " on " + serverName); addToServerHoldings(serverName, hri); addToReplicaMapping(hri); if (oldServerName == null) { oldServerName = oldAssignments.remove(encodedName); && serverHoldings.containsKey(oldServerName)) { LOG.info("Offlined " + hri.getShortNameToLog() + " from " + oldServerName); removeFromServerHoldings(oldServerName, hri);
regionStates.getRegionAssignments().entrySet()) { HRegionInfo hri = en.getKey(); if (!hri.isMetaTable() RegionState regionState = regionStates.getRegionState(encodedName); if (regionState != null && !regionState.getRegion().isMetaRegion()) { LOG.debug("Found " + regionState + " in RITs"); Map<String, RegionState> regionsInTransition = regionStates.getRegionsInTransition(); if (!regionsInTransition.isEmpty()) { Set<ServerName> onlineServers = serverManager.getOnlineServers().keySet(); allRegions = regionStates.closeAllUserRegions( disabledOrDisablingOrEnabling);
regionLocation = null; regionStates.createRegionState(regionInfo, state, regionLocation, lastHost); if (!regionStates.isRegionInState(regionInfo, State.OPEN)) { regionStates.regionOffline(regionInfo); regionStates.regionOnline(regionInfo, regionLocation); balancer.regionOnline(regionInfo, regionLocation); } else if (useZKForAssignment) { regionStates.regionOffline(regionInfo);
if (this.assignmentManager.getRegionStates().isRegionsInTransition()) { Map<String, RegionState> regionsInTransition = this.assignmentManager.getRegionStates().getRegionsInTransition(); LOG.debug("Not running balancer because " + regionsInTransition.size() + " region(s) in transition: " + com.facebook.presto.hbase.$internal.org.apache.commons.lang.StringUtils. this.assignmentManager.getRegionStates().getAssignmentsByTable();
} else { regionState = new RegionState(hri, newState, serverName); putRegionState(regionState); if (newState == State.OPEN) { if (!serverName.equals(lastHost)) { addToServerHoldings(lastHost, hri); if (newState != State.OPEN) { oldAssignments.put(encodedName, lastHost);
/** * Get the HRegionInfo from cache, if not there, from the hbase:meta table * @param regionName * @return HRegionInfo for the region */ @SuppressWarnings("deprecation") protected HRegionInfo getRegionInfo(final byte [] regionName) { String encodedName = HRegionInfo.encodeRegionName(regionName); RegionState regionState = getRegionState(encodedName); if (regionState != null) { return regionState.getRegion(); } try { Pair<HRegionInfo, ServerName> p = MetaTableAccessor.getRegion(server.getConnection(), regionName); HRegionInfo hri = p == null ? null : p.getFirst(); if (hri != null) { createRegionState(hri); } return hri; } catch (IOException e) { server.abort("Aborting because error occoured while reading " + Bytes.toStringBinary(regionName) + " from hbase:meta", e); return null; } }
ServerName currentMetaServer = metaState.getServerName(); if (!ConfigUtil.useZKForAssignment(conf)) { regionStates.createRegionState(hri, metaState.getState(), currentMetaServer, null); } else { regionStates.createRegionState(hri); regionStates.updateRegionState( HRegionInfo.FIRST_META_REGIONINFO, State.OPEN, currentMetaServer); this.assignmentManager.regionOnline(
/** * A table is deleted. Remove its regions from all internal maps. * We loop through all regions assuming we don't delete tables too much. */ public void tableDeleted(final TableName tableName) { Set<HRegionInfo> regionsToDelete = new HashSet<HRegionInfo>(); synchronized (this) { for (RegionState state: regionStates.values()) { HRegionInfo region = state.getRegion(); if (region.getTable().equals(tableName)) { regionsToDelete.add(region); } } } for (HRegionInfo region: regionsToDelete) { deleteRegion(region); } }
/** * Triggers a bulk assignment of the specified regions * * @param assignmentManager the Assignment Manger * @param regionInfos the list of regions to assign * @throws IOException if an error occurred during the assignment */ public static void assignRegions(final AssignmentManager assignmentManager, final List<HRegionInfo> regionInfos) throws IOException { try { assignmentManager.getRegionStates().createRegionStates(regionInfos); assignmentManager.assign(regionInfos); } catch (InterruptedException e) { LOG.error("Caught " + e + " during round-robin assignment"); InterruptedIOException ie = new InterruptedIOException(e.getMessage()); ie.initCause(e); throw ie; } } }
this.threadPoolExecutorService = Threads.getBoundedCachedThreadPool( maxThreads, 60L, TimeUnit.SECONDS, Threads.newDaemonThreadFactory("AM.")); this.regionStates = new RegionStates( server, tableStateManager, serverManager, regionStateStore);
/** * Add a region to RegionStates. If the region is split * and offline, its state will be SPLIT. Otherwise, its state will * be OFFLINE. If it is already in RegionStates, this call has * no effect, and the original state is returned. */ public RegionState createRegionState(final HRegionInfo hri) { return createRegionState(hri, null, null, null); }