Skip to content

Commit 71bf8ca

Browse files
committed
Add the build steps
1 parent 79938c8 commit 71bf8ca

File tree

7 files changed

+165
-10
lines changed

7 files changed

+165
-10
lines changed

procedures/pushback-procedures-facade/build.gradle

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ dependencies {
4545
implementation project(':neo4j-api')
4646

4747
implementation project(':path-finding-mutate-steps')
48+
implementation project(':path-finding-write-steps')
4849

4950
// we bring this in only to use `PregelConfig` and `Partitioning` enum
5051
implementation project(':pregel')
@@ -54,6 +55,9 @@ dependencies {
5455

5556
implementation project(':string-formatting')
5657

58+
59+
implementation project(':termination')
60+
5761
// Test Dependencies
5862
testImplementation project(':test-utils')
5963
testImplementation openGds.mockito.junit.jupiter

procedures/pushback-procedures-facade/src/main/java/org/neo4j/gds/procedures/algorithms/pathfinding/write/BellmanFordWriteResultTransformerBuilder.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
import org.neo4j.gds.api.Graph;
2323
import org.neo4j.gds.api.GraphStore;
24+
import org.neo4j.gds.pathfinding.BellmanFordWriteStep;
2425
import org.neo4j.gds.paths.bellmanford.AllShortestPathsBellmanFordWriteConfig;
2526
import org.neo4j.gds.paths.bellmanford.BellmanFordResult;
2627
import org.neo4j.gds.procedures.algorithms.pathfinding.BellmanFordWriteResult;
@@ -31,7 +32,7 @@
3132
import java.util.stream.Stream;
3233

3334
class BellmanFordWriteResultTransformerBuilder implements ResultTransformerBuilder<TimedAlgorithmResult<BellmanFordResult>, Stream<BellmanFordWriteResult>> {
34-
BellmanFordWriteResultTransformerBuilder(AllShortestPathsBellmanFordWriteConfig config) {}
35+
BellmanFordWriteResultTransformerBuilder(BellmanFordWriteStep writeStep, AllShortestPathsBellmanFordWriteConfig config) {}
3536

3637
@Override
3738
public ResultTransformer<TimedAlgorithmResult<BellmanFordResult>, Stream<BellmanFordWriteResult>> build(Graph graph, GraphStore graphStore) {

procedures/pushback-procedures-facade/src/main/java/org/neo4j/gds/procedures/algorithms/pathfinding/write/DeltaSteppingWriteResultTransformerBuilder.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
import org.neo4j.gds.api.Graph;
2323
import org.neo4j.gds.api.GraphStore;
24+
import org.neo4j.gds.pathfinding.ShortestPathWriteStep;
2425
import org.neo4j.gds.paths.delta.config.AllShortestPathsDeltaWriteConfig;
2526
import org.neo4j.gds.paths.dijkstra.PathFindingResult;
2627
import org.neo4j.gds.procedures.algorithms.results.StandardWriteRelationshipsResult;
@@ -31,7 +32,7 @@
3132
import java.util.stream.Stream;
3233

3334
class DeltaSteppingWriteResultTransformerBuilder implements ResultTransformerBuilder<TimedAlgorithmResult<PathFindingResult>, Stream<StandardWriteRelationshipsResult>> {
34-
DeltaSteppingWriteResultTransformerBuilder(AllShortestPathsDeltaWriteConfig config) {}
35+
DeltaSteppingWriteResultTransformerBuilder(ShortestPathWriteStep writeStep, AllShortestPathsDeltaWriteConfig config) {}
3536

3637
@Override
3738
public ResultTransformer<TimedAlgorithmResult<PathFindingResult>, Stream<StandardWriteRelationshipsResult>> build(Graph graph, GraphStore graphStore) {

procedures/pushback-procedures-facade/src/main/java/org/neo4j/gds/procedures/algorithms/pathfinding/write/PCSTWriteResultTransformerBuilder.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
import org.neo4j.gds.api.Graph;
2323
import org.neo4j.gds.api.GraphStore;
24+
import org.neo4j.gds.pathfinding.PrizeCollectingSteinerTreeWriteStep;
2425
import org.neo4j.gds.pcst.PCSTWriteConfig;
2526
import org.neo4j.gds.pricesteiner.PrizeSteinerTreeResult;
2627
import org.neo4j.gds.procedures.algorithms.pathfinding.PrizeCollectingSteinerTreeWriteResult;
@@ -31,7 +32,7 @@
3132
import java.util.stream.Stream;
3233

3334
class PCSTWriteResultTransformerBuilder implements ResultTransformerBuilder<TimedAlgorithmResult<PrizeSteinerTreeResult>, Stream<PrizeCollectingSteinerTreeWriteResult>> {
34-
PCSTWriteResultTransformerBuilder(PCSTWriteConfig config) {}
35+
PCSTWriteResultTransformerBuilder(PrizeCollectingSteinerTreeWriteStep writeStep, PCSTWriteConfig config) {}
3536

3637
@Override
3738
public ResultTransformer<TimedAlgorithmResult<PrizeSteinerTreeResult>, Stream<PrizeCollectingSteinerTreeWriteResult>> build(

procedures/pushback-procedures-facade/src/main/java/org/neo4j/gds/procedures/algorithms/pathfinding/write/PushbackPathFindingWriteProcedureFacade.java

Lines changed: 151 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,24 @@
2020
package org.neo4j.gds.procedures.algorithms.pathfinding.write;
2121

2222
import org.neo4j.gds.api.GraphName;
23+
import org.neo4j.gds.applications.algorithms.machinery.RequestScopedDependencies;
24+
import org.neo4j.gds.applications.algorithms.machinery.WriteContext;
25+
import org.neo4j.gds.applications.algorithms.machinery.WriteRelationshipService;
26+
import org.neo4j.gds.kspanningtree.KSpanningTreeWriteConfig;
27+
import org.neo4j.gds.logging.Log;
28+
import org.neo4j.gds.pathfinding.BellmanFordWriteStep;
29+
import org.neo4j.gds.pathfinding.KSpanningTreeWriteStep;
2330
import org.neo4j.gds.pathfinding.PathFindingComputeBusinessFacade;
31+
import org.neo4j.gds.pathfinding.PrizeCollectingSteinerTreeWriteStep;
32+
import org.neo4j.gds.pathfinding.ShortestPathWriteStep;
33+
import org.neo4j.gds.pathfinding.SpanningTreeWriteStep;
34+
import org.neo4j.gds.pathfinding.SteinerTreeWriteStep;
35+
import org.neo4j.gds.paths.astar.config.ShortestPathAStarWriteConfig;
2436
import org.neo4j.gds.paths.bellmanford.AllShortestPathsBellmanFordWriteConfig;
2537
import org.neo4j.gds.paths.delta.config.AllShortestPathsDeltaWriteConfig;
38+
import org.neo4j.gds.paths.dijkstra.config.AllShortestPathsDijkstraWriteConfig;
39+
import org.neo4j.gds.paths.dijkstra.config.ShortestPathDijkstraWriteConfig;
40+
import org.neo4j.gds.paths.yens.config.ShortestPathYensWriteConfig;
2641
import org.neo4j.gds.pcst.PCSTWriteConfig;
2742
import org.neo4j.gds.procedures.algorithms.configuration.UserSpecificConfigurationParser;
2843
import org.neo4j.gds.procedures.algorithms.pathfinding.BellmanFordWriteResult;
@@ -40,13 +55,26 @@
4055
public class PushbackPathFindingWriteProcedureFacade {
4156
private final PathFindingComputeBusinessFacade businessFacade;
4257

58+
private final RequestScopedDependencies requestScopedDependencies;
59+
private final WriteContext writeContext;
60+
61+
private final Log log;
62+
63+
private final WriteRelationshipService writeRelationshipService;
4364
private final UserSpecificConfigurationParser configurationParser;
4465

4566
public PushbackPathFindingWriteProcedureFacade(
4667
PathFindingComputeBusinessFacade businessFacade,
68+
RequestScopedDependencies requestScopedDependencies,
69+
WriteContext writeContext, Log log,
70+
WriteRelationshipService writeRelationshipService,
4771
UserSpecificConfigurationParser configurationParser
4872
) {
4973
this.businessFacade = businessFacade;
74+
this.requestScopedDependencies = requestScopedDependencies;
75+
this.writeContext = writeContext;
76+
this.log = log;
77+
this.writeRelationshipService = writeRelationshipService;
5078
this.configurationParser = configurationParser;
5179
}
5280

@@ -56,14 +84,24 @@ public Stream<BellmanFordWriteResult> bellmanFord(String graphName, Map<String,
5684
AllShortestPathsBellmanFordWriteConfig::of
5785
);
5886

87+
var writeStep = new BellmanFordWriteStep(
88+
writeRelationshipService,
89+
config.writeRelationshipType(),
90+
config.writeNegativeCycles(),
91+
config.writeNodeIds(),
92+
config.writeCosts(),
93+
config::resolveResultStore,
94+
config.jobId()
95+
);
96+
5997
return businessFacade.bellmanFord(
6098
GraphName.parse(graphName),
6199
config.toGraphParameters(),
62100
config.relationshipWeightProperty(),
63101
config.toParameters(),
64102
config.jobId(),
65103
config.logProgress(),
66-
new BellmanFordWriteResultTransformerBuilder(config)
104+
new BellmanFordWriteResultTransformerBuilder(writeStep, config)
67105
).join();
68106
}
69107

@@ -76,21 +114,47 @@ public Stream<StandardWriteRelationshipsResult> deltaStepping(
76114
AllShortestPathsDeltaWriteConfig::of
77115
);
78116

117+
var writeStep = new ShortestPathWriteStep(
118+
writeRelationshipService,
119+
config.writeRelationshipType(),
120+
config.writeNodeIds(),
121+
config.writeCosts(),
122+
config::resolveResultStore,
123+
config.jobId()
124+
);
125+
126+
79127
return businessFacade.deltaStepping(
80128
GraphName.parse(graphName),
81129
config.toGraphParameters(),
82130
config.relationshipWeightProperty(),
83131
config.toParameters(),
84132
config.jobId(),
85133
config.logProgress(),
86-
new DeltaSteppingWriteResultTransformerBuilder(config)
134+
new DeltaSteppingWriteResultTransformerBuilder(writeStep, config)
87135
).join();
88136
}
89137

90138
public Stream<KSpanningTreeWriteResult> kSpanningTree(
91139
String graphName,
92140
Map<String, Object> configuration
93141
) {
142+
var config = configurationParser.parseConfiguration(
143+
configuration,
144+
KSpanningTreeWriteConfig::of
145+
);
146+
147+
var writeStep = new KSpanningTreeWriteStep(
148+
config.writeProperty(),
149+
writeContext,
150+
config::resolveResultStore,
151+
config.jobId(),
152+
config.writeConcurrency(),
153+
log,
154+
requestScopedDependencies.taskRegistryFactory(),
155+
requestScopedDependencies.terminationFlag()
156+
);
157+
94158
return Stream.empty();
95159
}
96160

@@ -103,6 +167,13 @@ public Stream<PrizeCollectingSteinerTreeWriteResult> pcst(
103167
configuration,
104168
PCSTWriteConfig::of
105169
);
170+
var writeStep = new PrizeCollectingSteinerTreeWriteStep(
171+
writeRelationshipService,
172+
config.writeRelationshipType(),
173+
config.writeProperty(),
174+
config::resolveResultStore,
175+
config.jobId()
176+
);
106177

107178
return businessFacade.pcst(
108179
GraphName.parse(graphName),
@@ -111,35 +182,93 @@ public Stream<PrizeCollectingSteinerTreeWriteResult> pcst(
111182
config.toParameters(),
112183
config.jobId(),
113184
config.logProgress(),
114-
new PCSTWriteResultTransformerBuilder(config)
185+
new PCSTWriteResultTransformerBuilder(writeStep, config)
115186
).join();
116187
}
117188

118189
public Stream<StandardWriteRelationshipsResult> singlePairShortestPathAStar(
119190
String graphName,
120191
Map<String, Object> configuration
121192
) {
193+
var config = configurationParser.parseConfiguration(
194+
configuration,
195+
ShortestPathAStarWriteConfig::of
196+
);
197+
198+
var writeStep = new ShortestPathWriteStep(
199+
writeRelationshipService,
200+
config.writeRelationshipType(),
201+
config.writeNodeIds(),
202+
config.writeCosts(),
203+
config::resolveResultStore,
204+
config.jobId()
205+
);
206+
122207
return Stream.empty();
123208
}
124209

125210
public Stream<StandardWriteRelationshipsResult> singlePairShortestPathDijkstra(
126211
String graphName,
127212
Map<String, Object> configuration
128213
) {
214+
var config = configurationParser.parseConfiguration(
215+
configuration,
216+
ShortestPathDijkstraWriteConfig::of
217+
);
218+
219+
var writeStep = new ShortestPathWriteStep(
220+
writeRelationshipService,
221+
config.writeRelationshipType(),
222+
config.writeNodeIds(),
223+
config.writeCosts(),
224+
config::resolveResultStore,
225+
config.jobId()
226+
);
227+
129228
return Stream.empty();
130229
}
131230

132231
public Stream<StandardWriteRelationshipsResult> singlePairShortestPathYens(
133232
String graphName,
134233
Map<String, Object> configuration
135234
) {
235+
236+
var config = configurationParser.parseConfiguration(
237+
configuration,
238+
ShortestPathYensWriteConfig::of
239+
);
240+
241+
var writeStep = new ShortestPathWriteStep(
242+
writeRelationshipService,
243+
config.writeRelationshipType(),
244+
config.writeNodeIds(),
245+
config.writeCosts(),
246+
config::resolveResultStore,
247+
config.jobId()
248+
);
249+
136250
return Stream.empty();
137251
}
138252

139253
public Stream<StandardWriteRelationshipsResult> singleSourceShortestPathDijkstra(
140254
String graphName,
141255
Map<String, Object> configuration
142256
) {
257+
258+
var config = configurationParser.parseConfiguration(
259+
configuration,
260+
AllShortestPathsDijkstraWriteConfig::of
261+
);
262+
263+
var writeStep = new ShortestPathWriteStep(
264+
writeRelationshipService,
265+
config.writeRelationshipType(),
266+
config.writeNodeIds(),
267+
config.writeCosts(),
268+
config::resolveResultStore,
269+
config.jobId()
270+
);
271+
143272
return Stream.empty();
144273
}
145274

@@ -149,14 +278,22 @@ public Stream<SpanningTreeWriteResult> spanningTree(String graphName, Map<String
149278
SpanningTreeWriteConfig::of
150279
);
151280

281+
var writeStep = new SpanningTreeWriteStep(
282+
writeRelationshipService,
283+
config.writeRelationshipType(),
284+
config.writeProperty(),
285+
config::resolveResultStore,
286+
config.jobId()
287+
);
288+
152289
return businessFacade.spanningTree(
153290
GraphName.parse(graphName),
154291
config.toGraphParameters(),
155292
config.relationshipWeightProperty(),
156293
config.toParameters(),
157294
config.jobId(),
158295
config.logProgress(),
159-
new SpanningTreeWriteResultTransformerBuilder(config)
296+
new SpanningTreeWriteResultTransformerBuilder(writeStep, config)
160297
).join();
161298
}
162299

@@ -166,14 +303,23 @@ public Stream<SteinerWriteResult> steinerTree(String graphName, Map<String, Obje
166303
SteinerTreeWriteConfig::of
167304
);
168305

306+
var writeStep = new SteinerTreeWriteStep(
307+
writeRelationshipService,
308+
config.sourceNode(),
309+
config.writeRelationshipType(),
310+
config.writeProperty(),
311+
config::resolveResultStore,
312+
config.jobId()
313+
);
314+
169315
return businessFacade.steinerTree(
170316
GraphName.parse(graphName),
171317
config.toGraphParameters(),
172318
config.relationshipWeightProperty(),
173319
config.toParameters(),
174320
config.jobId(),
175321
config.logProgress(),
176-
new SteinerTreeWriteResultTransformerBuilder(config)
322+
new SteinerTreeWriteResultTransformerBuilder(writeStep, config)
177323
).join();
178324

179325
}

procedures/pushback-procedures-facade/src/main/java/org/neo4j/gds/procedures/algorithms/pathfinding/write/SpanningTreeWriteResultTransformerBuilder.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
import org.neo4j.gds.api.Graph;
2323
import org.neo4j.gds.api.GraphStore;
24+
import org.neo4j.gds.pathfinding.SpanningTreeWriteStep;
2425
import org.neo4j.gds.procedures.algorithms.pathfinding.SpanningTreeWriteResult;
2526
import org.neo4j.gds.result.TimedAlgorithmResult;
2627
import org.neo4j.gds.results.ResultTransformer;
@@ -31,7 +32,7 @@
3132
import java.util.stream.Stream;
3233

3334
class SpanningTreeWriteResultTransformerBuilder implements ResultTransformerBuilder<TimedAlgorithmResult<SpanningTree>, Stream<SpanningTreeWriteResult>> {
34-
SpanningTreeWriteResultTransformerBuilder(SpanningTreeWriteConfig config) {}
35+
SpanningTreeWriteResultTransformerBuilder(SpanningTreeWriteStep writeStep, SpanningTreeWriteConfig config) {}
3536

3637
@Override
3738
public ResultTransformer<TimedAlgorithmResult<SpanningTree>, Stream<SpanningTreeWriteResult>> build(Graph graph, GraphStore graphStore) {

procedures/pushback-procedures-facade/src/main/java/org/neo4j/gds/procedures/algorithms/pathfinding/write/SteinerTreeWriteResultTransformerBuilder.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
import org.neo4j.gds.api.Graph;
2323
import org.neo4j.gds.api.GraphStore;
24+
import org.neo4j.gds.pathfinding.SteinerTreeWriteStep;
2425
import org.neo4j.gds.procedures.algorithms.pathfinding.SteinerWriteResult;
2526
import org.neo4j.gds.result.TimedAlgorithmResult;
2627
import org.neo4j.gds.results.ResultTransformer;
@@ -31,7 +32,7 @@
3132
import java.util.stream.Stream;
3233

3334
class SteinerTreeWriteResultTransformerBuilder implements ResultTransformerBuilder<TimedAlgorithmResult<SteinerTreeResult>, Stream<SteinerWriteResult>> {
34-
SteinerTreeWriteResultTransformerBuilder(SteinerTreeWriteConfig config) {}
35+
SteinerTreeWriteResultTransformerBuilder(SteinerTreeWriteStep writeStep, SteinerTreeWriteConfig config) {}
3536

3637
@Override
3738
public ResultTransformer<TimedAlgorithmResult<SteinerTreeResult>, Stream<SteinerWriteResult>> build(Graph graph, GraphStore graphStore) {

0 commit comments

Comments
 (0)