Search in sources :

Example 1 with RegionState

use of org.apache.hadoop.hbase.master.RegionState 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 RegionState

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

the class MetaTableLocator method getMetaRegionState.

/**
   * Load the meta region state from the meta server ZNode.
   * @param zkw
   * @param replicaId
   * @return regionstate
   * @throws KeeperException
   */
public static RegionState getMetaRegionState(ZooKeeperWatcher zkw, int replicaId) throws KeeperException {
    RegionState.State state = RegionState.State.OPEN;
    ServerName serverName = null;
    try {
        byte[] data = ZKUtil.getData(zkw, zkw.znodePaths.getZNodeForReplica(replicaId));
        if (data != null && data.length > 0 && ProtobufUtil.isPBMagicPrefix(data)) {
            try {
                int prefixLen = ProtobufUtil.lengthOfPBMagic();
                ZooKeeperProtos.MetaRegionServer rl = ZooKeeperProtos.MetaRegionServer.PARSER.parseFrom(data, prefixLen, data.length - prefixLen);
                if (rl.hasState()) {
                    state = RegionState.State.convert(rl.getState());
                }
                HBaseProtos.ServerName sn = rl.getServer();
                serverName = ServerName.valueOf(sn.getHostName(), sn.getPort(), sn.getStartCode());
            } catch (InvalidProtocolBufferException e) {
                throw new DeserializationException("Unable to parse meta region location");
            }
        } else {
            // old style of meta region location?
            serverName = ProtobufUtil.parseServerNameFrom(data);
        }
    } catch (DeserializationException e) {
        throw ZKUtil.convert(e);
    } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
    }
    if (serverName == null) {
        state = RegionState.State.OFFLINE;
    }
    return new RegionState(RegionReplicaUtil.getRegionInfoForReplica(HRegionInfo.FIRST_META_REGIONINFO, replicaId), state, serverName);
}
Also used : MetaRegionServer(org.apache.hadoop.hbase.shaded.protobuf.generated.ZooKeeperProtos.MetaRegionServer) RegionState(org.apache.hadoop.hbase.master.RegionState) ServerName(org.apache.hadoop.hbase.ServerName) InvalidProtocolBufferException(org.apache.hadoop.hbase.shaded.com.google.protobuf.InvalidProtocolBufferException) ZooKeeperProtos(org.apache.hadoop.hbase.shaded.protobuf.generated.ZooKeeperProtos) HBaseProtos(org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos) DeserializationException(org.apache.hadoop.hbase.exceptions.DeserializationException)

Example 3 with RegionState

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

the class SplitTableRegionProcedure method getParentRegionState.

/**
   * Get parent region state
   * @param env MasterProcedureEnv
   * @return parent region state
   */
private RegionState getParentRegionState(final MasterProcedureEnv env) {
    RegionStates regionStates = env.getMasterServices().getAssignmentManager().getRegionStates();
    RegionState state = regionStates.getRegionState(parentHRI);
    if (state == null) {
        LOG.warn("Split but not in region states: " + parentHRI);
        state = regionStates.createRegionState(parentHRI);
    }
    return state;
}
Also used : RegionState(org.apache.hadoop.hbase.master.RegionState) SplitTableRegionState(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitTableRegionState) RegionStates(org.apache.hadoop.hbase.master.RegionStates)

Example 4 with RegionState

use of org.apache.hadoop.hbase.master.RegionState 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 RegionState

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

the class HBaseFsck method loadDeployedRegions.

/**
   * Get deployed regions according to the region servers.
   */
private void loadDeployedRegions() throws IOException, InterruptedException {
    // From the master, get a list of all known live region servers
    Collection<ServerName> regionServers = status.getServers();
    errors.print("Number of live region servers: " + regionServers.size());
    if (details) {
        for (ServerName rsinfo : regionServers) {
            errors.print("  " + rsinfo.getServerName());
        }
    }
    // From the master, get a list of all dead region servers
    Collection<ServerName> deadRegionServers = status.getDeadServerNames();
    errors.print("Number of dead region servers: " + deadRegionServers.size());
    if (details) {
        for (ServerName name : deadRegionServers) {
            errors.print("  " + name);
        }
    }
    // Print the current master name and state
    errors.print("Master: " + status.getMaster());
    // Print the list of all backup masters
    Collection<ServerName> backupMasters = status.getBackupMasters();
    errors.print("Number of backup masters: " + backupMasters.size());
    if (details) {
        for (ServerName name : backupMasters) {
            errors.print("  " + name);
        }
    }
    errors.print("Average load: " + status.getAverageLoad());
    errors.print("Number of requests: " + status.getRequestsCount());
    errors.print("Number of regions: " + status.getRegionsCount());
    Set<RegionState> rits = status.getRegionsInTransition();
    errors.print("Number of regions in transition: " + rits.size());
    if (details) {
        for (RegionState state : rits) {
            errors.print("  " + state.toDescriptiveString());
        }
    }
    // Determine what's deployed
    processRegionServers(regionServers);
}
Also used : RegionState(org.apache.hadoop.hbase.master.RegionState) ServerName(org.apache.hadoop.hbase.ServerName)

Aggregations

RegionState (org.apache.hadoop.hbase.master.RegionState)14 ServerName (org.apache.hadoop.hbase.ServerName)6 HRegionInfo (org.apache.hadoop.hbase.HRegionInfo)5 AssignmentManager (org.apache.hadoop.hbase.master.AssignmentManager)4 TableName (org.apache.hadoop.hbase.TableName)3 RegionStates (org.apache.hadoop.hbase.master.RegionStates)3 ArrayList (java.util.ArrayList)2 HashMap (java.util.HashMap)2 ClusterStatus (org.apache.hadoop.hbase.ClusterStatus)2 ByteString (org.apache.hadoop.hbase.shaded.com.google.protobuf.ByteString)2 LiveServerInfo (org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.LiveServerInfo)2 RegionInTransition (org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionInTransition)2 HBaseProtos (org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos)2 Test (org.junit.Test)2 IOException (java.io.IOException)1 Map (java.util.Map)1 Lock (java.util.concurrent.locks.Lock)1 Configuration (org.apache.hadoop.conf.Configuration)1 ClusterId (org.apache.hadoop.hbase.ClusterId)1 HColumnDescriptor (org.apache.hadoop.hbase.HColumnDescriptor)1