You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@helix.apache.org by jx...@apache.org on 2021/04/27 18:10:45 UTC

[helix] branch master updated: Remove lock in HelixStateTransitionHandler (#1681)

This is an automated email from the ASF dual-hosted git repository.

jxue pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/helix.git


The following commit(s) were added to refs/heads/master by this push:
     new 07e3ed5  Remove lock in HelixStateTransitionHandler (#1681)
07e3ed5 is described below

commit 07e3ed590c61f3ee82b78b9f16b1b19ea7c92a8a
Author: xyuanlu <xy...@gmail.com>
AuthorDate: Tue Apr 27 11:10:33 2021 -0700

    Remove lock in HelixStateTransitionHandler (#1681)
    
    * reducing lock scope in HelixStateTransitionHandler
    * remove lock
---
 .../handling/HelixStateTransitionHandler.java      | 96 +++++++++++-----------
 1 file changed, 48 insertions(+), 48 deletions(-)

diff --git a/helix-core/src/main/java/org/apache/helix/messaging/handling/HelixStateTransitionHandler.java b/helix-core/src/main/java/org/apache/helix/messaging/handling/HelixStateTransitionHandler.java
index d32e90e..174d2b1 100644
--- a/helix-core/src/main/java/org/apache/helix/messaging/handling/HelixStateTransitionHandler.java
+++ b/helix-core/src/main/java/org/apache/helix/messaging/handling/HelixStateTransitionHandler.java
@@ -318,60 +318,60 @@ public class HelixStateTransitionHandler extends MessageHandler {
     NotificationContext context = _notificationContext;
     Message message = _message;
 
-    synchronized (_stateModel) {
-      HelixTaskResult taskResult = new HelixTaskResult();
-      HelixManager manager = context.getManager();
-
-      _statusUpdateUtil.logInfo(message, HelixStateTransitionHandler.class,
-          "Message handling task begin execute", manager);
-      message.setExecuteStartTimeStamp(System.currentTimeMillis());
-
-      try {
-        preHandleMessage();
-        invoke(manager, context, taskResult, message);
-      } catch (HelixDuplicatedStateTransitionException e) {
-        // Duplicated state transition problem is fine
-        taskResult.setSuccess(true);
-        taskResult.setMessage(e.toString());
-        taskResult.setInfo(e.getMessage());
-      } catch (HelixStateMismatchException e) {
-        // Simply log error and return from here if State mismatch.
-        // The current state of the state model is intact.
+    HelixTaskResult taskResult = new HelixTaskResult();
+    HelixManager manager = context.getManager();
+
+    _statusUpdateUtil
+        .logInfo(message, HelixStateTransitionHandler.class, "Message handling task begin execute",
+            manager);
+    message.setExecuteStartTimeStamp(System.currentTimeMillis());
+
+    try {
+      preHandleMessage();
+      invoke(manager, context, taskResult, message);
+    } catch (HelixDuplicatedStateTransitionException e) {
+      // Duplicated state transition problem is fine
+      taskResult.setSuccess(true);
+      taskResult.setMessage(e.toString());
+      taskResult.setInfo(e.getMessage());
+    } catch (HelixStateMismatchException e) {
+      // Simply log error and return from here if State mismatch.
+      // The current state of the state model is intact.
+      taskResult.setSuccess(false);
+      taskResult.setMessage(e.toString());
+      taskResult.setException(e);
+    } catch (Exception e) {
+      String errorMessage =
+          "Exception while executing a state transition task " + message.getPartitionName();
+      logger.error(errorMessage, e);
+      if (e.getCause() != null && e.getCause() instanceof InterruptedException) {
+        e = (InterruptedException) e.getCause();
+      }
+
+      if (e instanceof HelixRollbackException || (e.getCause() != null && e
+          .getCause() instanceof HelixRollbackException)) {
+        // TODO : Support cancel to any state
+        logger.info(
+            "Rollback happened of state transition on resource \"" + _message.getResourceName()
+                + "\" partition \"" + _message.getPartitionName() + "\" from \"" + _message
+                .getFromState() + "\" to \"" + _message.getToState() + "\"");
+        taskResult.setCancelled(true);
+      } else {
+        _statusUpdateUtil
+            .logError(message, HelixStateTransitionHandler.class, e, errorMessage, manager);
         taskResult.setSuccess(false);
         taskResult.setMessage(e.toString());
         taskResult.setException(e);
-      } catch (Exception e) {
-        String errorMessage =
-            "Exception while executing a state transition task " + message.getPartitionName();
-        logger.error(errorMessage, e);
-        if (e.getCause() != null && e.getCause() instanceof InterruptedException) {
-          e = (InterruptedException) e.getCause();
-        }
-
-        if (e instanceof HelixRollbackException
-            || (e.getCause() != null && e.getCause() instanceof HelixRollbackException)) {
-          // TODO : Support cancel to any state
-          logger.info("Rollback happened of state transition on resource \""
-              + _message.getResourceName() + "\" partition \"" + _message.getPartitionName()
-              + "\" from \"" + _message.getFromState() + "\" to \"" + _message.getToState() + "\"");
-          taskResult.setCancelled(true);
-        } else {
-          _statusUpdateUtil.logError(message, HelixStateTransitionHandler.class, e, errorMessage,
-              manager);
-          taskResult.setSuccess(false);
-          taskResult.setMessage(e.toString());
-          taskResult.setException(e);
-          taskResult.setInterrupted(e instanceof InterruptedException);
-        }
+        taskResult.setInterrupted(e instanceof InterruptedException);
       }
+    }
 
-      taskResult.setCompleteTime(System.currentTimeMillis());
-      // add task result to context for postHandling
-      context.add(MapKey.HELIX_TASK_RESULT.toString(), taskResult);
-      postHandleMessage();
+    taskResult.setCompleteTime(System.currentTimeMillis());
+    // add task result to context for postHandling
+    context.add(MapKey.HELIX_TASK_RESULT.toString(), taskResult);
+    postHandleMessage();
 
-      return taskResult;
-    }
+    return taskResult;
   }
 
   private void invoke(HelixManager manager, NotificationContext context, HelixTaskResult taskResult,