diff --git a/helix-gateway/src/main/java/org/apache/helix/gateway/api/participant/HelixStateTransitionProcessor.java b/helix-gateway/src/main/java/org/apache/helix/gateway/api/participant/HelixStateTransitionProcessor.java deleted file mode 100644 index bcd2a29e1b..0000000000 --- a/helix-gateway/src/main/java/org/apache/helix/gateway/api/participant/HelixStateTransitionProcessor.java +++ /dev/null @@ -1,44 +0,0 @@ -package org.apache.helix.gateway.api.participant; - -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import org.apache.helix.model.Message; -import org.apache.helix.participant.statemachine.StateTransitionError; - -/** - * Process state transition message. - */ -public interface HelixStateTransitionProcessor { - /** - * Process state transition message. - * @param message state transition message - * @throws Exception if failed to process the message - */ - void processStateTransitionMessage(Message message) throws Exception; - - /** - * Handle state transition error. This results from state transition handler throwing an exception or - * timing out. - * - * @param message state transition message - * @param error state transition error - */ - void handleStateTransitionError(Message message, StateTransitionError error); -} diff --git a/helix-gateway/src/main/java/org/apache/helix/gateway/participant/HelixGatewayParticipant.java b/helix-gateway/src/main/java/org/apache/helix/gateway/participant/HelixGatewayParticipant.java index 51c8b0e79b..6405529603 100644 --- a/helix-gateway/src/main/java/org/apache/helix/gateway/participant/HelixGatewayParticipant.java +++ b/helix-gateway/src/main/java/org/apache/helix/gateway/participant/HelixGatewayParticipant.java @@ -30,7 +30,6 @@ import org.apache.helix.HelixDefinedState; import org.apache.helix.HelixManager; import org.apache.helix.InstanceType; -import org.apache.helix.gateway.api.participant.HelixStateTransitionProcessor; import org.apache.helix.gateway.api.service.HelixGatewayServiceProcessor; import org.apache.helix.gateway.statemodel.HelixGatewayMultiTopStateStateModelFactory; import org.apache.helix.manager.zk.ZKHelixManager; @@ -43,7 +42,8 @@ * for the participant and updates the state of the participant's shards upon successful state * transitions signaled by remote participant. */ -public class HelixGatewayParticipant implements HelixStateTransitionProcessor { +public class HelixGatewayParticipant { + public static final String UNASSIGNED_STATE = "UNASSIGNED"; private final HelixGatewayServiceProcessor _gatewayServiceProcessor; private final HelixManager _participantManager; private final Map> _shardStateMap; @@ -57,7 +57,6 @@ private HelixGatewayParticipant(HelixGatewayServiceProcessor gatewayServiceProce _stateTransitionResultMap = new ConcurrentHashMap<>(); } - @Override public void processStateTransitionMessage(Message message) throws Exception { String transitionId = message.getMsgId(); String resourceId = message.getResourceName(); @@ -84,7 +83,6 @@ public void processStateTransitionMessage(Message message) throws Exception { } } - @Override public void handleStateTransitionError(Message message, StateTransitionError error) { // Remove the stateTransitionResultMap future for the message String transitionId = message.getMsgId(); @@ -144,7 +142,7 @@ public Map> getShardStateMap() { */ public String getCurrentState(String resourceId, String shardId) { return getShardStateMap().getOrDefault(resourceId, Collections.emptyMap()) - .getOrDefault(shardId, HelixDefinedState.DROPPED.name()); + .getOrDefault(shardId, UNASSIGNED_STATE); } private void updateState(String resourceId, String shardId, String state) { diff --git a/helix-gateway/src/main/java/org/apache/helix/gateway/statemodel/HelixGatewayMultiTopStateStateModel.java b/helix-gateway/src/main/java/org/apache/helix/gateway/statemodel/HelixGatewayMultiTopStateStateModel.java index 855b9c7048..37de51b420 100644 --- a/helix-gateway/src/main/java/org/apache/helix/gateway/statemodel/HelixGatewayMultiTopStateStateModel.java +++ b/helix-gateway/src/main/java/org/apache/helix/gateway/statemodel/HelixGatewayMultiTopStateStateModel.java @@ -20,7 +20,7 @@ */ import org.apache.helix.NotificationContext; -import org.apache.helix.gateway.api.participant.HelixStateTransitionProcessor; +import org.apache.helix.gateway.participant.HelixGatewayParticipant; import org.apache.helix.model.Message; import org.apache.helix.participant.statemachine.StateModel; import org.apache.helix.participant.statemachine.StateModelInfo; @@ -34,17 +34,17 @@ public class HelixGatewayMultiTopStateStateModel extends StateModel { private static final Logger _logger = LoggerFactory.getLogger(HelixGatewayMultiTopStateStateModel.class); - private final HelixStateTransitionProcessor _stateTransitionProcessor; + private final HelixGatewayParticipant _helixGatewayParticipant; public HelixGatewayMultiTopStateStateModel( - HelixStateTransitionProcessor stateTransitionProcessor) { - _stateTransitionProcessor = stateTransitionProcessor; + HelixGatewayParticipant helixGatewayParticipant) { + _helixGatewayParticipant = helixGatewayParticipant; } @Transition(to = "*", from = "*") public void genericStateTransitionHandler(Message message, NotificationContext context) throws Exception { - _stateTransitionProcessor.processStateTransitionMessage(message); + _helixGatewayParticipant.processStateTransitionMessage(message); } @Override @@ -55,6 +55,6 @@ public void reset() { @Override public void rollbackOnError(Message message, NotificationContext context, StateTransitionError error) { - _stateTransitionProcessor.handleStateTransitionError(message, error); + _helixGatewayParticipant.handleStateTransitionError(message, error); } } \ No newline at end of file diff --git a/helix-gateway/src/main/java/org/apache/helix/gateway/statemodel/HelixGatewayMultiTopStateStateModelFactory.java b/helix-gateway/src/main/java/org/apache/helix/gateway/statemodel/HelixGatewayMultiTopStateStateModelFactory.java index 4a4b2f922c..64662998e3 100644 --- a/helix-gateway/src/main/java/org/apache/helix/gateway/statemodel/HelixGatewayMultiTopStateStateModelFactory.java +++ b/helix-gateway/src/main/java/org/apache/helix/gateway/statemodel/HelixGatewayMultiTopStateStateModelFactory.java @@ -19,20 +19,20 @@ * under the License. */ -import org.apache.helix.gateway.api.participant.HelixStateTransitionProcessor; +import org.apache.helix.gateway.participant.HelixGatewayParticipant; import org.apache.helix.participant.statemachine.StateModelFactory; public class HelixGatewayMultiTopStateStateModelFactory extends StateModelFactory { - private final HelixStateTransitionProcessor _stateTransitionProcessor; + private final HelixGatewayParticipant _helixGatewayParticipant; public HelixGatewayMultiTopStateStateModelFactory( - HelixStateTransitionProcessor stateTransitionProcessor) { - _stateTransitionProcessor = stateTransitionProcessor; + HelixGatewayParticipant helixGatewayParticipant) { + _helixGatewayParticipant = helixGatewayParticipant; } @Override public HelixGatewayMultiTopStateStateModel createNewStateModel(String resourceName, String partitionKey) { - return new HelixGatewayMultiTopStateStateModel(_stateTransitionProcessor); + return new HelixGatewayMultiTopStateStateModel(_helixGatewayParticipant); } } diff --git a/helix-gateway/src/main/java/org/apache/helix/gateway/util/StateTransitionMessageTranslateUtil.java b/helix-gateway/src/main/java/org/apache/helix/gateway/util/StateTransitionMessageTranslateUtil.java index 41040f292b..ecc6c95683 100644 --- a/helix-gateway/src/main/java/org/apache/helix/gateway/util/StateTransitionMessageTranslateUtil.java +++ b/helix-gateway/src/main/java/org/apache/helix/gateway/util/StateTransitionMessageTranslateUtil.java @@ -26,6 +26,7 @@ import org.apache.helix.HelixDefinedState; import org.apache.helix.gateway.constant.GatewayServiceEventType; +import org.apache.helix.gateway.participant.HelixGatewayParticipant; import org.apache.helix.gateway.service.GatewayServiceEvent; import org.apache.helix.model.Message; import proto.org.apache.helix.gateway.HelixGatewayServiceOuterClass; @@ -45,13 +46,13 @@ public final class StateTransitionMessageTranslateUtil { */ public static HelixGatewayServiceOuterClass.SingleTransitionMessage.TransitionType translateStatesToTransitionType( String currentState, String toState) { - boolean isCurrentDropped = HelixDefinedState.DROPPED.name().equals(currentState); + boolean isUnassigned = HelixGatewayParticipant.UNASSIGNED_STATE.equals(currentState); boolean isToStateDropped = HelixDefinedState.DROPPED.name().equals(toState); - if (isToStateDropped && !isCurrentDropped) { + if (isToStateDropped && !isUnassigned) { return HelixGatewayServiceOuterClass.SingleTransitionMessage.TransitionType.DELETE_SHARD; } - if (!isToStateDropped && isCurrentDropped) { + if (!isToStateDropped && isUnassigned) { return HelixGatewayServiceOuterClass.SingleTransitionMessage.TransitionType.ADD_SHARD; } return HelixGatewayServiceOuterClass.SingleTransitionMessage.TransitionType.CHANGE_ROLE; diff --git a/helix-gateway/src/test/java/org/apache/helix/gateway/participant/TestHelixGatewayParticipant.java b/helix-gateway/src/test/java/org/apache/helix/gateway/participant/TestHelixGatewayParticipant.java index 5e61c87ba7..fda7fbb1be 100644 --- a/helix-gateway/src/test/java/org/apache/helix/gateway/participant/TestHelixGatewayParticipant.java +++ b/helix-gateway/src/test/java/org/apache/helix/gateway/participant/TestHelixGatewayParticipant.java @@ -27,7 +27,6 @@ import java.util.stream.Collectors; import org.apache.helix.ConfigAccessor; -import org.apache.helix.HelixDefinedState; import org.apache.helix.TestHelper; import org.apache.helix.common.ZkTestBase; import org.apache.helix.gateway.api.service.HelixGatewayServiceProcessor; @@ -180,7 +179,7 @@ private String getHelixCurrentState(String instanceName, String resourceName, String shardId) { return _gSetupTool.getClusterManagementTool() .getResourceExternalView(CLUSTER_NAME, resourceName).getStateMap(shardId) - .getOrDefault(instanceName, HelixDefinedState.DROPPED.name()); + .getOrDefault(instanceName, HelixGatewayParticipant.UNASSIGNED_STATE); } /** @@ -284,8 +283,9 @@ public void testProcessStateTransitionAfterReconnect() throws Exception { HelixGatewayParticipant participant = _participants.get(0); deleteParticipant(participant); - // Verify the Helix state transitions to "DROPPED" for the participant - verifyHelixPartitionStates(participant.getInstanceName(), "DROPPED"); + // Verify the Helix state transitions to "UNASSIGNED_STATE" for the participant + verifyHelixPartitionStates(participant.getInstanceName(), + HelixGatewayParticipant.UNASSIGNED_STATE); // Re-add the participant with its initial state addParticipant(participant.getInstanceName(), participant.getShardStateMap()); @@ -300,7 +300,8 @@ public void testProcessStateTransitionAfterReconnectAfterDroppingPartition() thr // Remove the first participant and verify state HelixGatewayParticipant participant = _participants.get(0); deleteParticipant(participant); - verifyHelixPartitionStates(participant.getInstanceName(), "DROPPED"); + verifyHelixPartitionStates(participant.getInstanceName(), + HelixGatewayParticipant.UNASSIGNED_STATE); // Remove shard preference and re-add the participant removeFromPreferenceList(participant); diff --git a/helix-gateway/src/test/java/org/apache/helix/gateway/utils/TestStateTransitionMessageTranslateUtil.java b/helix-gateway/src/test/java/org/apache/helix/gateway/utils/TestStateTransitionMessageTranslateUtil.java index d1d02bd9ce..34e23d0b0c 100644 --- a/helix-gateway/src/test/java/org/apache/helix/gateway/utils/TestStateTransitionMessageTranslateUtil.java +++ b/helix-gateway/src/test/java/org/apache/helix/gateway/utils/TestStateTransitionMessageTranslateUtil.java @@ -19,6 +19,7 @@ import org.apache.helix.HelixDefinedState; +import org.apache.helix.gateway.participant.HelixGatewayParticipant; import org.apache.helix.gateway.util.StateTransitionMessageTranslateUtil; import org.testng.Assert; import org.testng.annotations.Test; @@ -41,7 +42,7 @@ public void testTranslateStatesToTransitionType_DeleteShard() { @Test public void testTranslateStatesToTransitionType_AddShard() { - String currentState = HelixDefinedState.DROPPED.name(); + String currentState = HelixGatewayParticipant.UNASSIGNED_STATE; String toState = "ONLINE"; HelixGatewayServiceOuterClass.SingleTransitionMessage.TransitionType result =