You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hugegraph.apache.org by va...@apache.org on 2023/03/09 02:02:46 UTC
[incubator-hugegraph] 01/01: optimize: remove lock
This is an automated email from the ASF dual-hosted git repository.
vaughn pushed a commit to branch zy_dev
in repository https://gitbox.apache.org/repos/asf/incubator-hugegraph.git
commit e68140a58a317036e4616d75ce2db35b4e6e2b5c
Author: vaughn <va...@apache.org>
AuthorDate: Thu Mar 9 09:59:59 2023 +0800
optimize: remove lock
---
.../hugegraph/api/filter/RedirectFilter.java | 19 ++++++-----
.../hugegraph/masterelection/GlobalMasterInfo.java | 37 +++++++++++++++-------
.../StandardStateMachineCallback.java | 4 +--
3 files changed, 36 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..84c851723 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.Info masterInfo = globalMasterInfo.info();
+ if (masterInfo == null || masterInfo.isMaster() ||
+ StringUtils.isEmpty(masterInfo.url())) {
+ return;
}
+ String url = masterInfo.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..a62280347 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,20 @@ package org.apache.hugegraph.masterelection;
public class GlobalMasterInfo {
- private boolean isMaster;
- private String url;
-
+ private volatile Info info;
private volatile boolean featureSupport;
public GlobalMasterInfo() {
this.featureSupport = false;
+ this.info = new Info(false, "");
}
- public synchronized void set(boolean isMaster, String url) {
- this.isMaster = isMaster;
- this.url = url;
- }
-
- public synchronized boolean isMaster() {
- return this.isMaster;
+ public void info(boolean isMaster, String url) {
+ this.info = new Info(isMaster, url);
}
- public synchronized String url() {
- return this.url;
+ public Info info() {
+ return this.info;
}
public void isFeatureSupport(boolean featureSupport) {
@@ -48,4 +42,23 @@ public class GlobalMasterInfo {
public boolean isFeatureSupport() {
return this.featureSupport;
}
+
+ public static class Info {
+
+ private boolean isMaster;
+ private String url;
+
+ public Info(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..fb6b5c9dc 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.info(false, null);
return;
}
boolean isMaster = Objects.equals(context.node(), master.node());
String url = master.url();
- this.globalMasterInfo.set(isMaster, url);
+ this.globalMasterInfo.info(isMaster, url);
}
}