This is an automated email from the ASF dual-hosted git repository.
jin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-hugegraph.git
The following commit(s) were added to refs/heads/master by this push:
new 6409d9277 optimize: remove lock of globalMasterInfo (#2151)
6409d9277 is described below
commit 6409d9277d44535a12dc3b7e4f9963f3d4d35b28
Author: vaughn <[email protected]>
AuthorDate: Tue Mar 14 18:55:29 2023 +0800
optimize: remove lock of globalMasterInfo (#2151)
---
.../hugegraph/api/filter/RedirectFilter.java | 19 +++++------
.../hugegraph/masterelection/GlobalMasterInfo.java | 39 +++++++++++++++-------
.../StandardStateMachineCallback.java | 4 +--
3 files changed, 38 insertions(+), 24 deletions(-)
diff --git
a/hugegraph-api/src/main/java/org/apache/hugegraph/api/filter/RedirectFilter.java
b/hugegraph-api/src/main/java/org/apache/hugegraph/api/filter/RedirectFilter.java
index 23e5f0735..e675dd955 100644
---
a/hugegraph-api/src/main/java/org/apache/hugegraph/api/filter/RedirectFilter.java
+++
b/hugegraph-api/src/main/java/org/apache/hugegraph/api/filter/RedirectFilter.java
@@ -76,23 +76,22 @@ public class RedirectFilter implements
ContainerRequestFilter {
E.checkState(handle != null, "Context GraphManager is absent");
GraphManager manager = handle.getService();
E.checkState(manager != null, "Context GraphManager is absent");
- GlobalMasterInfo globalMasterInfo = manager.globalMasterInfo();
- if (globalMasterInfo == null || !globalMasterInfo.isFeatureSupport()) {
- return;
- }
String redirectTag = context.getHeaderString(X_HG_REDIRECT);
if (StringUtils.isNotEmpty(redirectTag)) {
return;
}
- String url;
- synchronized (globalMasterInfo) {
- if (globalMasterInfo.isMaster() ||
StringUtils.isEmpty(globalMasterInfo.url())) {
- return;
- }
- url = globalMasterInfo.url();
+ GlobalMasterInfo globalMasterInfo = manager.globalMasterInfo();
+ if (globalMasterInfo == null || !globalMasterInfo.isFeatureSupport()) {
+ return;
+ }
+ GlobalMasterInfo.NodeInfo masterNodeInfo = globalMasterInfo.nodeInfo();
+ if (masterNodeInfo == null || masterNodeInfo.isMaster() ||
+ StringUtils.isEmpty(masterNodeInfo.url())) {
+ return;
}
+ String url = masterNodeInfo.url();
URI redirectUri;
try {
diff --git
a/hugegraph-core/src/main/java/org/apache/hugegraph/masterelection/GlobalMasterInfo.java
b/hugegraph-core/src/main/java/org/apache/hugegraph/masterelection/GlobalMasterInfo.java
index 9d8f85a9b..d7dd127af 100644
---
a/hugegraph-core/src/main/java/org/apache/hugegraph/masterelection/GlobalMasterInfo.java
+++
b/hugegraph-core/src/main/java/org/apache/hugegraph/masterelection/GlobalMasterInfo.java
@@ -19,26 +19,22 @@ package org.apache.hugegraph.masterelection;
public class GlobalMasterInfo {
- private boolean isMaster;
- private String url;
-
+ private NodeInfo nodeInfo;
private volatile boolean featureSupport;
public GlobalMasterInfo() {
this.featureSupport = false;
+ this.nodeInfo = new NodeInfo(false, "");
}
- public synchronized void set(boolean isMaster, String url) {
- this.isMaster = isMaster;
- this.url = url;
- }
-
- public synchronized boolean isMaster() {
- return this.isMaster;
+ public final void nodeInfo(boolean isMaster, String url) {
+ // final can avoid instruction rearrangement, visibility can be ignored
+ final NodeInfo tmp = new NodeInfo(isMaster, url);
+ this.nodeInfo = tmp;
}
- public synchronized String url() {
- return this.url;
+ public final NodeInfo nodeInfo() {
+ return this.nodeInfo;
}
public void isFeatureSupport(boolean featureSupport) {
@@ -48,4 +44,23 @@ public class GlobalMasterInfo {
public boolean isFeatureSupport() {
return this.featureSupport;
}
+
+ public static class NodeInfo {
+
+ private final boolean isMaster;
+ private final String url;
+
+ public NodeInfo(boolean isMaster, String url) {
+ this.isMaster = isMaster;
+ this.url = url;
+ }
+
+ public boolean isMaster() {
+ return this.isMaster;
+ }
+
+ public String url() {
+ return this.url;
+ }
+ }
}
diff --git
a/hugegraph-core/src/main/java/org/apache/hugegraph/masterelection/StandardStateMachineCallback.java
b/hugegraph-core/src/main/java/org/apache/hugegraph/masterelection/StandardStateMachineCallback.java
index 11a989ecd..88bec95b3 100644
---
a/hugegraph-core/src/main/java/org/apache/hugegraph/masterelection/StandardStateMachineCallback.java
+++
b/hugegraph-core/src/main/java/org/apache/hugegraph/masterelection/StandardStateMachineCallback.java
@@ -94,12 +94,12 @@ public class StandardStateMachineCallback implements
StateMachineCallback {
public void initGlobalMasterInfo(StateMachineContext context) {
StateMachineContext.MasterServerInfo master = context.master();
if (master == null) {
- this.globalMasterInfo.set(false, null);
+ this.globalMasterInfo.nodeInfo(false, "");
return;
}
boolean isMaster = Objects.equals(context.node(), master.node());
String url = master.url();
- this.globalMasterInfo.set(isMaster, url);
+ this.globalMasterInfo.nodeInfo(isMaster, url);
}
}