From 5cbe8feb89507b0fad1de9996fcd34a1c5935910 Mon Sep 17 00:00:00 2001 From: imbajin Date: Mon, 24 May 2021 21:06:05 +0800 Subject: [PATCH 1/6] refact: remove source vertex from kout algorithm also adapt test in client --- .../com/baidu/hugegraph/traversal/algorithm/KoutTraverser.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/hugegraph-core/src/main/java/com/baidu/hugegraph/traversal/algorithm/KoutTraverser.java b/hugegraph-core/src/main/java/com/baidu/hugegraph/traversal/algorithm/KoutTraverser.java index a6fa743dd6..e5b5b57a04 100644 --- a/hugegraph-core/src/main/java/com/baidu/hugegraph/traversal/algorithm/KoutTraverser.java +++ b/hugegraph-core/src/main/java/com/baidu/hugegraph/traversal/algorithm/KoutTraverser.java @@ -121,9 +121,7 @@ public Set customizedKout(Id source, EdgeStep step, int maxDepth, Set all = newSet(single); Node sourceV = new KNode(source, null); - latest.add(sourceV); - all.add(sourceV); int depth = maxDepth; long remaining = capacity == NO_LIMIT ? From c8417ccb0acf1dba068223995cc9556f0c8424c7 Mon Sep 17 00:00:00 2001 From: imbajin Date: Tue, 25 May 2021 16:50:34 +0800 Subject: [PATCH 2/6] refact: unify 'degree ' error info & remove source from kneighbor/kout result --- .../api/traversers/FusiformSimilarityAPI.java | 4 ++-- .../hugegraph/api/traversers/PersonalRankAPI.java | 4 ++-- .../hugegraph/traversal/algorithm/HugeTraverser.java | 12 +++++++----- .../traversal/algorithm/KneighborTraverser.java | 2 +- .../hugegraph/traversal/algorithm/KoutTraverser.java | 6 ++++-- .../traversal/algorithm/NeighborRankTraverser.java | 3 ++- .../hugegraph/traversal/algorithm/OltpTraverser.java | 8 ++++---- .../traversal/algorithm/steps/EdgeStep.java | 2 +- 8 files changed, 23 insertions(+), 18 deletions(-) diff --git a/hugegraph-api/src/main/java/com/baidu/hugegraph/api/traversers/FusiformSimilarityAPI.java b/hugegraph-api/src/main/java/com/baidu/hugegraph/api/traversers/FusiformSimilarityAPI.java index 2bfd93421f..de7d961be4 100644 --- a/hugegraph-api/src/main/java/com/baidu/hugegraph/api/traversers/FusiformSimilarityAPI.java +++ b/hugegraph-api/src/main/java/com/baidu/hugegraph/api/traversers/FusiformSimilarityAPI.java @@ -76,8 +76,8 @@ public String post(@Context GraphManager manager, "The min neighbor count must be > 0, but got: %s", request.minNeighbors); E.checkArgument(request.maxDegree > 0L || request.maxDegree == NO_LIMIT, - "The max_degree of request must be > 0, but got: %s", - request.maxDegree); + "The max_degree of request must be > 0 or == -1, " + + "but got: %s", request.maxDegree); E.checkArgument(request.alpha > 0 && request.alpha <= 1.0, "The alpha of request must be in range (0, 1], " + "but got '%s'", request.alpha); diff --git a/hugegraph-api/src/main/java/com/baidu/hugegraph/api/traversers/PersonalRankAPI.java b/hugegraph-api/src/main/java/com/baidu/hugegraph/api/traversers/PersonalRankAPI.java index 98e1e54c36..5180bc30af 100644 --- a/hugegraph-api/src/main/java/com/baidu/hugegraph/api/traversers/PersonalRankAPI.java +++ b/hugegraph-api/src/main/java/com/baidu/hugegraph/api/traversers/PersonalRankAPI.java @@ -69,8 +69,8 @@ public String personalRank(@Context GraphManager manager, "The alpha of rank request must be in range (0, 1], " + "but got '%s'", request.alpha); E.checkArgument(request.maxDegree > 0L || request.maxDegree == NO_LIMIT, - "The max_degree of rank request must be > 0, " + - "but got: %s", request.maxDegree); + "The max_degree of rank request must be > 0 " + + "or == -1, but got: %s", request.maxDegree); E.checkArgument(request.limit > 0L || request.limit == NO_LIMIT, "The limit of rank request must be > 0, but got: %s", request.limit); diff --git a/hugegraph-core/src/main/java/com/baidu/hugegraph/traversal/algorithm/HugeTraverser.java b/hugegraph-core/src/main/java/com/baidu/hugegraph/traversal/algorithm/HugeTraverser.java index ec1fb3ad1b..0858277ada 100644 --- a/hugegraph-core/src/main/java/com/baidu/hugegraph/traversal/algorithm/HugeTraverser.java +++ b/hugegraph-core/src/main/java/com/baidu/hugegraph/traversal/algorithm/HugeTraverser.java @@ -141,16 +141,18 @@ protected Set adjacentVertices(Id source, EdgeStep step) { return neighbors; } - protected Set adjacentVertices(Set vertices, EdgeStep step, - Set excluded, long remaining) { + protected Set adjacentVertices(Id start, Set vertices, + EdgeStep step, Set excluded, + long remaining) { Set neighbors = newSet(); for (Node source : vertices) { Iterator edges = this.edgesOfVertex(source.id(), step); while (edges.hasNext()) { Id target = ((HugeEdge) edges.next()).id().otherVertexId(); KNode kNode = new KNode(target, (KNode) source); - if ((excluded != null && excluded.contains(kNode)) || - neighbors.contains(kNode)) { + boolean exist = (excluded != null && excluded.contains(kNode)); + if (exist || neighbors.contains(kNode) || + start.equals(kNode.id())) { continue; } neighbors.add(kNode); @@ -367,7 +369,7 @@ public static void checkSkipDegree(long skipDegree, long degree, Query.DEFAULT_CAPACITY, skipDegree); if (capacity != NO_LIMIT) { E.checkArgument(degree != NO_LIMIT && degree < capacity, - "The degree must be < capacity"); + "The max degree must be < capacity"); E.checkArgument(skipDegree < capacity, "The skipped degree must be < capacity"); } diff --git a/hugegraph-core/src/main/java/com/baidu/hugegraph/traversal/algorithm/KneighborTraverser.java b/hugegraph-core/src/main/java/com/baidu/hugegraph/traversal/algorithm/KneighborTraverser.java index bd306bf4df..189394ec12 100644 --- a/hugegraph-core/src/main/java/com/baidu/hugegraph/traversal/algorithm/KneighborTraverser.java +++ b/hugegraph-core/src/main/java/com/baidu/hugegraph/traversal/algorithm/KneighborTraverser.java @@ -89,7 +89,7 @@ public Set customizedKneighbor(Id source, EdgeStep step, int maxDepth, while (maxDepth-- > 0) { long remaining = limit == NO_LIMIT ? NO_LIMIT : limit - all.size(); - latest = this.adjacentVertices(latest, step, all, + latest = this.adjacentVertices(source, latest, step, all, remaining, single); int size = all.size() + latest.size(); if (limit != NO_LIMIT && size >= limit) { diff --git a/hugegraph-core/src/main/java/com/baidu/hugegraph/traversal/algorithm/KoutTraverser.java b/hugegraph-core/src/main/java/com/baidu/hugegraph/traversal/algorithm/KoutTraverser.java index e5b5b57a04..f7a2a276f0 100644 --- a/hugegraph-core/src/main/java/com/baidu/hugegraph/traversal/algorithm/KoutTraverser.java +++ b/hugegraph-core/src/main/java/com/baidu/hugegraph/traversal/algorithm/KoutTraverser.java @@ -121,18 +121,20 @@ public Set customizedKout(Id source, EdgeStep step, int maxDepth, Set all = newSet(single); Node sourceV = new KNode(source, null); + latest.add(sourceV); + all.add(sourceV); int depth = maxDepth; long remaining = capacity == NO_LIMIT ? NO_LIMIT : capacity - latest.size(); while (depth-- > 0) { if (nearest) { - latest = this.adjacentVertices(latest, step, all, + latest = this.adjacentVertices(source, latest, step, all, remaining, single); all.addAll(latest); } else { - latest = this.adjacentVertices(latest, step, null, + latest = this.adjacentVertices(source, latest, step, null, remaining, single); } if (capacity != NO_LIMIT) { diff --git a/hugegraph-core/src/main/java/com/baidu/hugegraph/traversal/algorithm/NeighborRankTraverser.java b/hugegraph-core/src/main/java/com/baidu/hugegraph/traversal/algorithm/NeighborRankTraverser.java index 6433786717..339343e844 100644 --- a/hugegraph-core/src/main/java/com/baidu/hugegraph/traversal/algorithm/NeighborRankTraverser.java +++ b/hugegraph-core/src/main/java/com/baidu/hugegraph/traversal/algorithm/NeighborRankTraverser.java @@ -282,7 +282,8 @@ public void add(Node node) { public long degree() { E.checkArgument(this.degree > 0, - "The degree must be > 0, but got %s", this.degree); + "The max degree must be > 0, but got %s", + this.degree); return this.degree; } diff --git a/hugegraph-core/src/main/java/com/baidu/hugegraph/traversal/algorithm/OltpTraverser.java b/hugegraph-core/src/main/java/com/baidu/hugegraph/traversal/algorithm/OltpTraverser.java index 66135e7293..8dcd9909c7 100644 --- a/hugegraph-core/src/main/java/com/baidu/hugegraph/traversal/algorithm/OltpTraverser.java +++ b/hugegraph-core/src/main/java/com/baidu/hugegraph/traversal/algorithm/OltpTraverser.java @@ -81,11 +81,11 @@ public static void destroy() { } } - protected Set adjacentVertices(Set latest, EdgeStep step, - Set all, long remaining, - boolean single) { + protected Set adjacentVertices(Id source, Set latest, + EdgeStep step, Set all, + long remaining, boolean single) { if (single) { - return this.adjacentVertices(latest, step, all, remaining); + return this.adjacentVertices(source, latest, step, all, remaining); } else { AtomicLong remain = new AtomicLong(remaining); return this.adjacentVertices(latest, step, all, remain); diff --git a/hugegraph-core/src/main/java/com/baidu/hugegraph/traversal/algorithm/steps/EdgeStep.java b/hugegraph-core/src/main/java/com/baidu/hugegraph/traversal/algorithm/steps/EdgeStep.java index 6a302d456f..b1d7ad1dad 100644 --- a/hugegraph-core/src/main/java/com/baidu/hugegraph/traversal/algorithm/steps/EdgeStep.java +++ b/hugegraph-core/src/main/java/com/baidu/hugegraph/traversal/algorithm/steps/EdgeStep.java @@ -73,7 +73,7 @@ public EdgeStep(HugeGraph g, Directions direction, List labels, Map properties, long degree, long skipDegree) { E.checkArgument(degree == NO_LIMIT || degree > 0L, - "The degree must be > 0 or == -1, but got: %s", + "The max degree must be > 0 or == -1, but got: %s", degree); HugeTraverser.checkSkipDegree(skipDegree, degree, HugeTraverser.NO_LIMIT); From b3aa6d60b060dc46f85b9e3c5b4cacdb00c7dae5 Mon Sep 17 00:00:00 2001 From: imbajin Date: Tue, 25 May 2021 23:41:18 +0800 Subject: [PATCH 3/6] rename param --- .../baidu/hugegraph/traversal/algorithm/HugeTraverser.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/hugegraph-core/src/main/java/com/baidu/hugegraph/traversal/algorithm/HugeTraverser.java b/hugegraph-core/src/main/java/com/baidu/hugegraph/traversal/algorithm/HugeTraverser.java index 0858277ada..0c85111d6c 100644 --- a/hugegraph-core/src/main/java/com/baidu/hugegraph/traversal/algorithm/HugeTraverser.java +++ b/hugegraph-core/src/main/java/com/baidu/hugegraph/traversal/algorithm/HugeTraverser.java @@ -150,8 +150,9 @@ protected Set adjacentVertices(Id start, Set vertices, while (edges.hasNext()) { Id target = ((HugeEdge) edges.next()).id().otherVertexId(); KNode kNode = new KNode(target, (KNode) source); - boolean exist = (excluded != null && excluded.contains(kNode)); - if (exist || neighbors.contains(kNode) || + boolean matchExcluded = (excluded != null && + excluded.contains(kNode)); + if (matchExcluded || neighbors.contains(kNode) || start.equals(kNode.id())) { continue; } From 04df83dc078b0e419fc0538704fe623edc81c6a7 Mon Sep 17 00:00:00 2001 From: imbajin Date: Thu, 27 May 2021 15:47:08 +0800 Subject: [PATCH 4/6] unify degree name --- .../java/com/baidu/hugegraph/api/traversers/CountAPI.java | 3 ++- .../hugegraph/api/traversers/FusiformSimilarityAPI.java | 2 +- .../com/baidu/hugegraph/api/traversers/PersonalRankAPI.java | 6 +++--- .../traversal/algorithm/steps/WeightedEdgeStep.java | 4 ++-- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/hugegraph-api/src/main/java/com/baidu/hugegraph/api/traversers/CountAPI.java b/hugegraph-api/src/main/java/com/baidu/hugegraph/api/traversers/CountAPI.java index ffdfae072d..6690579b9a 100644 --- a/hugegraph-api/src/main/java/com/baidu/hugegraph/api/traversers/CountAPI.java +++ b/hugegraph-api/src/main/java/com/baidu/hugegraph/api/traversers/CountAPI.java @@ -75,7 +75,8 @@ public String post(@Context GraphManager manager, "The steps of request can't be null or empty"); E.checkArgumentNotNull(request.dedupSize == NO_LIMIT || request.dedupSize >= 0L, - "The dedupSize of request must >= 0, but got '%s'", + "The dedupSize of request " + + "must >= 0 or == -1, but got '%s'", request.dedupSize); HugeGraph g = graph(manager, graph); diff --git a/hugegraph-api/src/main/java/com/baidu/hugegraph/api/traversers/FusiformSimilarityAPI.java b/hugegraph-api/src/main/java/com/baidu/hugegraph/api/traversers/FusiformSimilarityAPI.java index de7d961be4..f4c52a2379 100644 --- a/hugegraph-api/src/main/java/com/baidu/hugegraph/api/traversers/FusiformSimilarityAPI.java +++ b/hugegraph-api/src/main/java/com/baidu/hugegraph/api/traversers/FusiformSimilarityAPI.java @@ -76,7 +76,7 @@ public String post(@Context GraphManager manager, "The min neighbor count must be > 0, but got: %s", request.minNeighbors); E.checkArgument(request.maxDegree > 0L || request.maxDegree == NO_LIMIT, - "The max_degree of request must be > 0 or == -1, " + + "The max degree of request must be > 0 or == -1, " + "but got: %s", request.maxDegree); E.checkArgument(request.alpha > 0 && request.alpha <= 1.0, "The alpha of request must be in range (0, 1], " + diff --git a/hugegraph-api/src/main/java/com/baidu/hugegraph/api/traversers/PersonalRankAPI.java b/hugegraph-api/src/main/java/com/baidu/hugegraph/api/traversers/PersonalRankAPI.java index 5180bc30af..563d08ca5a 100644 --- a/hugegraph-api/src/main/java/com/baidu/hugegraph/api/traversers/PersonalRankAPI.java +++ b/hugegraph-api/src/main/java/com/baidu/hugegraph/api/traversers/PersonalRankAPI.java @@ -69,11 +69,11 @@ public String personalRank(@Context GraphManager manager, "The alpha of rank request must be in range (0, 1], " + "but got '%s'", request.alpha); E.checkArgument(request.maxDegree > 0L || request.maxDegree == NO_LIMIT, - "The max_degree of rank request must be > 0 " + + "The max degree of rank request must be > 0 " + "or == -1, but got: %s", request.maxDegree); E.checkArgument(request.limit > 0L || request.limit == NO_LIMIT, - "The limit of rank request must be > 0, but got: %s", - request.limit); + "The limit of rank request must be > 0 or == -1, " + + "but got: %s", request.limit); E.checkArgument(request.maxDepth > 0L && request.maxDepth <= Long.parseLong(DEFAULT_MAX_DEPTH), "The max depth of rank request must be " + diff --git a/hugegraph-core/src/main/java/com/baidu/hugegraph/traversal/algorithm/steps/WeightedEdgeStep.java b/hugegraph-core/src/main/java/com/baidu/hugegraph/traversal/algorithm/steps/WeightedEdgeStep.java index 91c3d84eb2..09218dee26 100644 --- a/hugegraph-core/src/main/java/com/baidu/hugegraph/traversal/algorithm/steps/WeightedEdgeStep.java +++ b/hugegraph-core/src/main/java/com/baidu/hugegraph/traversal/algorithm/steps/WeightedEdgeStep.java @@ -71,8 +71,8 @@ public WeightedEdgeStep(HugeGraph g, Directions direction, List labels, "The sample must be > 0 or == -1, but got: %s", sample); E.checkArgument(maxDegree == NO_LIMIT || maxDegree >= sample, - "The max_degree must be greater than or equal to " + - "sample, but got max_degree %s and sample %s", + "The max degree must be greater than or equal to " + + "sample, but got max degree %s and sample %s", maxDegree, sample); this.edgeStep = new EdgeStep(g, direction, labels, properties, From 22916694b60c1fa36f711f736b1e246657fb3e85 Mon Sep 17 00:00:00 2001 From: imbajin Date: Thu, 27 May 2021 16:15:04 +0800 Subject: [PATCH 5/6] Update CountAPI.java --- .../main/java/com/baidu/hugegraph/api/traversers/CountAPI.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hugegraph-api/src/main/java/com/baidu/hugegraph/api/traversers/CountAPI.java b/hugegraph-api/src/main/java/com/baidu/hugegraph/api/traversers/CountAPI.java index 6690579b9a..9fed299746 100644 --- a/hugegraph-api/src/main/java/com/baidu/hugegraph/api/traversers/CountAPI.java +++ b/hugegraph-api/src/main/java/com/baidu/hugegraph/api/traversers/CountAPI.java @@ -75,7 +75,7 @@ public String post(@Context GraphManager manager, "The steps of request can't be null or empty"); E.checkArgumentNotNull(request.dedupSize == NO_LIMIT || request.dedupSize >= 0L, - "The dedupSize of request " + + "The dedup size of request " + "must >= 0 or == -1, but got '%s'", request.dedupSize); From 1d7bb93fa4da6999057a362983d13a19f3467376 Mon Sep 17 00:00:00 2001 From: imbajin Date: Thu, 27 May 2021 16:34:38 +0800 Subject: [PATCH 6/6] typo param --- .../main/java/com/baidu/hugegraph/api/traversers/CountAPI.java | 2 +- .../src/main/java/com/baidu/hugegraph/task/TaskCallable.java | 2 +- .../hugegraph/backend/store/rocksdb/RocksDBStdSessions.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/hugegraph-api/src/main/java/com/baidu/hugegraph/api/traversers/CountAPI.java b/hugegraph-api/src/main/java/com/baidu/hugegraph/api/traversers/CountAPI.java index 9fed299746..43eaaada71 100644 --- a/hugegraph-api/src/main/java/com/baidu/hugegraph/api/traversers/CountAPI.java +++ b/hugegraph-api/src/main/java/com/baidu/hugegraph/api/traversers/CountAPI.java @@ -76,7 +76,7 @@ public String post(@Context GraphManager manager, E.checkArgumentNotNull(request.dedupSize == NO_LIMIT || request.dedupSize >= 0L, "The dedup size of request " + - "must >= 0 or == -1, but got '%s'", + "must >= 0 or == -1, but got: '%s'", request.dedupSize); HugeGraph g = graph(manager, graph); diff --git a/hugegraph-core/src/main/java/com/baidu/hugegraph/task/TaskCallable.java b/hugegraph-core/src/main/java/com/baidu/hugegraph/task/TaskCallable.java index cc37a34327..9b1159d709 100644 --- a/hugegraph-core/src/main/java/com/baidu/hugegraph/task/TaskCallable.java +++ b/hugegraph-core/src/main/java/com/baidu/hugegraph/task/TaskCallable.java @@ -82,7 +82,7 @@ protected void closeTx() { public void setMinSaveInterval(long seconds) { E.checkArgument(seconds > 0, - "Must set interval > 0, bug got '%s'", seconds); + "Must set interval > 0, but got '%s'", seconds); this.saveInterval = seconds * 1000L; } diff --git a/hugegraph-rocksdb/src/main/java/com/baidu/hugegraph/backend/store/rocksdb/RocksDBStdSessions.java b/hugegraph-rocksdb/src/main/java/com/baidu/hugegraph/backend/store/rocksdb/RocksDBStdSessions.java index f12ba4c127..3acd0593e0 100644 --- a/hugegraph-rocksdb/src/main/java/com/baidu/hugegraph/backend/store/rocksdb/RocksDBStdSessions.java +++ b/hugegraph-rocksdb/src/main/java/com/baidu/hugegraph/backend/store/rocksdb/RocksDBStdSessions.java @@ -559,7 +559,7 @@ public static void initOptions(HugeConfig conf, E.checkArgument(compressions.isEmpty() || compressions.size() == numLevels, "Elements number of '%s' must be 0 or " + - "be the same as '%s', bug got %s != %s", + "be the same as '%s', but got %s != %s", RocksDBOptions.LEVELS_COMPRESSIONS.name(), RocksDBOptions.NUM_LEVELS.name(), compressions.size(), numLevels);