You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@helix.apache.org by zh...@apache.org on 2022/05/31 19:36:02 UTC
[helix] branch master updated: Fix static instance bug in DistViewAggregatorStateModel (#2124)
This is an automated email from the ASF dual-hosted git repository.
zhangmeng 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 5909a8a36 Fix static instance bug in DistViewAggregatorStateModel (#2124)
5909a8a36 is described below
commit 5909a8a363499489d545ff4ddf8464140f56076c
Author: Qi (Quincy) Qu <qq...@linkedin.com>
AuthorDate: Tue May 31 12:35:57 2022 -0700
Fix static instance bug in DistViewAggregatorStateModel (#2124)
Change to use non-static reference in statemodel
---
.../statemodel/DistViewAggregatorStateModel.java | 47 +++++++++-------------
.../view/integration/TestHelixViewAggregator.java | 1 +
2 files changed, 21 insertions(+), 27 deletions(-)
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 1ccf52d04..7ac20b0da 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 @@ import org.slf4j.LoggerFactory;
})
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 class DistViewAggregatorStateModel extends AbstractHelixLeaderStandbyStat
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 @@ public class DistViewAggregatorStateModel extends AbstractHelixLeaderStandbyStat
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 9ffb90666..adf16ec33 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 @@ public class TestHelixViewAggregator extends ViewAggregatorIntegrationTestBase {
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