From 8998fa37dcb063326eab1863f4b13085c0d6dbf5 Mon Sep 17 00:00:00 2001 From: sadwitdastreetz Date: Thu, 23 Oct 2025 20:32:16 +0800 Subject: [PATCH 01/12] refactor(client): adjust APIs to compatible with 1.7.0 server --- .../hugegraph/api/graphs/GraphsAPI.java | 48 +++++++++++++++++++ .../apache/hugegraph/client/RestClient.java | 2 +- .../hugegraph/driver/GraphsManager.java | 18 +++++++ .../apache/hugegraph/driver/HugeClient.java | 2 +- 4 files changed, 68 insertions(+), 2 deletions(-) diff --git a/hugegraph-client/src/main/java/org/apache/hugegraph/api/graphs/GraphsAPI.java b/hugegraph-client/src/main/java/org/apache/hugegraph/api/graphs/GraphsAPI.java index 17d0a5371..34355dc1a 100644 --- a/hugegraph-client/src/main/java/org/apache/hugegraph/api/graphs/GraphsAPI.java +++ b/hugegraph-client/src/main/java/org/apache/hugegraph/api/graphs/GraphsAPI.java @@ -203,6 +203,28 @@ public void mode(String graph, GraphMode mode) { this.client.put(joinPath(this.path(), graph, MODE), null, mode); } + public void mode(String graph, String graphSpace, GraphMode mode) { + // NOTE: Must provide id for PUT. If you use "graph/mode", "/" will + // be encoded to "%2F". So use "mode" here, although inaccurate. + this.client.put(joinPath(this.path(), graphSpace, graph, MODE), null, mode); + } + + public GraphMode mode(String graph, String graphSpace) { + RestResult result = this.client.get(joinPath(this.path(), graphSpace, graph), MODE); + @SuppressWarnings("unchecked") + Map mode = result.readObject(Map.class); + String value = mode.get(MODE); + if (value == null) { + throw new InvalidResponseException("Invalid response, expect 'mode' in response"); + } + try { + return GraphMode.valueOf(value); + } catch (IllegalArgumentException e) { + throw new InvalidResponseException("Invalid GraphMode value '%s'", value); + } + } + + public GraphMode mode(String graph) { RestResult result = this.client.get(joinPath(this.path(), graph), MODE); @SuppressWarnings("unchecked") @@ -218,6 +240,32 @@ public GraphMode mode(String graph) { } } + public void readMode(String graph, String graphSpace, GraphReadMode readMode) { + this.client.checkApiVersion("0.59", "graph read mode"); + // NOTE: Must provide id for PUT. If you use "graph/graph_read_mode", "/" + // will be encoded to "%2F". So use "graph_read_mode" here, although + // inaccurate. + this.client.put(joinPath(this.path(), graphSpace, graph, GRAPH_READ_MODE), null, readMode); + } + + public GraphReadMode readMode(String graph, String graphSpace) { + this.client.checkApiVersion("0.59", "graph read mode"); + RestResult result = this.client.get(joinPath(this.path(), graphSpace, graph), + GRAPH_READ_MODE); + @SuppressWarnings("unchecked") + Map readMode = result.readObject(Map.class); + String value = readMode.get(GRAPH_READ_MODE); + if (value == null) { + throw new InvalidResponseException("Invalid response, expect 'graph_read_mode' " + + "in response"); + } + try { + return GraphReadMode.valueOf(value); + } catch (IllegalArgumentException e) { + throw new InvalidResponseException("Invalid GraphReadMode value '%s'", value); + } + } + public void readMode(String graph, GraphReadMode readMode) { this.client.checkApiVersion("0.59", "graph read mode"); // NOTE: Must provide id for PUT. If you use "graph/graph_read_mode", "/" diff --git a/hugegraph-client/src/main/java/org/apache/hugegraph/client/RestClient.java b/hugegraph-client/src/main/java/org/apache/hugegraph/client/RestClient.java index f7550bfd4..913bb2e09 100644 --- a/hugegraph-client/src/main/java/org/apache/hugegraph/client/RestClient.java +++ b/hugegraph-client/src/main/java/org/apache/hugegraph/client/RestClient.java @@ -49,7 +49,7 @@ public class RestClient extends AbstractRestClient { private Version apiVersion = null; @Setter @Getter - private boolean supportGs = false; + private boolean supportGs = true; public RestClient(String url, String username, String password, int timeout) { super(url, username, password, timeout * SECOND); diff --git a/hugegraph-client/src/main/java/org/apache/hugegraph/driver/GraphsManager.java b/hugegraph-client/src/main/java/org/apache/hugegraph/driver/GraphsManager.java index aacf261f8..a3732aeaa 100644 --- a/hugegraph-client/src/main/java/org/apache/hugegraph/driver/GraphsManager.java +++ b/hugegraph-client/src/main/java/org/apache/hugegraph/driver/GraphsManager.java @@ -115,19 +115,37 @@ public void mode(String graph, GraphMode mode) { this.graphsAPI.mode(graph, mode); } + public void mode(String graph, String graphSpace, GraphMode mode) { + this.graphsAPI.mode(graph, graphSpace, mode); + } + public GraphMode mode(String graph) { return this.graphsAPI.mode(graph); } + public GraphMode mode(String graph, String graphSpace) { + return this.graphsAPI.mode(graph, graphSpace); + } + + public void readMode(String graph, String graphSpace, GraphReadMode readMode) { + this.graphsAPI.readMode(graph, graphSpace, readMode); + } + public void readMode(String graph, GraphReadMode readMode) { this.graphsAPI.readMode(graph, readMode); } + public GraphReadMode readMode(String graph, String graphSpace) { + return this.graphsAPI.readMode(graph, graphSpace); + } + public GraphReadMode readMode(String graph) { return this.graphsAPI.readMode(graph); } + public String clone(String graph, Map body) { return this.graphsAPI.clone(graph, body); } + } diff --git a/hugegraph-client/src/main/java/org/apache/hugegraph/driver/HugeClient.java b/hugegraph-client/src/main/java/org/apache/hugegraph/driver/HugeClient.java index dcb847688..ec7bcb95a 100644 --- a/hugegraph-client/src/main/java/org/apache/hugegraph/driver/HugeClient.java +++ b/hugegraph-client/src/main/java/org/apache/hugegraph/driver/HugeClient.java @@ -173,7 +173,7 @@ private void checkServerApiVersion() { // 0.81 equals to the {latest_api_version} +10 VersionUtil.check(apiVersion, "0.38", "0.81", "hugegraph-api in server"); this.client.apiVersion(apiVersion); - boolean supportGs = VersionUtil.gte(this.version.getCoreVersion(), "2.0"); + boolean supportGs = VersionUtil.gte(this.version.getCoreVersion(), "1.7"); this.client.setSupportGs(supportGs); } From 2c85635f72cfec27554b40ed1cc8610c9d48e679 Mon Sep 17 00:00:00 2001 From: sadwitdastreetz Date: Sun, 26 Oct 2025 20:17:07 +0800 Subject: [PATCH 02/12] Refactor(client): adjust GraphAPI with better application --- .../hugegraph/api/graphs/GraphsAPI.java | 95 +++++++------------ .../apache/hugegraph/client/RestClient.java | 2 +- .../hugegraph/driver/GraphsManager.java | 1 - .../apache/hugegraph/driver/HugeClient.java | 10 +- 4 files changed, 37 insertions(+), 71 deletions(-) diff --git a/hugegraph-client/src/main/java/org/apache/hugegraph/api/graphs/GraphsAPI.java b/hugegraph-client/src/main/java/org/apache/hugegraph/api/graphs/GraphsAPI.java index 34355dc1a..c377d7f39 100644 --- a/hugegraph-client/src/main/java/org/apache/hugegraph/api/graphs/GraphsAPI.java +++ b/hugegraph-client/src/main/java/org/apache/hugegraph/api/graphs/GraphsAPI.java @@ -203,44 +203,13 @@ public void mode(String graph, GraphMode mode) { this.client.put(joinPath(this.path(), graph, MODE), null, mode); } - public void mode(String graph, String graphSpace, GraphMode mode) { + public void mode(String graphSpace, String graph, GraphMode mode) { // NOTE: Must provide id for PUT. If you use "graph/mode", "/" will // be encoded to "%2F". So use "mode" here, although inaccurate. this.client.put(joinPath(this.path(), graphSpace, graph, MODE), null, mode); } - public GraphMode mode(String graph, String graphSpace) { - RestResult result = this.client.get(joinPath(this.path(), graphSpace, graph), MODE); - @SuppressWarnings("unchecked") - Map mode = result.readObject(Map.class); - String value = mode.get(MODE); - if (value == null) { - throw new InvalidResponseException("Invalid response, expect 'mode' in response"); - } - try { - return GraphMode.valueOf(value); - } catch (IllegalArgumentException e) { - throw new InvalidResponseException("Invalid GraphMode value '%s'", value); - } - } - - - public GraphMode mode(String graph) { - RestResult result = this.client.get(joinPath(this.path(), graph), MODE); - @SuppressWarnings("unchecked") - Map mode = result.readObject(Map.class); - String value = mode.get(MODE); - if (value == null) { - throw new InvalidResponseException("Invalid response, expect 'mode' in response"); - } - try { - return GraphMode.valueOf(value); - } catch (IllegalArgumentException e) { - throw new InvalidResponseException("Invalid GraphMode value '%s'", value); - } - } - - public void readMode(String graph, String graphSpace, GraphReadMode readMode) { + public void readMode(String graphSpace, String graph, GraphReadMode readMode) { this.client.checkApiVersion("0.59", "graph read mode"); // NOTE: Must provide id for PUT. If you use "graph/graph_read_mode", "/" // will be encoded to "%2F". So use "graph_read_mode" here, although @@ -248,24 +217,6 @@ public void readMode(String graph, String graphSpace, GraphReadMode readMode) { this.client.put(joinPath(this.path(), graphSpace, graph, GRAPH_READ_MODE), null, readMode); } - public GraphReadMode readMode(String graph, String graphSpace) { - this.client.checkApiVersion("0.59", "graph read mode"); - RestResult result = this.client.get(joinPath(this.path(), graphSpace, graph), - GRAPH_READ_MODE); - @SuppressWarnings("unchecked") - Map readMode = result.readObject(Map.class); - String value = readMode.get(GRAPH_READ_MODE); - if (value == null) { - throw new InvalidResponseException("Invalid response, expect 'graph_read_mode' " + - "in response"); - } - try { - return GraphReadMode.valueOf(value); - } catch (IllegalArgumentException e) { - throw new InvalidResponseException("Invalid GraphReadMode value '%s'", value); - } - } - public void readMode(String graph, GraphReadMode readMode) { this.client.checkApiVersion("0.59", "graph read mode"); // NOTE: Must provide id for PUT. If you use "graph/graph_read_mode", "/" @@ -274,23 +225,47 @@ public void readMode(String graph, GraphReadMode readMode) { this.client.put(joinPath(this.path(), graph, GRAPH_READ_MODE), null, readMode); } - public GraphReadMode readMode(String graph) { - this.client.checkApiVersion("0.59", "graph read mode"); - RestResult result = this.client.get(joinPath(this.path(), graph), GRAPH_READ_MODE); + private > T getEnumMode(String graphSpace, String graph, + String modeKey, Class enumClass) { + String path = (graphSpace != null) + ? joinPath(this.path(), graphSpace, graph) + : joinPath(this.path(), graph); + + RestResult result = this.client.get(path, modeKey); @SuppressWarnings("unchecked") - Map readMode = result.readObject(Map.class); - String value = readMode.get(GRAPH_READ_MODE); + Map map = result.readObject(Map.class); + String value = map.get(modeKey); + if (value == null) { - throw new InvalidResponseException("Invalid response, expect 'graph_read_mode' " + - "in response"); + throw new InvalidResponseException( + "Invalid response, expect '%s' in response", modeKey); } try { - return GraphReadMode.valueOf(value); + return Enum.valueOf(enumClass, value); } catch (IllegalArgumentException e) { - throw new InvalidResponseException("Invalid GraphReadMode value '%s'", value); + throw new InvalidResponseException( + "Invalid %s value '%s'", enumClass.getSimpleName(), value); } } + public GraphMode mode(String graphSpace, String graph) { + return getEnumMode(graphSpace, graph, MODE, GraphMode.class); + } + + public GraphMode mode(String graph) { + return getEnumMode(null, graph, MODE, GraphMode.class); + } + + public GraphReadMode readMode(String graphSpace, String graph) { + this.client.checkApiVersion("0.59", "graph read mode"); + return getEnumMode(graphSpace, graph, GRAPH_READ_MODE, GraphReadMode.class); + } + + public GraphReadMode readMode(String graph) { + this.client.checkApiVersion("0.59", "graph read mode"); + return getEnumMode(null, graph, GRAPH_READ_MODE, GraphReadMode.class); + } + public String clone(String graph, Map body) { RestResult result = this.client.post(joinPath(this.path(), graph, "clone"), body); diff --git a/hugegraph-client/src/main/java/org/apache/hugegraph/client/RestClient.java b/hugegraph-client/src/main/java/org/apache/hugegraph/client/RestClient.java index 913bb2e09..f7550bfd4 100644 --- a/hugegraph-client/src/main/java/org/apache/hugegraph/client/RestClient.java +++ b/hugegraph-client/src/main/java/org/apache/hugegraph/client/RestClient.java @@ -49,7 +49,7 @@ public class RestClient extends AbstractRestClient { private Version apiVersion = null; @Setter @Getter - private boolean supportGs = true; + private boolean supportGs = false; public RestClient(String url, String username, String password, int timeout) { super(url, username, password, timeout * SECOND); diff --git a/hugegraph-client/src/main/java/org/apache/hugegraph/driver/GraphsManager.java b/hugegraph-client/src/main/java/org/apache/hugegraph/driver/GraphsManager.java index a3732aeaa..f00f1d9fa 100644 --- a/hugegraph-client/src/main/java/org/apache/hugegraph/driver/GraphsManager.java +++ b/hugegraph-client/src/main/java/org/apache/hugegraph/driver/GraphsManager.java @@ -143,7 +143,6 @@ public GraphReadMode readMode(String graph) { return this.graphsAPI.readMode(graph); } - public String clone(String graph, Map body) { return this.graphsAPI.clone(graph, body); } diff --git a/hugegraph-client/src/main/java/org/apache/hugegraph/driver/HugeClient.java b/hugegraph-client/src/main/java/org/apache/hugegraph/driver/HugeClient.java index ec7bcb95a..129f9b742 100644 --- a/hugegraph-client/src/main/java/org/apache/hugegraph/driver/HugeClient.java +++ b/hugegraph-client/src/main/java/org/apache/hugegraph/driver/HugeClient.java @@ -173,18 +173,10 @@ private void checkServerApiVersion() { // 0.81 equals to the {latest_api_version} +10 VersionUtil.check(apiVersion, "0.38", "0.81", "hugegraph-api in server"); this.client.apiVersion(apiVersion); - boolean supportGs = VersionUtil.gte(this.version.getCoreVersion(), "1.7"); + boolean supportGs = VersionUtil.gte(this.version.getCoreVersion(), "1.7.0"); this.client.setSupportGs(supportGs); } - public String getGraphSpaceName() { - return graphSpaceName; - } - - public String getGraphName() { - return graphName; - } - public GraphsManager graphs() { return this.graphs; } From 9157220b646a76a67cb83b78edf163956d379634 Mon Sep 17 00:00:00 2001 From: sadwitdastreetz Date: Mon, 27 Oct 2025 10:34:43 +0800 Subject: [PATCH 03/12] refactor(client): fixed wrong logics in different client & manager --- .../apache/hugegraph/api/graphs/GraphsAPI.java | 1 + .../org/apache/hugegraph/client/RestClient.java | 4 +++- .../apache/hugegraph/driver/GraphsManager.java | 16 ++++++++-------- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/hugegraph-client/src/main/java/org/apache/hugegraph/api/graphs/GraphsAPI.java b/hugegraph-client/src/main/java/org/apache/hugegraph/api/graphs/GraphsAPI.java index c377d7f39..4c66884aa 100644 --- a/hugegraph-client/src/main/java/org/apache/hugegraph/api/graphs/GraphsAPI.java +++ b/hugegraph-client/src/main/java/org/apache/hugegraph/api/graphs/GraphsAPI.java @@ -206,6 +206,7 @@ public void mode(String graph, GraphMode mode) { public void mode(String graphSpace, String graph, GraphMode mode) { // NOTE: Must provide id for PUT. If you use "graph/mode", "/" will // be encoded to "%2F". So use "mode" here, although inaccurate. + if (graphSpace == null) this.client.put(joinPath(this.path(), graphSpace, graph, MODE), null, mode); } diff --git a/hugegraph-client/src/main/java/org/apache/hugegraph/client/RestClient.java b/hugegraph-client/src/main/java/org/apache/hugegraph/client/RestClient.java index f7550bfd4..3ba82f9b7 100644 --- a/hugegraph-client/src/main/java/org/apache/hugegraph/client/RestClient.java +++ b/hugegraph-client/src/main/java/org/apache/hugegraph/client/RestClient.java @@ -19,6 +19,7 @@ import java.util.Map; +import org.apache.hugegraph.driver.VersionManager; import org.apache.hugegraph.exception.ServerException; import org.apache.hugegraph.rest.AbstractRestClient; import org.apache.hugegraph.rest.ClientException; @@ -39,6 +40,7 @@ public class RestClient extends AbstractRestClient { private static final int SECOND = 1000; + private final String version = new VersionManager(this).getCoreVersion();; static { SimpleModule module = new SimpleModule(); @@ -49,7 +51,7 @@ public class RestClient extends AbstractRestClient { private Version apiVersion = null; @Setter @Getter - private boolean supportGs = false; + private boolean supportGs = VersionUtil.gte(version, "1.7.0"); public RestClient(String url, String username, String password, int timeout) { super(url, username, password, timeout * SECOND); diff --git a/hugegraph-client/src/main/java/org/apache/hugegraph/driver/GraphsManager.java b/hugegraph-client/src/main/java/org/apache/hugegraph/driver/GraphsManager.java index f00f1d9fa..48a502eef 100644 --- a/hugegraph-client/src/main/java/org/apache/hugegraph/driver/GraphsManager.java +++ b/hugegraph-client/src/main/java/org/apache/hugegraph/driver/GraphsManager.java @@ -115,28 +115,28 @@ public void mode(String graph, GraphMode mode) { this.graphsAPI.mode(graph, mode); } - public void mode(String graph, String graphSpace, GraphMode mode) { - this.graphsAPI.mode(graph, graphSpace, mode); + public void mode(String graphSpace, String graph, GraphMode mode) { + this.graphsAPI.mode(graphSpace, graph, mode); } public GraphMode mode(String graph) { return this.graphsAPI.mode(graph); } - public GraphMode mode(String graph, String graphSpace) { - return this.graphsAPI.mode(graph, graphSpace); + public GraphMode mode(String graphSpace, String graph) { + return this.graphsAPI.mode(graphSpace, graph); } - public void readMode(String graph, String graphSpace, GraphReadMode readMode) { - this.graphsAPI.readMode(graph, graphSpace, readMode); + public void readMode(String graphSpace, String graph, GraphReadMode readMode) { + this.graphsAPI.readMode(graphSpace, graph, readMode); } public void readMode(String graph, GraphReadMode readMode) { this.graphsAPI.readMode(graph, readMode); } - public GraphReadMode readMode(String graph, String graphSpace) { - return this.graphsAPI.readMode(graph, graphSpace); + public GraphReadMode readMode(String graphSpace, String graph) { + return this.graphsAPI.readMode(graphSpace, graph); } public GraphReadMode readMode(String graph) { From 9101077d2280533ea834b0ce56b27c2b2c1ad9ed Mon Sep 17 00:00:00 2001 From: sadwitdastreetz Date: Mon, 27 Oct 2025 10:40:28 +0800 Subject: [PATCH 04/12] refactor(client): add null check for graphspace --- .../java/org/apache/hugegraph/api/graphs/GraphsAPI.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/hugegraph-client/src/main/java/org/apache/hugegraph/api/graphs/GraphsAPI.java b/hugegraph-client/src/main/java/org/apache/hugegraph/api/graphs/GraphsAPI.java index 4c66884aa..24b14a095 100644 --- a/hugegraph-client/src/main/java/org/apache/hugegraph/api/graphs/GraphsAPI.java +++ b/hugegraph-client/src/main/java/org/apache/hugegraph/api/graphs/GraphsAPI.java @@ -206,7 +206,10 @@ public void mode(String graph, GraphMode mode) { public void mode(String graphSpace, String graph, GraphMode mode) { // NOTE: Must provide id for PUT. If you use "graph/mode", "/" will // be encoded to "%2F". So use "mode" here, although inaccurate. - if (graphSpace == null) + if (graphSpace == null) { + mode(graph, mode); + return; + } this.client.put(joinPath(this.path(), graphSpace, graph, MODE), null, mode); } @@ -215,6 +218,10 @@ public void readMode(String graphSpace, String graph, GraphReadMode readMode) { // NOTE: Must provide id for PUT. If you use "graph/graph_read_mode", "/" // will be encoded to "%2F". So use "graph_read_mode" here, although // inaccurate. + if (graphSpace == null) { + readMode(graph, readMode); + return; + } this.client.put(joinPath(this.path(), graphSpace, graph, GRAPH_READ_MODE), null, readMode); } From da285acf5276692474a993533090b6ac53b936b8 Mon Sep 17 00:00:00 2001 From: sadwitdastreetz Date: Mon, 27 Oct 2025 19:16:44 +0800 Subject: [PATCH 05/12] Fix(client): fixed GraphAPI & wrong logic of setting GS in RestClient --- .../hugegraph/api/graphs/GraphsAPI.java | 37 ++++++++++--------- .../apache/hugegraph/client/RestClient.java | 7 ++-- 2 files changed, 23 insertions(+), 21 deletions(-) diff --git a/hugegraph-client/src/main/java/org/apache/hugegraph/api/graphs/GraphsAPI.java b/hugegraph-client/src/main/java/org/apache/hugegraph/api/graphs/GraphsAPI.java index 24b14a095..1ed8d068c 100644 --- a/hugegraph-client/src/main/java/org/apache/hugegraph/api/graphs/GraphsAPI.java +++ b/hugegraph-client/src/main/java/org/apache/hugegraph/api/graphs/GraphsAPI.java @@ -198,9 +198,7 @@ public Map reload() { } public void mode(String graph, GraphMode mode) { - // NOTE: Must provide id for PUT. If you use "graph/mode", "/" will - // be encoded to "%2F". So use "mode" here, although inaccurate. - this.client.put(joinPath(this.path(), graph, MODE), null, mode); + mode(null, graph, mode); } public void mode(String graphSpace, String graph, GraphMode mode) { @@ -213,6 +211,11 @@ public void mode(String graphSpace, String graph, GraphMode mode) { this.client.put(joinPath(this.path(), graphSpace, graph, MODE), null, mode); } + public void readMode(String graph, GraphReadMode readMode) { + readMode(null, graph, readMode); + } + + public void readMode(String graphSpace, String graph, GraphReadMode readMode) { this.client.checkApiVersion("0.59", "graph read mode"); // NOTE: Must provide id for PUT. If you use "graph/graph_read_mode", "/" @@ -225,15 +228,16 @@ public void readMode(String graphSpace, String graph, GraphReadMode readMode) { this.client.put(joinPath(this.path(), graphSpace, graph, GRAPH_READ_MODE), null, readMode); } - public void readMode(String graph, GraphReadMode readMode) { - this.client.checkApiVersion("0.59", "graph read mode"); - // NOTE: Must provide id for PUT. If you use "graph/graph_read_mode", "/" - // will be encoded to "%2F". So use "graph_read_mode" here, although - // inaccurate. - this.client.put(joinPath(this.path(), graph, GRAPH_READ_MODE), null, readMode); - } - - private > T getEnumMode(String graphSpace, String graph, + /** + * Get graph mode value from server response + * + * @param graphSpace the graph space name, null for non-graphspace mode + * @param graph the graph name + * @param modeKey the mode key in response (MODE or GRAPH_READ_MODE) + * @param enumClass the enum class type + * @return the mode enum value + */ + private > T getModeValue(String graphSpace, String graph, String modeKey, Class enumClass) { String path = (graphSpace != null) ? joinPath(this.path(), graphSpace, graph) @@ -257,21 +261,20 @@ private > T getEnumMode(String graphSpace, String graph, } public GraphMode mode(String graphSpace, String graph) { - return getEnumMode(graphSpace, graph, MODE, GraphMode.class); + return getModeValue(graphSpace, graph, MODE, GraphMode.class); } public GraphMode mode(String graph) { - return getEnumMode(null, graph, MODE, GraphMode.class); + return mode(null, graph); } public GraphReadMode readMode(String graphSpace, String graph) { this.client.checkApiVersion("0.59", "graph read mode"); - return getEnumMode(graphSpace, graph, GRAPH_READ_MODE, GraphReadMode.class); + return getModeValue(graphSpace, graph, GRAPH_READ_MODE, GraphReadMode.class); } public GraphReadMode readMode(String graph) { - this.client.checkApiVersion("0.59", "graph read mode"); - return getEnumMode(null, graph, GRAPH_READ_MODE, GraphReadMode.class); + return readMode(null, graph); } public String clone(String graph, Map body) { diff --git a/hugegraph-client/src/main/java/org/apache/hugegraph/client/RestClient.java b/hugegraph-client/src/main/java/org/apache/hugegraph/client/RestClient.java index 3ba82f9b7..7710f232b 100644 --- a/hugegraph-client/src/main/java/org/apache/hugegraph/client/RestClient.java +++ b/hugegraph-client/src/main/java/org/apache/hugegraph/client/RestClient.java @@ -40,7 +40,9 @@ public class RestClient extends AbstractRestClient { private static final int SECOND = 1000; - private final String version = new VersionManager(this).getCoreVersion();; + private String version; + @Setter + private boolean supportGs; static { SimpleModule module = new SimpleModule(); @@ -49,9 +51,6 @@ public class RestClient extends AbstractRestClient { } private Version apiVersion = null; - @Setter - @Getter - private boolean supportGs = VersionUtil.gte(version, "1.7.0"); public RestClient(String url, String username, String password, int timeout) { super(url, username, password, timeout * SECOND); From 7536ca55b70a20abc4fe59d4db75c60e1f09a8ef Mon Sep 17 00:00:00 2001 From: sadwitdastreetz Date: Mon, 27 Oct 2025 19:20:59 +0800 Subject: [PATCH 06/12] Fix(client): fixed missed Getter of setting GS in RestClient --- .../src/main/java/org/apache/hugegraph/client/RestClient.java | 1 + 1 file changed, 1 insertion(+) diff --git a/hugegraph-client/src/main/java/org/apache/hugegraph/client/RestClient.java b/hugegraph-client/src/main/java/org/apache/hugegraph/client/RestClient.java index 7710f232b..3c1ecd4fd 100644 --- a/hugegraph-client/src/main/java/org/apache/hugegraph/client/RestClient.java +++ b/hugegraph-client/src/main/java/org/apache/hugegraph/client/RestClient.java @@ -41,6 +41,7 @@ public class RestClient extends AbstractRestClient { private static final int SECOND = 1000; private String version; + @Getter @Setter private boolean supportGs; From 512b9c4ff9792aa160cfc82f954b8a92255c75d7 Mon Sep 17 00:00:00 2001 From: sadwitdastreetz Date: Mon, 27 Oct 2025 19:31:18 +0800 Subject: [PATCH 07/12] Fix(client): fixed graphsAPI --- .../main/java/org/apache/hugegraph/api/graphs/GraphsAPI.java | 4 ++-- .../src/main/java/org/apache/hugegraph/driver/HugeClient.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/hugegraph-client/src/main/java/org/apache/hugegraph/api/graphs/GraphsAPI.java b/hugegraph-client/src/main/java/org/apache/hugegraph/api/graphs/GraphsAPI.java index 1ed8d068c..53c8c3614 100644 --- a/hugegraph-client/src/main/java/org/apache/hugegraph/api/graphs/GraphsAPI.java +++ b/hugegraph-client/src/main/java/org/apache/hugegraph/api/graphs/GraphsAPI.java @@ -205,7 +205,7 @@ public void mode(String graphSpace, String graph, GraphMode mode) { // NOTE: Must provide id for PUT. If you use "graph/mode", "/" will // be encoded to "%2F". So use "mode" here, although inaccurate. if (graphSpace == null) { - mode(graph, mode); + this.client.put(joinPath(this.path(), graph, MODE), null, mode); return; } this.client.put(joinPath(this.path(), graphSpace, graph, MODE), null, mode); @@ -222,7 +222,7 @@ public void readMode(String graphSpace, String graph, GraphReadMode readMode) { // will be encoded to "%2F". So use "graph_read_mode" here, although // inaccurate. if (graphSpace == null) { - readMode(graph, readMode); + this.client.put(joinPath(this.path(), graph, MODE), null, readMode); return; } this.client.put(joinPath(this.path(), graphSpace, graph, GRAPH_READ_MODE), null, readMode); diff --git a/hugegraph-client/src/main/java/org/apache/hugegraph/driver/HugeClient.java b/hugegraph-client/src/main/java/org/apache/hugegraph/driver/HugeClient.java index 129f9b742..72a661db8 100644 --- a/hugegraph-client/src/main/java/org/apache/hugegraph/driver/HugeClient.java +++ b/hugegraph-client/src/main/java/org/apache/hugegraph/driver/HugeClient.java @@ -173,7 +173,7 @@ private void checkServerApiVersion() { // 0.81 equals to the {latest_api_version} +10 VersionUtil.check(apiVersion, "0.38", "0.81", "hugegraph-api in server"); this.client.apiVersion(apiVersion); - boolean supportGs = VersionUtil.gte(this.version.getCoreVersion(), "1.7.0"); + boolean supportGs = true; this.client.setSupportGs(supportGs); } From d8f4f2282f33870483d6e81c365ff8dfde079b6f Mon Sep 17 00:00:00 2001 From: sadwitdastreetz Date: Mon, 27 Oct 2025 19:31:49 +0800 Subject: [PATCH 08/12] Fix(client): fixed graphsAPI --- .../src/main/java/org/apache/hugegraph/driver/HugeClient.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hugegraph-client/src/main/java/org/apache/hugegraph/driver/HugeClient.java b/hugegraph-client/src/main/java/org/apache/hugegraph/driver/HugeClient.java index 72a661db8..129f9b742 100644 --- a/hugegraph-client/src/main/java/org/apache/hugegraph/driver/HugeClient.java +++ b/hugegraph-client/src/main/java/org/apache/hugegraph/driver/HugeClient.java @@ -173,7 +173,7 @@ private void checkServerApiVersion() { // 0.81 equals to the {latest_api_version} +10 VersionUtil.check(apiVersion, "0.38", "0.81", "hugegraph-api in server"); this.client.apiVersion(apiVersion); - boolean supportGs = true; + boolean supportGs = VersionUtil.gte(this.version.getCoreVersion(), "1.7.0"); this.client.setSupportGs(supportGs); } From 6c295de247a4f35810a91ca536f2aa3e4983cd8e Mon Sep 17 00:00:00 2001 From: sadwitdastreetz Date: Mon, 27 Oct 2025 19:41:44 +0800 Subject: [PATCH 09/12] Fix(client): fixed missed Gettter --- .../main/java/org/apache/hugegraph/driver/HugeClient.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/hugegraph-client/src/main/java/org/apache/hugegraph/driver/HugeClient.java b/hugegraph-client/src/main/java/org/apache/hugegraph/driver/HugeClient.java index 129f9b742..b208fdff8 100644 --- a/hugegraph-client/src/main/java/org/apache/hugegraph/driver/HugeClient.java +++ b/hugegraph-client/src/main/java/org/apache/hugegraph/driver/HugeClient.java @@ -19,6 +19,8 @@ import java.io.Closeable; +import lombok.Getter; + import org.apache.hugegraph.client.RestClient; import org.apache.hugegraph.rest.ClientException; import org.apache.hugegraph.rest.RestClientConfig; @@ -42,8 +44,11 @@ public class HugeClient implements Closeable { ClientVersion.check(); } + @Getter protected String graphSpaceName; + @Getter protected String graphName; + private final boolean borrowedClient; private final RestClient client; private VersionManager version; From 587c6dbf106f9a16c264a67133403b5231bb21b1 Mon Sep 17 00:00:00 2001 From: sadwitdastreetz Date: Mon, 27 Oct 2025 21:28:29 +0800 Subject: [PATCH 10/12] Fix(client): fixed wrong formats and mode --- .../main/java/org/apache/hugegraph/api/graphs/GraphsAPI.java | 2 +- .../src/main/java/org/apache/hugegraph/client/RestClient.java | 3 +-- .../main/java/org/apache/hugegraph/driver/GraphsManager.java | 1 - 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/hugegraph-client/src/main/java/org/apache/hugegraph/api/graphs/GraphsAPI.java b/hugegraph-client/src/main/java/org/apache/hugegraph/api/graphs/GraphsAPI.java index 53c8c3614..5509f8637 100644 --- a/hugegraph-client/src/main/java/org/apache/hugegraph/api/graphs/GraphsAPI.java +++ b/hugegraph-client/src/main/java/org/apache/hugegraph/api/graphs/GraphsAPI.java @@ -222,7 +222,7 @@ public void readMode(String graphSpace, String graph, GraphReadMode readMode) { // will be encoded to "%2F". So use "graph_read_mode" here, although // inaccurate. if (graphSpace == null) { - this.client.put(joinPath(this.path(), graph, MODE), null, readMode); + this.client.put(joinPath(this.path(), graph, GRAPH_READ_MODE), null, readMode); return; } this.client.put(joinPath(this.path(), graphSpace, graph, GRAPH_READ_MODE), null, readMode); diff --git a/hugegraph-client/src/main/java/org/apache/hugegraph/client/RestClient.java b/hugegraph-client/src/main/java/org/apache/hugegraph/client/RestClient.java index 3c1ecd4fd..1f2e24f0a 100644 --- a/hugegraph-client/src/main/java/org/apache/hugegraph/client/RestClient.java +++ b/hugegraph-client/src/main/java/org/apache/hugegraph/client/RestClient.java @@ -44,6 +44,7 @@ public class RestClient extends AbstractRestClient { @Getter @Setter private boolean supportGs; + private Version apiVersion = null; static { SimpleModule module = new SimpleModule(); @@ -51,8 +52,6 @@ public class RestClient extends AbstractRestClient { RestResult.registerModule(module); } - private Version apiVersion = null; - public RestClient(String url, String username, String password, int timeout) { super(url, username, password, timeout * SECOND); } diff --git a/hugegraph-client/src/main/java/org/apache/hugegraph/driver/GraphsManager.java b/hugegraph-client/src/main/java/org/apache/hugegraph/driver/GraphsManager.java index 48a502eef..4ec0dd6c1 100644 --- a/hugegraph-client/src/main/java/org/apache/hugegraph/driver/GraphsManager.java +++ b/hugegraph-client/src/main/java/org/apache/hugegraph/driver/GraphsManager.java @@ -146,5 +146,4 @@ public GraphReadMode readMode(String graph) { public String clone(String graph, Map body) { return this.graphsAPI.clone(graph, body); } - } From 62ae4a3ca2e0ea88bb88f589b8dfbf894c3f220d Mon Sep 17 00:00:00 2001 From: sadwitdastreetz Date: Mon, 27 Oct 2025 23:50:10 +0800 Subject: [PATCH 11/12] Fix(client): fixed clearGraph apis --- .../org/apache/hugegraph/api/graphs/GraphsAPI.java | 13 +++++++++++-- .../org/apache/hugegraph/driver/GraphsManager.java | 4 ++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/hugegraph-client/src/main/java/org/apache/hugegraph/api/graphs/GraphsAPI.java b/hugegraph-client/src/main/java/org/apache/hugegraph/api/graphs/GraphsAPI.java index 5509f8637..382862486 100644 --- a/hugegraph-client/src/main/java/org/apache/hugegraph/api/graphs/GraphsAPI.java +++ b/hugegraph-client/src/main/java/org/apache/hugegraph/api/graphs/GraphsAPI.java @@ -136,8 +136,17 @@ public void clear(String graph, boolean clearSchema) { } public void clear(String graph, String message) { - this.client.delete(joinPath(this.path(), graph, CLEAR), - ImmutableMap.of(CONFIRM_MESSAGE, message)); + clear(null, graph, message); + } + + public void clear(String graphSpace, String graph, String message) { + if (graphSpace == null) { + this.client.delete(joinPath(this.path(), graph, CLEAR), + ImmutableMap.of(CONFIRM_MESSAGE, message)); + } else { + this.client.delete(joinPath(this.path(), graphSpace, graph, CLEAR), + ImmutableMap.of(CONFIRM_MESSAGE, message)); + } } public Map update(String name, String nickname) { diff --git a/hugegraph-client/src/main/java/org/apache/hugegraph/driver/GraphsManager.java b/hugegraph-client/src/main/java/org/apache/hugegraph/driver/GraphsManager.java index 4ec0dd6c1..4f1fffe8b 100644 --- a/hugegraph-client/src/main/java/org/apache/hugegraph/driver/GraphsManager.java +++ b/hugegraph-client/src/main/java/org/apache/hugegraph/driver/GraphsManager.java @@ -94,6 +94,10 @@ public void clearGraph(String graph, String message) { this.graphsAPI.clear(graph, message); } + public void clearGraph(String graphSpace, String graph, String message) { + this.graphsAPI.clear(graphSpace, graph, message); + } + public void update(String graph, String nickname) { this.graphsAPI.update(graph, nickname); } From 6da9a5e68866766ba2820818d0b32772059989a7 Mon Sep 17 00:00:00 2001 From: imbajin Date: Tue, 28 Oct 2025 12:28:07 +0800 Subject: [PATCH 12/12] Improve documentation for graph mode enums Enhanced Javadoc comments for GraphMode and GraphReadMode enums to clarify their operational contexts, permissions, and use cases. Refactored GraphsAPI.clear() for cleaner path selection logic. --- .../hugegraph/api/graphs/GraphsAPI.java | 11 ++-- .../structure/constant/GraphMode.java | 54 ++++++++++++++----- .../structure/constant/GraphReadMode.java | 23 ++++++++ 3 files changed, 67 insertions(+), 21 deletions(-) diff --git a/hugegraph-client/src/main/java/org/apache/hugegraph/api/graphs/GraphsAPI.java b/hugegraph-client/src/main/java/org/apache/hugegraph/api/graphs/GraphsAPI.java index 382862486..0c9eb741a 100644 --- a/hugegraph-client/src/main/java/org/apache/hugegraph/api/graphs/GraphsAPI.java +++ b/hugegraph-client/src/main/java/org/apache/hugegraph/api/graphs/GraphsAPI.java @@ -140,13 +140,10 @@ public void clear(String graph, String message) { } public void clear(String graphSpace, String graph, String message) { - if (graphSpace == null) { - this.client.delete(joinPath(this.path(), graph, CLEAR), - ImmutableMap.of(CONFIRM_MESSAGE, message)); - } else { - this.client.delete(joinPath(this.path(), graphSpace, graph, CLEAR), - ImmutableMap.of(CONFIRM_MESSAGE, message)); - } + String path = (graphSpace == null) + ? joinPath(this.path(), graph, CLEAR) + : joinPath(this.path(), graphSpace, graph, CLEAR); + this.client.delete(path, ImmutableMap.of(CONFIRM_MESSAGE, message)); } public Map update(String name, String nickname) { diff --git a/hugegraph-client/src/main/java/org/apache/hugegraph/structure/constant/GraphMode.java b/hugegraph-client/src/main/java/org/apache/hugegraph/structure/constant/GraphMode.java index 7a8126b46..3ef25ebcb 100644 --- a/hugegraph-client/src/main/java/org/apache/hugegraph/structure/constant/GraphMode.java +++ b/hugegraph-client/src/main/java/org/apache/hugegraph/structure/constant/GraphMode.java @@ -17,31 +17,45 @@ package org.apache.hugegraph.structure.constant; +/** + * GraphMode defines the operational modes of a HugeGraph instance. + * Different modes have different permissions for schema and vertex ID creation. + */ public enum GraphMode { - /* - * None mode is regular mode - * 1. Not allowed to create schema with specified id - * 2. Not support create vertex with id for AUTOMATIC id strategy + /** + * NONE mode is the default regular mode for normal graph operations. + * Restrictions: + * 1. Not allowed to create schema with specified ID + * 2. Not allowed to create vertex with custom ID for AUTOMATIC ID strategy + * Use case: Daily graph database operations */ NONE(1, "none"), - /* - * Restoring mode is used to restore schema and graph data to an new graph. - * 1. Support create schema with specified id - * 2. Support create vertex with id for AUTOMATIC id strategy + /** + * RESTORING mode is used to restore schema and graph data to a new graph. + * This mode allows full control over IDs during restoration. + * Permissions: + * 1. Allowed to create schema with specified ID + * 2. Allowed to create vertex with custom ID for AUTOMATIC ID strategy + * Use case: Database backup recovery, graph migration */ RESTORING(2, "restoring"), - /* - * MERGING mode is used to merge schema and graph data to an existing graph. - * 1. Not allowed to create schema with specified id - * 2. Support create vertex with id for AUTOMATIC id strategy + /** + * MERGING mode is used to merge schema and graph data into an existing graph. + * This mode allows vertex ID control but not schema ID control to avoid conflicts. + * Permissions: + * 1. Not allowed to create schema with specified ID (to prevent conflicts) + * 2. Allowed to create vertex with custom ID for AUTOMATIC ID strategy + * Use case: Data merging, incremental data import */ MERGING(3, "merging"), - /* - * LOADING mode used to load data via hugegraph-loader. + /** + * LOADING mode is used for bulk data loading via hugegraph-loader. + * This mode is optimized for high-throughput data ingestion. + * Use case: Bulk data import operations */ LOADING(4, "loading"); @@ -62,10 +76,22 @@ public String string() { return this.name; } + /** + * Check if the graph is in maintenance mode (RESTORING or MERGING). + * In maintenance mode, the graph allows creating vertices with custom IDs. + * + * @return true if mode is RESTORING or MERGING + */ public boolean maintaining() { return this == RESTORING || this == MERGING; } + /** + * Check if the graph is in loading mode. + * Loading mode is optimized for bulk data import operations. + * + * @return true if mode is LOADING + */ public boolean loading() { return this == LOADING; } diff --git a/hugegraph-client/src/main/java/org/apache/hugegraph/structure/constant/GraphReadMode.java b/hugegraph-client/src/main/java/org/apache/hugegraph/structure/constant/GraphReadMode.java index 57dcfbcae..55e2de0af 100644 --- a/hugegraph-client/src/main/java/org/apache/hugegraph/structure/constant/GraphReadMode.java +++ b/hugegraph-client/src/main/java/org/apache/hugegraph/structure/constant/GraphReadMode.java @@ -17,12 +17,30 @@ package org.apache.hugegraph.structure.constant; +/** + * GraphReadMode defines the read modes for querying graph data. + * This determines which type of data (OLTP/OLAP) should be included in query results. + */ public enum GraphReadMode { + /** + * ALL mode returns both OLTP and OLAP data. + * Use case: When you need complete data from both transactional and analytical storage + */ ALL(1, "all"), + /** + * OLTP_ONLY mode returns only Online Transaction Processing data. + * OLTP data is optimized for real-time queries and low-latency transactions. + * Use case: Real-time queries, transactional operations + */ OLTP_ONLY(2, "oltp_only"), + /** + * OLAP_ONLY mode returns only Online Analytical Processing data. + * OLAP data is optimized for complex analytical queries and large-scale computations. + * Use case: Big data analytics, graph algorithms, complex queries + */ OLAP_ONLY(3, "olap_only"); private final byte code; @@ -42,6 +60,11 @@ public String string() { return this.name; } + /** + * Check if this mode includes OLAP data in query results. + * + * @return true if mode is ALL or OLAP_ONLY + */ public boolean showOlap() { return this == ALL || this == OLAP_ONLY; }