001/** 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, software 013 * distributed under the License is distributed on an "AS IS" BASIS, 014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018package org.apache.hadoop.hbase.master.assignment; 019 020import java.io.IOException; 021import java.util.Optional; 022 023import org.apache.hadoop.hbase.ServerName; 024import org.apache.hadoop.hbase.exceptions.UnexpectedStateException; 025import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv; 026import org.apache.hadoop.hbase.procedure2.ProcedureMetrics; 027import org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer; 028import org.apache.hadoop.hbase.procedure2.ProcedureSuspendedException; 029import org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.RemoteOperation; 030import org.apache.yetus.audience.InterfaceAudience; 031 032import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting; 033 034import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil; 035import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.AssignRegionStateData; 036import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionTransitionState; 037import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode; 038 039/** 040 * Leave here only for checking if we can successfully start the master. 041 * @deprecated Do not use any more. 042 * @see TransitRegionStateProcedure 043 */ 044@Deprecated 045@InterfaceAudience.Private 046public class AssignProcedure extends RegionTransitionProcedure { 047 048 private boolean forceNewPlan = false; 049 050 protected volatile ServerName targetServer; 051 052 public AssignProcedure() { 053 } 054 055 @Override 056 public TableOperationType getTableOperationType() { 057 return TableOperationType.REGION_ASSIGN; 058 } 059 060 @Override 061 protected boolean isRollbackSupported(final RegionTransitionState state) { 062 switch (state) { 063 case REGION_TRANSITION_QUEUE: 064 return true; 065 default: 066 return false; 067 } 068 } 069 070 @Override 071 protected void serializeStateData(ProcedureStateSerializer serializer) throws IOException { 072 final AssignRegionStateData.Builder state = 073 AssignRegionStateData.newBuilder().setTransitionState(getTransitionState()) 074 .setRegionInfo(ProtobufUtil.toRegionInfo(getRegionInfo())); 075 if (forceNewPlan) { 076 state.setForceNewPlan(true); 077 } 078 if (this.targetServer != null) { 079 state.setTargetServer(ProtobufUtil.toServerName(this.targetServer)); 080 } 081 if (getAttempt() > 0) { 082 state.setAttempt(getAttempt()); 083 } 084 serializer.serialize(state.build()); 085 } 086 087 @Override 088 protected void deserializeStateData(ProcedureStateSerializer serializer) throws IOException { 089 final AssignRegionStateData state = serializer.deserialize(AssignRegionStateData.class); 090 setTransitionState(state.getTransitionState()); 091 setRegionInfo(ProtobufUtil.toRegionInfo(state.getRegionInfo())); 092 forceNewPlan = state.getForceNewPlan(); 093 if (state.hasTargetServer()) { 094 this.targetServer = ProtobufUtil.toServerName(state.getTargetServer()); 095 } 096 if (state.hasAttempt()) { 097 setAttempt(state.getAttempt()); 098 } 099 } 100 101 @Override 102 protected boolean startTransition(final MasterProcedureEnv env, final RegionStateNode regionNode) 103 throws IOException { 104 return true; 105 } 106 107 @Override 108 protected boolean updateTransition(final MasterProcedureEnv env, final RegionStateNode regionNode) 109 throws IOException, ProcedureSuspendedException { 110 return true; 111 } 112 113 @Override 114 protected void finishTransition(final MasterProcedureEnv env, final RegionStateNode regionNode) 115 throws IOException { 116 } 117 118 @Override 119 protected void reportTransition(final MasterProcedureEnv env, final RegionStateNode regionNode, 120 final TransitionCode code, final long openSeqNum) throws UnexpectedStateException { 121 } 122 123 @Override 124 public Optional<RemoteOperation> remoteCallBuild(final MasterProcedureEnv env, 125 final ServerName serverName) { 126 return Optional.empty(); 127 } 128 129 @Override 130 protected boolean remoteCallFailed(final MasterProcedureEnv env, final RegionStateNode regionNode, 131 final IOException exception) { 132 return true; 133 } 134 135 @Override 136 public void toStringClassDetails(StringBuilder sb) { 137 super.toStringClassDetails(sb); 138 if (this.targetServer != null) sb.append(", target=").append(this.targetServer); 139 } 140 141 @Override 142 protected ProcedureMetrics getProcedureMetrics(MasterProcedureEnv env) { 143 return env.getAssignmentManager().getAssignmentManagerMetrics().getAssignProcMetrics(); 144 } 145 146 @VisibleForTesting 147 @Override 148 public void setProcId(long procId) { 149 super.setProcId(procId); 150 } 151}