Search in sources :

Example 1 with AssignmentManager

use of org.apache.hadoop.hbase.master.AssignmentManager in project hbase by apache.

the class RSGroupAdminServer method rsGroupGetRegionsInTransition.

private Map<String, RegionState> rsGroupGetRegionsInTransition(String groupName) throws IOException {
    Map<String, RegionState> rit = Maps.newTreeMap();
    AssignmentManager am = master.getAssignmentManager();
    for (TableName tableName : getRSGroupInfo(groupName).getTables()) {
        for (HRegionInfo regionInfo : am.getRegionStates().getRegionsOfTable(tableName)) {
            RegionState state = am.getRegionStates().getRegionTransitionState(regionInfo);
            if (state != null) {
                rit.put(regionInfo.getEncodedName(), state);
            }
        }
    }
    return rit;
}
Also used : HRegionInfo(org.apache.hadoop.hbase.HRegionInfo) TableName(org.apache.hadoop.hbase.TableName) RegionState(org.apache.hadoop.hbase.master.RegionState) AssignmentManager(org.apache.hadoop.hbase.master.AssignmentManager)

Example 2 with AssignmentManager

use of org.apache.hadoop.hbase.master.AssignmentManager in project hbase by apache.

the class HBaseTestingUtility method predicateNoRegionsInTransition.

/**
   * Returns a {@link Predicate} for checking that there are no regions in transition in master
   */
public ExplainingPredicate<IOException> predicateNoRegionsInTransition() {
    return new ExplainingPredicate<IOException>() {

        @Override
        public String explainFailure() throws IOException {
            final RegionStates regionStates = getMiniHBaseCluster().getMaster().getAssignmentManager().getRegionStates();
            return "found in transition: " + regionStates.getRegionsInTransition().toString();
        }

        @Override
        public boolean evaluate() throws IOException {
            HMaster master = getMiniHBaseCluster().getMaster();
            if (master == null)
                return false;
            AssignmentManager am = master.getAssignmentManager();
            if (am == null)
                return false;
            final RegionStates regionStates = am.getRegionStates();
            return !regionStates.isRegionsInTransition();
        }
    };
}
Also used : RegionStates(org.apache.hadoop.hbase.master.RegionStates) HMaster(org.apache.hadoop.hbase.master.HMaster) AssignmentManager(org.apache.hadoop.hbase.master.AssignmentManager) ExplainingPredicate(org.apache.hadoop.hbase.Waiter.ExplainingPredicate)

Example 3 with AssignmentManager

use of org.apache.hadoop.hbase.master.AssignmentManager in project hbase by apache.

the class HBaseTestingUtility method assignRegion.

/**
   * Uses directly the assignment manager to assign the region.
   * and waits until the specified region has completed assignment.
   * @param tableName the table name
   * @throws IOException
   * @throw InterruptedException
   * @return true if the region is assigned false otherwise.
   */
public boolean assignRegion(final HRegionInfo regionInfo) throws IOException, InterruptedException {
    final AssignmentManager am = getHBaseCluster().getMaster().getAssignmentManager();
    am.assign(regionInfo);
    return am.waitForAssignment(regionInfo);
}
Also used : AssignmentManager(org.apache.hadoop.hbase.master.AssignmentManager)

Example 4 with AssignmentManager

use of org.apache.hadoop.hbase.master.AssignmentManager in project hbase by apache.

the class ServerCrashProcedure method calcRegionsToAssign.

/**
   * Figure out what we need to assign. Should be idempotent.
   * @param env
   * @return List of calculated regions to assign; may be empty or null.
   * @throws IOException
   */
private List<HRegionInfo> calcRegionsToAssign(final MasterProcedureEnv env) throws IOException {
    AssignmentManager am = env.getMasterServices().getAssignmentManager();
    List<HRegionInfo> regionsToAssignAggregator = new ArrayList<>();
    int replicaCount = env.getMasterConfiguration().getInt(HConstants.META_REPLICAS_NUM, HConstants.DEFAULT_META_REPLICA_NUM);
    for (int i = 1; i < replicaCount; i++) {
        HRegionInfo metaHri = RegionReplicaUtil.getRegionInfoForReplica(HRegionInfo.FIRST_META_REGIONINFO, i);
        if (am.isCarryingMetaReplica(this.serverName, metaHri)) {
            if (LOG.isDebugEnabled()) {
                LOG.debug("Reassigning meta replica" + metaHri + " that was on " + this.serverName);
            }
            regionsToAssignAggregator.add(metaHri);
        }
    }
    // Clean out anything in regions in transition.
    List<HRegionInfo> regionsInTransition = am.cleanOutCrashedServerReferences(serverName);
    if (LOG.isDebugEnabled()) {
        LOG.debug("Reassigning " + size(this.regionsOnCrashedServer) + " region(s) that " + (serverName == null ? "null" : serverName) + " was carrying (and " + regionsInTransition.size() + " regions(s) that were opening on this server)");
    }
    regionsToAssignAggregator.addAll(regionsInTransition);
    // Iterate regions that were on this server and figure which of these we need to reassign
    if (this.regionsOnCrashedServer != null && !this.regionsOnCrashedServer.isEmpty()) {
        RegionStates regionStates = am.getRegionStates();
        for (HRegionInfo hri : this.regionsOnCrashedServer) {
            if (regionsInTransition.contains(hri))
                continue;
            String encodedName = hri.getEncodedName();
            Lock lock = am.acquireRegionLock(encodedName);
            try {
                RegionState rit = regionStates.getRegionTransitionState(hri);
                if (processDeadRegion(hri, am)) {
                    ServerName addressFromAM = regionStates.getRegionServerOfRegion(hri);
                    if (addressFromAM != null && !addressFromAM.equals(this.serverName)) {
                        // If this region is in transition on the dead server, it must be
                        // opening or pending_open, which should have been covered by
                        // AM#cleanOutCrashedServerReferences
                        LOG.info("Skip assigning " + hri.getRegionNameAsString() + " because opened on " + addressFromAM.getServerName());
                        continue;
                    }
                    if (rit != null) {
                        if (rit.getServerName() != null && !rit.isOnServer(this.serverName)) {
                            // Skip regions that are in transition on other server
                            LOG.info("Skip assigning region in transition on other server" + rit);
                            continue;
                        }
                        LOG.info("Reassigning region " + rit + " and clearing zknode if exists");
                        regionStates.updateRegionState(hri, RegionState.State.OFFLINE);
                    } else if (regionStates.isRegionInState(hri, RegionState.State.SPLITTING_NEW, RegionState.State.MERGING_NEW)) {
                        regionStates.updateRegionState(hri, RegionState.State.OFFLINE);
                    }
                    regionsToAssignAggregator.add(hri);
                // TODO: The below else if is different in branch-1 from master branch.
                } else if (rit != null) {
                    if ((rit.isClosing() || rit.isFailedClose() || rit.isOffline()) && am.getTableStateManager().isTableState(hri.getTable(), TableState.State.DISABLED, TableState.State.DISABLING) || am.getReplicasToClose().contains(hri)) {
                        // If the table was partially disabled and the RS went down, we should clear the
                        // RIT and remove the node for the region.
                        // The rit that we use may be stale in case the table was in DISABLING state
                        // but though we did assign we will not be clearing the znode in CLOSING state.
                        // Doing this will have no harm. See HBASE-5927
                        regionStates.updateRegionState(hri, RegionState.State.OFFLINE);
                        am.offlineDisabledRegion(hri);
                    } else {
                        LOG.warn("THIS SHOULD NOT HAPPEN: unexpected region in transition " + rit + " not to be assigned by SSH of server " + serverName);
                    }
                }
            } finally {
                lock.unlock();
            }
        }
    }
    return regionsToAssignAggregator;
}
Also used : HRegionInfo(org.apache.hadoop.hbase.HRegionInfo) RegionState(org.apache.hadoop.hbase.master.RegionState) RegionStates(org.apache.hadoop.hbase.master.RegionStates) ServerName(org.apache.hadoop.hbase.ServerName) AssignmentManager(org.apache.hadoop.hbase.master.AssignmentManager) ArrayList(java.util.ArrayList) Lock(java.util.concurrent.locks.Lock)

Example 5 with AssignmentManager

use of org.apache.hadoop.hbase.master.AssignmentManager in project hbase by apache.

the class ServerCrashProcedure method prepareLogReplay.

private void prepareLogReplay(final MasterProcedureEnv env, final Set<HRegionInfo> regions) throws IOException {
    if (LOG.isDebugEnabled()) {
        LOG.debug("Mark " + size(this.regionsOnCrashedServer) + " regions-in-recovery from " + this.serverName);
    }
    MasterWalManager mwm = env.getMasterServices().getMasterWalManager();
    AssignmentManager am = env.getMasterServices().getAssignmentManager();
    mwm.prepareLogReplay(this.serverName, regions);
    am.getRegionStates().logSplit(this.serverName);
}
Also used : MasterWalManager(org.apache.hadoop.hbase.master.MasterWalManager) AssignmentManager(org.apache.hadoop.hbase.master.AssignmentManager)

Aggregations

AssignmentManager (org.apache.hadoop.hbase.master.AssignmentManager)24 HRegionInfo (org.apache.hadoop.hbase.HRegionInfo)13 ServerName (org.apache.hadoop.hbase.ServerName)6 TableName (org.apache.hadoop.hbase.TableName)6 RegionStates (org.apache.hadoop.hbase.master.RegionStates)6 ScheduledThreadPoolExecutor (java.util.concurrent.ScheduledThreadPoolExecutor)4 SynchronousQueue (java.util.concurrent.SynchronousQueue)4 ThreadPoolExecutor (java.util.concurrent.ThreadPoolExecutor)4 MiniHBaseCluster (org.apache.hadoop.hbase.MiniHBaseCluster)4 RegionState (org.apache.hadoop.hbase.master.RegionState)4 BeforeClass (org.junit.BeforeClass)4 Test (org.junit.Test)4 ArrayList (java.util.ArrayList)3 HashMap (java.util.HashMap)3 HMaster (org.apache.hadoop.hbase.master.HMaster)3 MasterWalManager (org.apache.hadoop.hbase.master.MasterWalManager)3 IOException (java.io.IOException)2 InterruptedIOException (java.io.InterruptedIOException)2 List (java.util.List)2 Map (java.util.Map)2