Skip to content

Commit a2fd1f8

Browse files
Introduce a graph store validator with multiple ones for convenience
1 parent e43ebc8 commit a2fd1f8

File tree

9 files changed

+142
-253
lines changed

9 files changed

+142
-253
lines changed

algorithms-compute-business-facade/src/main/java/org/neo4j/gds/community/CommunityComputeBusinessFacade.java

Lines changed: 23 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,11 @@
3333
import org.neo4j.gds.community.validation.ApproxMaxKCutValidation;
3434
import org.neo4j.gds.community.validation.SpeakerListenerLPAGraphStoreValidation;
3535
import org.neo4j.gds.community.validation.TriangleCountGraphStoreValidation;
36-
import org.neo4j.gds.community.validation.UndirectedAndSeedableGraphStoreValidation;
3736
import org.neo4j.gds.conductance.ConductanceParameters;
3837
import org.neo4j.gds.conductance.ConductanceResult;
3938
import org.neo4j.gds.core.JobId;
4039
import org.neo4j.gds.core.loading.GraphStoreCatalogService;
40+
import org.neo4j.gds.core.loading.validation.CompoundGraphStoreValidationsBuilder;
4141
import org.neo4j.gds.core.loading.validation.NoAlgorithmValidation;
4242
import org.neo4j.gds.core.loading.validation.NodePropertyAnyExistsGraphStoreValidation;
4343
import org.neo4j.gds.core.loading.validation.NodePropertyTypeGraphStoreValidation;
@@ -133,7 +133,6 @@ public <TR> CompletableFuture<TR> approxMaxKCut(
133133
public <TR> CompletableFuture<TR> cliqueCounting(
134134
GraphName graphName,
135135
GraphParameters graphParameters,
136-
Optional<String> relationshipProperty,
137136
CliqueCountingParameters parameters,
138137
JobId jobId,
139138
boolean logProgress,
@@ -143,7 +142,7 @@ public <TR> CompletableFuture<TR> cliqueCounting(
143142
var graphResources = graphStoreCatalogService.fetchGraphResources(
144143
graphName,
145144
graphParameters,
146-
relationshipProperty,
145+
Optional.empty(),
147146
new UndirectedOnlyGraphStoreValidation("Clique Counting"),
148147
Optional.empty(),
149148
user,
@@ -193,7 +192,6 @@ public <TR> CompletableFuture<TR> conductance(
193192
public <TR> CompletableFuture<TR> hdbscan(
194193
GraphName graphName,
195194
GraphParameters graphParameters,
196-
Optional<String> relationshipProperty,
197195
HDBScanParameters parameters,
198196
JobId jobId,
199197
boolean logProgress,
@@ -203,7 +201,7 @@ public <TR> CompletableFuture<TR> hdbscan(
203201
var graphResources = graphStoreCatalogService.fetchGraphResources(
204202
graphName,
205203
graphParameters,
206-
relationshipProperty,
204+
Optional.empty(),
207205
new NodePropertyAnyExistsGraphStoreValidation("nodeProperty"),
208206
Optional.empty(),
209207
user,
@@ -223,7 +221,6 @@ public <TR> CompletableFuture<TR> hdbscan(
223221
public <TR> CompletableFuture<TR> k1Coloring(
224222
GraphName graphName,
225223
GraphParameters graphParameters,
226-
Optional<String> relationshipProperty,
227224
K1ColoringParameters parameters,
228225
JobId jobId,
229226
boolean logProgress,
@@ -233,7 +230,7 @@ public <TR> CompletableFuture<TR> k1Coloring(
233230
var graphResources = graphStoreCatalogService.fetchGraphResources(
234231
graphName,
235232
graphParameters,
236-
relationshipProperty,
233+
Optional.empty(),
237234
new NoAlgorithmValidation(),
238235
Optional.empty(),
239236
user,
@@ -253,7 +250,6 @@ public <TR> CompletableFuture<TR> k1Coloring(
253250
public <TR> CompletableFuture<TR> kCoreDecomposition(
254251
GraphName graphName,
255252
GraphParameters graphParameters,
256-
Optional<String> relationshipProperty,
257253
KCoreDecompositionParameters parameters,
258254
JobId jobId,
259255
boolean logProgress,
@@ -263,7 +259,7 @@ public <TR> CompletableFuture<TR> kCoreDecomposition(
263259
var graphResources = graphStoreCatalogService.fetchGraphResources(
264260
graphName,
265261
graphParameters,
266-
relationshipProperty,
262+
Optional.empty(),
267263
new UndirectedOnlyGraphStoreValidation("K-Core-Decomposition"),
268264
Optional.empty(),
269265
user,
@@ -283,7 +279,6 @@ public <TR> CompletableFuture<TR> kCoreDecomposition(
283279
public <TR> CompletableFuture<TR> kMeans(
284280
GraphName graphName,
285281
GraphParameters graphParameters,
286-
Optional<String> relationshipProperty,
287282
KmeansParameters parameters,
288283
JobId jobId,
289284
boolean logProgress,
@@ -293,8 +288,11 @@ public <TR> CompletableFuture<TR> kMeans(
293288
var graphResources = graphStoreCatalogService.fetchGraphResources(
294289
graphName,
295290
graphParameters,
296-
relationshipProperty,
297-
new NodePropertyTypeGraphStoreValidation("nodeProperty", List.of(ValueType.DOUBLE_ARRAY, ValueType.FLOAT_ARRAY,ValueType.DOUBLE)),
291+
Optional.empty(),
292+
new NodePropertyTypeGraphStoreValidation(
293+
"nodeProperty",
294+
List.of(ValueType.DOUBLE_ARRAY, ValueType.FLOAT_ARRAY,ValueType.DOUBLE)
295+
),
298296
Optional.empty(),
299297
user,
300298
databaseId
@@ -343,7 +341,6 @@ public <TR> CompletableFuture<TR> labelPropagation(
343341
public <TR> CompletableFuture<TR> lcc(
344342
GraphName graphName,
345343
GraphParameters graphParameters,
346-
Optional<String> relationshipProperty,
347344
LocalClusteringCoefficientParameters parameters,
348345
JobId jobId,
349346
boolean logProgress,
@@ -353,8 +350,11 @@ public <TR> CompletableFuture<TR> lcc(
353350
var graphResources = graphStoreCatalogService.fetchGraphResources(
354351
graphName,
355352
graphParameters,
356-
relationshipProperty,
357-
UndirectedAndSeedableGraphStoreValidation.create(parameters.seedProperty()),
353+
Optional.empty(),
354+
new CompoundGraphStoreValidationsBuilder()
355+
.withGraphStoreValidation(new UndirectedOnlyGraphStoreValidation("LocalClusteringCoefficient"))
356+
.withGraphStoreValidation(SeedPropertyGraphStoreValidation.create(parameters.seedProperty()))
357+
.build(),
358358
Optional.empty(),
359359
user,
360360
databaseId
@@ -384,7 +384,10 @@ public <TR> CompletableFuture<TR> leiden(
384384
graphName,
385385
graphParameters,
386386
relationshipProperty,
387-
UndirectedAndSeedableGraphStoreValidation.create(parameters.seedProperty()),
387+
new CompoundGraphStoreValidationsBuilder()
388+
.withGraphStoreValidation(new UndirectedOnlyGraphStoreValidation("Leiden"))
389+
.withGraphStoreValidation(SeedPropertyGraphStoreValidation.create(parameters.seedProperty()))
390+
.build(),
388391
Optional.empty(),
389392
user,
390393
databaseId
@@ -491,7 +494,6 @@ public <TR> CompletableFuture<TR> modularityOptimization(
491494
public <TR> CompletableFuture<TR> scc(
492495
GraphName graphName,
493496
GraphParameters graphParameters,
494-
Optional<String> relationshipProperty,
495497
SccParameters parameters,
496498
JobId jobId,
497499
boolean logProgress,
@@ -501,7 +503,7 @@ public <TR> CompletableFuture<TR> scc(
501503
var graphResources = graphStoreCatalogService.fetchGraphResources(
502504
graphName,
503505
graphParameters,
504-
relationshipProperty,
506+
Optional.empty(),
505507
new NoAlgorithmValidation(),
506508
Optional.empty(),
507509
user,
@@ -521,7 +523,6 @@ public <TR> CompletableFuture<TR> scc(
521523
public <TR> CompletableFuture<TR> sllpa(
522524
GraphName graphName,
523525
GraphParameters graphParameters,
524-
Optional<String> relationshipProperty,
525526
SpeakerListenerLPAConfig config,
526527
JobId jobId,
527528
boolean logProgress,
@@ -531,7 +532,7 @@ public <TR> CompletableFuture<TR> sllpa(
531532
var graphResources = graphStoreCatalogService.fetchGraphResources(
532533
graphName,
533534
graphParameters,
534-
relationshipProperty,
535+
Optional.empty(),
535536
new SpeakerListenerLPAGraphStoreValidation(config.writeProperty()),
536537
Optional.empty(),
537538
user,
@@ -550,7 +551,6 @@ public <TR> CompletableFuture<TR> sllpa(
550551
public <TR> CompletableFuture<TR> triangleCount(
551552
GraphName graphName,
552553
GraphParameters graphParameters,
553-
Optional<String> relationshipProperty,
554554
TriangleCountParameters parameters,
555555
JobId jobId,
556556
boolean logProgress,
@@ -560,7 +560,7 @@ public <TR> CompletableFuture<TR> triangleCount(
560560
var graphResources = graphStoreCatalogService.fetchGraphResources(
561561
graphName,
562562
graphParameters,
563-
relationshipProperty,
563+
Optional.empty(),
564564
TriangleCountGraphStoreValidation.create(parameters.labelFilter()),
565565
Optional.empty(),
566566
user,
@@ -580,7 +580,6 @@ public <TR> CompletableFuture<TR> triangleCount(
580580
public <TR> CompletableFuture<TR> triangles(
581581
GraphName graphName,
582582
GraphParameters graphParameters,
583-
Optional<String> relationshipProperty,
584583
TriangleCountParameters parameters,
585584
JobId jobId,
586585
boolean logProgress,
@@ -590,7 +589,7 @@ public <TR> CompletableFuture<TR> triangles(
590589
var graphResources = graphStoreCatalogService.fetchGraphResources(
591590
graphName,
592591
graphParameters,
593-
relationshipProperty,
592+
Optional.empty(),
594593
TriangleCountGraphStoreValidation.create(parameters.labelFilter()),
595594
Optional.empty(),
596595
user,

algorithms-compute-business-facade/src/main/java/org/neo4j/gds/community/validation/TriangleCountGraphStoreValidation.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public final class TriangleCountGraphStoreValidation extends GraphStoreValidatio
3636
private final List<String> labelFilter;
3737

3838
public static TriangleCountGraphStoreValidation create(List<String> labelFilter){
39-
return new TriangleCountGraphStoreValidation(new UndirectedOnlyGraphStoreValidation("Triangle Counting"),labelFilter);
39+
return new TriangleCountGraphStoreValidation(new UndirectedOnlyGraphStoreValidation("Triangle Counting"),labelFilter);
4040
}
4141
private TriangleCountGraphStoreValidation(
4242
UndirectedOnlyGraphStoreValidation undirectedOnlyGraphStoreValidation,

algorithms-compute-business-facade/src/main/java/org/neo4j/gds/community/validation/UndirectedAndSeedableGraphStoreValidation.java

Lines changed: 0 additions & 60 deletions
This file was deleted.

algorithms-compute-business-facade/src/main/java/org/neo4j/gds/pathfinding/PathFindingComputeBusinessFacade.java

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,25 +25,27 @@
2525
import org.neo4j.gds.api.DatabaseId;
2626
import org.neo4j.gds.api.GraphName;
2727
import org.neo4j.gds.api.User;
28+
import org.neo4j.gds.api.nodeproperties.ValueType;
2829
import org.neo4j.gds.collections.ha.HugeLongArray;
2930
import org.neo4j.gds.collections.haa.HugeAtomicLongArray;
3031
import org.neo4j.gds.core.JobId;
3132
import org.neo4j.gds.core.loading.GraphStoreCatalogService;
33+
import org.neo4j.gds.core.loading.validation.CompoundGraphStoreValidationsBuilder;
3234
import org.neo4j.gds.core.loading.validation.NoAlgorithmValidation;
35+
import org.neo4j.gds.core.loading.validation.NodePropertyAllExistsGraphStoreValidation;
36+
import org.neo4j.gds.core.loading.validation.NodePropertyTypeGraphStoreValidation;
3337
import org.neo4j.gds.core.loading.validation.SourceNodeGraphStoreValidation;
3438
import org.neo4j.gds.core.loading.validation.SourceNodeTargetNodeGraphStoreValidation;
3539
import org.neo4j.gds.core.loading.validation.SourceNodeTargetNodesGraphStoreValidation;
3640
import org.neo4j.gds.core.loading.validation.SourceNodesGraphStoreValidation;
41+
import org.neo4j.gds.core.loading.validation.UndirectedOnlyGraphStoreValidation;
3742
import org.neo4j.gds.dag.longestPath.DagLongestPathParameters;
3843
import org.neo4j.gds.dag.topologicalsort.TopologicalSortParameters;
3944
import org.neo4j.gds.dag.topologicalsort.TopologicalSortResult;
4045
import org.neo4j.gds.kspanningtree.KSpanningTreeParameters;
4146
import org.neo4j.gds.maxflow.FlowResult;
4247
import org.neo4j.gds.maxflow.MaxFlowParameters;
43-
import org.neo4j.gds.pathfinding.validation.KSpanningTreeGraphStoreValidation;
44-
import org.neo4j.gds.pathfinding.validation.PCSTGraphStoreValidation;
4548
import org.neo4j.gds.pathfinding.validation.RandomWalkGraphValidation;
46-
import org.neo4j.gds.pathfinding.validation.SpanningTreeGraphStoreValidation;
4749
import org.neo4j.gds.paths.astar.AStarParameters;
4850
import org.neo4j.gds.paths.bellmanford.BellmanFordParameters;
4951
import org.neo4j.gds.paths.bellmanford.BellmanFordResult;
@@ -63,6 +65,7 @@
6365
import org.neo4j.gds.traversal.RandomWalkParameters;
6466
import org.neo4j.gds.traversal.TraversalParameters;
6567

68+
import java.util.List;
6669
import java.util.Optional;
6770
import java.util.concurrent.CompletableFuture;
6871
import java.util.concurrent.ExecutorService;
@@ -254,7 +257,10 @@ public <TR> CompletableFuture<TR> kSpanningTree(
254257
graphName,
255258
graphParameters,
256259
relationshipProperty,
257-
new KSpanningTreeGraphStoreValidation(parameters.sourceNode()),
260+
new CompoundGraphStoreValidationsBuilder()
261+
.withGraphStoreValidation(new SourceNodeGraphStoreValidation(parameters.sourceNode()))
262+
.withGraphStoreValidation(new UndirectedOnlyGraphStoreValidation("K-Spanning Tree"))
263+
.build(),
258264
Optional.empty(),
259265
user,
260266
databaseId
@@ -397,15 +403,18 @@ public <TR> CompletableFuture<TR> pcst(
397403
graphName,
398404
graphParameters,
399405
Optional.empty(),
400-
PCSTGraphStoreValidation.create(parameters.prizeProperty()),
406+
new CompoundGraphStoreValidationsBuilder()
407+
.withGraphStoreValidation(new UndirectedOnlyGraphStoreValidation("Prize-collecting Steiner Tree"))
408+
.withGraphStoreValidation(new NodePropertyAllExistsGraphStoreValidation(parameters.prizeProperty()))
409+
.withGraphStoreValidation(new NodePropertyTypeGraphStoreValidation(parameters.prizeProperty(), List.of(ValueType.DOUBLE)))
410+
.build(),
401411
Optional.empty(),
402412
user,
403413
databaseId
404414
);
405415

406416
var graph = graphResources.graph();
407417

408-
409418
return computeFacade.pcst(
410419
graph,
411420
parameters,
@@ -544,7 +553,10 @@ public <TR> CompletableFuture<TR> spanningTree(
544553
graphName,
545554
graphParameters,
546555
relationshipProperty,
547-
SpanningTreeGraphStoreValidation.create(parameters.sourceNode()),
556+
new CompoundGraphStoreValidationsBuilder()
557+
.withGraphStoreValidation(new SourceNodeGraphStoreValidation(parameters.sourceNode()))
558+
.withGraphStoreValidation(new UndirectedOnlyGraphStoreValidation("Spanning Tree"))
559+
.build(),
548560
Optional.empty(),
549561
user,
550562
databaseId

0 commit comments

Comments
 (0)