/** * Marks the region as offline. Removes it from regions in transition and * removes in-memory assignment information. * <p> * Used when a region has been closed and should remain closed. * @param regionInfo */ public void regionOffline(final HRegionInfo regionInfo) { regionOffline(regionInfo, null); }
public void clearFromTransition(HRegionInfo hri) { if (this.assignmentManager.isRegionInTransition(hri) != null) { this.assignmentManager.regionOffline(hri); } }
@Override public Boolean evaluate() throws IOException { if (states.isRegionInState(region, State.FAILED_OPEN)) { am.regionOffline(region); } return !states.isRegionInTransition(region); } });
public void offlineDisabledRegion(HRegionInfo regionInfo) { if (useZKForAssignment) { // Disabling so should not be reassigned, just delete the CLOSED node LOG.debug("Table being disabled so deleting ZK node and removing from " + "regions in transition, skipping assignment of region " + regionInfo.getRegionNameAsString()); String encodedName = regionInfo.getEncodedName(); deleteNodeInStates(encodedName, "closed", null, EventType.RS_ZK_REGION_CLOSED, EventType.M_ZK_REGION_OFFLINE); } replicasToClose.remove(regionInfo); regionOffline(regionInfo); }
/** * Special method, only used by hbck. */ @Override public void offline(final byte[] regionName) throws IOException { Pair<HRegionInfo, ServerName> pair = MetaReader.getRegion(this.catalogTracker, regionName); if (pair == null) throw new UnknownRegionException(Bytes.toStringBinary(regionName)); HRegionInfo hri = pair.getFirst(); this.assignmentManager.regionOffline(hri); }
private String onRegionSplitReverted(ServerName sn, final HRegionInfo p, final HRegionInfo a, final HRegionInfo b) { String s = checkInStateForSplit(sn, p, a, b); if (!com.facebook.presto.hbase.$internal.org.apache.commons.lang.StringUtils.isEmpty(s)) { return s; } regionOnline(p, sn); regionOffline(a); regionOffline(b); if (getTableStateManager().isTableState(p.getTable(), ZooKeeperProtos.Table.State.DISABLED, ZooKeeperProtos.Table.State.DISABLING)) { invokeUnAssign(p); } return null; }
public void offlineDisabledRegion(HRegionInfo regionInfo) { // Disabling so should not be reassigned, just delete the CLOSED node LOG.debug("Table being disabled so deleting ZK node and removing from " + "regions in transition, skipping assignment of region " + regionInfo.getRegionNameAsString()); try { if (!ZKAssign.deleteClosedNode(watcher, regionInfo.getEncodedName())) { // Could also be in OFFLINE mode ZKAssign.deleteOfflineNode(watcher, regionInfo.getEncodedName()); } } catch (KeeperException.NoNodeException nne) { LOG.debug("Tried to delete closed node for " + regionInfo + " but it " + "does not exist so just offlining"); } catch (KeeperException e) { this.master.abort("Error deleting CLOSED node in ZK", e); } regionOffline(regionInfo); }
private List<HRegionInfo> checkForDisablingOrDisabledTables(Set<HRegionInfo> regionsFromRIT, List<HRegionInfo> toAssign, RegionState rit, AssignmentManager assignmentManager) { if (rit == null) { return toAssign; } if (!rit.isClosing() && !rit.isPendingClose()) { return toAssign; } if (!assignmentManager.getZKTable().isDisablingOrDisabledTable( rit.getRegion().getTableNameAsString())) { return toAssign; } HRegionInfo hri = rit.getRegion(); AssignmentManager am = assignmentManager; am.deleteClosingOrClosedNode(hri); am.regionOffline(hri); // To avoid region assignment if table is in disabling or disabled state. toAssign.remove(hri); regionsFromRIT.remove(hri); return toAssign; }
@Override public void nodeDeleted(final String path) { if (path.startsWith(this.watcher.assignmentZNode)) { String regionName = ZKAssign.getRegionName(this.master.getZooKeeper(), path); RegionState rs = this.regionsInTransition.get(regionName); if (rs != null) { HRegionInfo regionInfo = rs.getRegion(); if (rs.isSplit()) { LOG.debug("Ephemeral node deleted, regionserver crashed?, offlining the region" + rs.getRegion() + " clearing from RIT;"); regionOffline(rs.getRegion()); } else if (rs.isSplitting()) { LOG.debug("Ephemeral node deleted. Found in SPLITTING state. " + "Removing from RIT " + rs.getRegion()); synchronized(this.regionsInTransition) { this.regionsInTransition.remove(regionName); } } else { LOG.debug("The znode of region " + regionInfo.getRegionNameAsString() + " has been deleted."); if (rs.isOpened()) { makeRegionOnline(rs, regionInfo); } } } } }
am.regionOffline(region); ritsGoingToServer.remove(region);
@Override public void unassign(final byte [] regionName, final boolean force) throws IOException { checkInitialized(); Pair<HRegionInfo, ServerName> pair = MetaReader.getRegion(this.catalogTracker, regionName); if (pair == null) throw new UnknownRegionException(Bytes.toString(regionName)); HRegionInfo hri = pair.getFirst(); if (cpHost != null) { if (cpHost.preUnassign(hri, force)) { return; } } if (force) { this.assignmentManager.regionOffline(hri); assignRegion(hri); } else { this.assignmentManager.unassign(hri, force); } if (cpHost != null) { cpHost.postUnassign(hri, force); } }
/** * Update inmemory structures. * @param sn Server that reported the split * @param parent Parent region that was split * @param a Daughter region A * @param b Daughter region B */ public void handleSplitReport(final ServerName sn, final HRegionInfo parent, final HRegionInfo a, final HRegionInfo b) { regionOffline(parent); regionOnline(a, sn); regionOnline(b, sn); // There's a possibility that the region was splitting while a user asked // the master to disable, we need to make sure we close those regions in // that case. This is not racing with the region server itself since RS // report is done after the split transaction completed. if (this.zkTable.isDisablingOrDisabledTable( parent.getTableNameAsString())) { unassign(a); unassign(b); } }
} else if (code == TransitionCode.MERGED) { mergingRegions.remove(encodedName); regionOffline(a, State.MERGED); regionOffline(b, State.MERGED); regionOnline(p, sn, 1); regionOnline(a, sn); regionOnline(b, sn); regionOffline(p);
LOG.warn("Split daughter region not in transition" + hri_b); regionOffline(hri_a); regionOffline(hri_b); splitRegions.remove(regionInfo);
this.services.getAssignmentManager().regionOffline(parent);
return "Skipping split message, TEST_SKIP_SPLIT_HANDLING is set"; regionOffline(p, State.SPLIT); regionOnline(a, sn, 1); regionOnline(b, sn, 1);
} else { this.mergingRegions.remove(encodedName); regionOffline(hri_a, State.MERGED); regionOffline(hri_b, State.MERGED); regionOnline(p, sn);
case HOSTING_REGION: LOG.info("Server " + serverName + " was carrying META. Trying to assign."); am.regionOffline(HRegionInfo.FIRST_META_REGIONINFO); shouldAssignMeta = true; break;
regionOffline(p, State.SPLIT); regionOnline(hri_a, sn); regionOnline(hri_b, sn);
master.assignmentManager.regionOffline(hri); if (master.cpHost != null) { master.cpHost.postRegionOffline(hri);