Fix static instance bug in DistViewAggregatorStateModel (#2124)

Change to use non-static reference in statemodel
diff --git a/helix-view-aggregator/src/main/java/org/apache/helix/view/statemodel/DistViewAggregatorStateModel.java b/helix-view-aggregator/src/main/java/org/apache/helix/view/statemodel/DistViewAggregatorStateModel.java
index 1ccf52d..7ac20b0 100644
--- a/helix-view-aggregator/src/main/java/org/apache/helix/view/statemodel/DistViewAggregatorStateModel.java
+++ b/helix-view-aggregator/src/main/java/org/apache/helix/view/statemodel/DistViewAggregatorStateModel.java
@@ -32,8 +32,7 @@
 })
 public class DistViewAggregatorStateModel extends AbstractHelixLeaderStandbyStateModel {
   private final static Logger logger = LoggerFactory.getLogger(DistViewAggregatorStateModel.class);
-  private final static Object stateTransitionLock = new Object();
-  private static HelixViewAggregator _aggregator;
+  private HelixViewAggregator _aggregator;
 
   public DistViewAggregatorStateModel(String zkAddr) {
     super(zkAddr);
@@ -48,25 +47,22 @@
   public void onBecomeLeaderFromStandby(Message message, NotificationContext context)
       throws Exception {
     String viewClusterName = message.getPartitionName();
-
-    synchronized (stateTransitionLock) {
-      if (_aggregator != null) {
-        logger.warn("Aggregator already exists for view cluster {}: {}: cleaning it up.",
-            viewClusterName, _aggregator.getAggregatorInstanceName());
-        reset();
-      }
-      logger.info("Creating new HelixViewAggregator for view cluster {}", viewClusterName);
-      try {
-        _aggregator = new HelixViewAggregator(viewClusterName, _zkAddr);
-        _aggregator.start();
-      } catch (Exception e) {
-        logger.error("Aggregator failed to become leader from stand by for view cluster {}",
-            viewClusterName, e);
-        reset();
-        throw e;
-      }
-      logStateTransition("STANDBY", "LEADER", message.getPartitionName(), message.getTgtName());
+    if (_aggregator != null) {
+      logger.warn("Aggregator already exists for view cluster {}: {}: cleaning it up.",
+          viewClusterName, _aggregator.getAggregatorInstanceName());
+      reset();
     }
+    logger.info("Creating new HelixViewAggregator for view cluster {}", viewClusterName);
+    try {
+      _aggregator = new HelixViewAggregator(viewClusterName, _zkAddr);
+      _aggregator.start();
+    } catch (Exception e) {
+      logger.error("Aggregator failed to become leader from stand by for view cluster {}",
+          viewClusterName, e);
+      reset();
+      throw e;
+    }
+    logStateTransition("STANDBY", "LEADER", message.getPartitionName(), message.getTgtName());
 
   }
 
@@ -86,15 +82,12 @@
     logStateTransition("OFFLINE", "DROPPED", message.getPartitionName(), message.getTgtName());
   }
 
-
   @Override
   public void reset() {
-    synchronized (stateTransitionLock) {
-      if (_aggregator != null) {
-        logger.error("Resetting view aggregator {}", _aggregator.getAggregatorInstanceName());
-        _aggregator.shutdown();
-        _aggregator = null;
-      }
+    if (_aggregator != null) {
+      logger.info("Resetting view aggregator {}", _aggregator.getAggregatorInstanceName());
+      _aggregator.shutdown();
+      _aggregator = null;
     }
   }
 
diff --git a/helix-view-aggregator/src/test/java/org/apache/helix/view/integration/TestHelixViewAggregator.java b/helix-view-aggregator/src/test/java/org/apache/helix/view/integration/TestHelixViewAggregator.java
index 9ffb906..adf16ec 100644
--- a/helix-view-aggregator/src/test/java/org/apache/helix/view/integration/TestHelixViewAggregator.java
+++ b/helix-view-aggregator/src/test/java/org/apache/helix/view/integration/TestHelixViewAggregator.java
@@ -56,6 +56,7 @@
   private HelixAdmin _helixAdmin;
   private MockViewClusterSpectator _monitor;
   private Set<String> _allResources = new HashSet<>();
+  // TODO: add test coverage on multiple statemodel instances for different view clusters
   private DistViewAggregatorStateModel _viewAggregatorStateModel;
 
   @BeforeClass