dasahcc commented on a change in pull request #1362:
URL: https://github.com/apache/helix/pull/1362#discussion_r492248965



##########
File path: 
helix-core/src/main/java/org/apache/helix/messaging/handling/HelixStateTransitionHandler.java
##########
@@ -463,6 +442,36 @@ public void onError(Exception e, ErrorCode code, ErrorType 
type) {
 
   }
 
+  // Verify the fromState and current state of the stateModel.
+  private void validateStaleMessage (boolean isPreCheck) throws Exception {
+    String fromState = _message.getFromState();
+    String toState = _message.getToState();
+    String partitionName = _message.getPartitionName();
+
+    // state in _currentStateDelta uses current state from state model. It has 
the
+    // most up-to-date. current state. In case currentState in stateModel is 
null,
+    // partition is in initial state and we using it as current state.
+    // Defined in HelixStateMachineEngine.
+    String state = _currentStateDelta.getState(partitionName);
+
+    if (toState.equalsIgnoreCase(state)) {
+      // To state equals current state, we can just ignore the message
+      throw new HelixDuplicatedStateTransitionException(String
+          .format("Partition %s current state is same as toState (%s->%s) from 
message.",
+              partitionName, fromState, toState));
+    } else if (!isPreCheck && fromState != null && !fromState.equals("*") && 
!fromState

Review comment:
       For the test you talked about, I think we may need to understand why we 
keep sending message INIT -> RUNNING. Because once the message has been 
DROPPED, controller should refresh current state and get the TASK_ERROR state. 
Then we should have some message like TASK_ERROR -> INIT or something, if we 
miss it, we should fix the logic to make it more robust. And I am OK to not fix 
it in this PR. But if that's the case, let's propose another PR for that. 
Otherwise, this is not a complete scenario. For regular resource management, it 
is not a complete filtering logic.




----------------------------------------------------------------
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]



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to