sodonnel commented on a change in pull request #1344: HDDS-1982 Extend
SCMNodeManager to support decommission and maintenance states
URL: https://github.com/apache/hadoop/pull/1344#discussion_r321192741
##########
File path:
hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/NodeStateManager.java
##########
@@ -219,47 +221,51 @@ private void initialiseState2EventMap() {
* | | | |
* V V | |
* [HEALTHY]------------------->[STALE]------------------->[DEAD]
- * | (TIMEOUT) | (TIMEOUT) |
- * | | |
- * | | |
- * | | |
- * | | |
- * | (DECOMMISSION) | (DECOMMISSION) | (DECOMMISSION)
- * | V |
- * +------------------->[DECOMMISSIONING]<----------------+
- * |
- * | (DECOMMISSIONED)
- * |
- * V
- * [DECOMMISSIONED]
*
*/
/**
* Initializes the lifecycle of node state machine.
*/
- private void initializeStateMachine() {
- stateMachine.addTransition(
+ private void initializeStateMachines() {
+ nodeHealthSM.addTransition(
NodeState.HEALTHY, NodeState.STALE, NodeLifeCycleEvent.TIMEOUT);
- stateMachine.addTransition(
+ nodeHealthSM.addTransition(
NodeState.STALE, NodeState.DEAD, NodeLifeCycleEvent.TIMEOUT);
- stateMachine.addTransition(
+ nodeHealthSM.addTransition(
NodeState.STALE, NodeState.HEALTHY, NodeLifeCycleEvent.RESTORE);
- stateMachine.addTransition(
+ nodeHealthSM.addTransition(
NodeState.DEAD, NodeState.HEALTHY, NodeLifeCycleEvent.RESURRECT);
- stateMachine.addTransition(
- NodeState.HEALTHY, NodeState.DECOMMISSIONING,
- NodeLifeCycleEvent.DECOMMISSION);
- stateMachine.addTransition(
- NodeState.STALE, NodeState.DECOMMISSIONING,
- NodeLifeCycleEvent.DECOMMISSION);
- stateMachine.addTransition(
- NodeState.DEAD, NodeState.DECOMMISSIONING,
- NodeLifeCycleEvent.DECOMMISSION);
- stateMachine.addTransition(
- NodeState.DECOMMISSIONING, NodeState.DECOMMISSIONED,
- NodeLifeCycleEvent.DECOMMISSIONED);
+ nodeOpStateSM.addTransition(
+ NodeOperationalState.IN_SERVICE, NodeOperationalState.DECOMMISSIONING,
+ NodeOperationStateEvent.START_DECOMMISSION);
+ nodeOpStateSM.addTransition(
+ NodeOperationalState.DECOMMISSIONING, NodeOperationalState.IN_SERVICE,
+ NodeOperationStateEvent.RETURN_TO_SERVICE);
+ nodeOpStateSM.addTransition(
+ NodeOperationalState.DECOMMISSIONING,
+ NodeOperationalState.DECOMMISSIONED,
+ NodeOperationStateEvent.COMPLETE_DECOMMISSION);
+ nodeOpStateSM.addTransition(
+ NodeOperationalState.DECOMMISSIONED, NodeOperationalState.IN_SERVICE,
+ NodeOperationStateEvent.RETURN_TO_SERVICE);
+
+ nodeOpStateSM.addTransition(
+ NodeOperationalState.IN_SERVICE,
+ NodeOperationalState.ENTERING_MAINTENANCE,
+ NodeOperationStateEvent.START_MAINTENANCE);
+ nodeOpStateSM.addTransition(
+ NodeOperationalState.ENTERING_MAINTENANCE,
+ NodeOperationalState.IN_SERVICE,
+ NodeOperationStateEvent.RETURN_TO_SERVICE);
+ nodeOpStateSM.addTransition(
+ NodeOperationalState.ENTERING_MAINTENANCE,
+ NodeOperationalState.IN_MAINTENANCE,
+ NodeOperationStateEvent.ENTER_MAINTENANCE);
+ nodeOpStateSM.addTransition(
+ NodeOperationalState.IN_MAINTENANCE, NodeOperationalState.IN_SERVICE,
+ NodeOperationStateEvent.RETURN_TO_SERVICE);
Review comment:
I hadn't considered where to store that as yet. Probably it will be outside
of the state machine, but need to consider where it fits in. Perhaps in
NodeStatus, but that would change that object from being immutable, to carrying
a time.
We will need some sort of decommission / maintenance mode monitor, probably
separate from the heartbeat monitor. The decomm monitor will need to check when
all blocks are replicated etc, so it could also keep track of the node
maintenance timeout and hence switch the node to 'IN_SERVICE + DEAD" if it is
dead and the timeout expires.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
With regards,
Apache Git Services
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]