Skip to content

Commit 7701956

Browse files
committed
Move BellmanFordWriteStep to dedicated module
1 parent 9243fa3 commit 7701956

File tree

7 files changed

+76
-23
lines changed

7 files changed

+76
-23
lines changed

applications/algorithms/path-finding/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ dependencies {
2626
implementation project(':metrics-api')
2727
implementation project(':path-finding-configs')
2828
implementation project(':path-finding-mutate-steps')
29+
implementation project(':path-finding-write-steps')
2930
implementation project(':progress-tracking')
3031
implementation project(':string-formatting')
3132
implementation project(':termination')

applications/algorithms/path-finding/src/main/java/org/neo4j/gds/applications/algorithms/pathfinding/PathFindingAlgorithmsWriteModeBusinessFacade.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import org.neo4j.gds.kspanningtree.KSpanningTreeWriteConfig;
3737
import org.neo4j.gds.logging.Log;
3838
import org.neo4j.gds.mem.MemoryEstimation;
39+
import org.neo4j.gds.pathfinding.BellmanFordWriteStep;
3940
import org.neo4j.gds.paths.WritePathOptionsConfig;
4041
import org.neo4j.gds.paths.astar.config.ShortestPathAStarWriteConfig;
4142
import org.neo4j.gds.paths.bellmanford.AllShortestPathsBellmanFordWriteConfig;
@@ -103,7 +104,12 @@ public <RESULT> RESULT bellmanFord(
103104
) {
104105
var writeStep = new BellmanFordWriteStep(
105106
writeRelationshipService,
106-
configuration
107+
configuration.writeRelationshipType(),
108+
configuration.writeNegativeCycles(),
109+
configuration.writeNodeIds(),
110+
configuration.writeCosts(),
111+
configuration::resolveResultStore,
112+
configuration.jobId()
107113
);
108114

109115
return runAlgorithmAndWrite(

applications/algorithms/path-finding/src/main/java/org/neo4j/gds/applications/algorithms/pathfinding/ShortestPathWriteStep.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.neo4j.gds.config.WriteRelationshipConfig;
3030
import org.neo4j.gds.core.utils.progress.JobId;
3131
import org.neo4j.gds.logging.Log;
32+
import org.neo4j.gds.pathfinding.PathFindingWriteRelationshipSpecification;
3233
import org.neo4j.gds.paths.WritePathOptionsConfig;
3334
import org.neo4j.gds.paths.dijkstra.PathFindingResult;
3435

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
apply plugin: 'java-library'
2+
3+
description = 'Neo4j Graph Data Science :: Path Finding Write Steps'
4+
5+
group = 'org.neo4j.gds'
6+
7+
dependencies {
8+
9+
// Neo4j dependencies
10+
compileOnly(neo4j.common) { transitive = false }
11+
compileOnly(neo4j.values) { transitive = false }
12+
13+
14+
// FIXME: we need `:algo` because the algorithm results are there,
15+
// extract them in a separate project and bring it instead
16+
implementation project(':algo')
17+
18+
implementation project(':algorithms-machinery')
19+
20+
// FIXME: Massively annoying we need to bring this in because services use configs;
21+
// Also `ElementTypeValidator` is there even though it's not depending on any config 🤷
22+
implementation project(':config-api')
23+
24+
implementation project(':core')
25+
implementation project(':core-api')
26+
implementation project(':logging')
27+
implementation project(':string-formatting')
28+
}

applications/algorithms/path-finding/src/main/java/org/neo4j/gds/applications/algorithms/pathfinding/BellmanFordWriteStep.java renamed to procedures/path-finding-write-steps/src/main/java/org/neo4j/gds/pathfinding/BellmanFordWriteStep.java

Lines changed: 30 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
* You should have received a copy of the GNU General Public License
1818
* along with this program. If not, see <http://www.gnu.org/licenses/>.
1919
*/
20-
package org.neo4j.gds.applications.algorithms.pathfinding;
20+
package org.neo4j.gds.pathfinding;
2121

2222
import org.neo4j.gds.api.Graph;
2323
import org.neo4j.gds.api.GraphStore;
@@ -26,19 +26,36 @@
2626
import org.neo4j.gds.applications.algorithms.machinery.WriteStep;
2727
import org.neo4j.gds.applications.algorithms.metadata.RelationshipsWritten;
2828
import org.neo4j.gds.core.utils.progress.JobId;
29-
import org.neo4j.gds.paths.bellmanford.AllShortestPathsBellmanFordWriteConfig;
3029
import org.neo4j.gds.paths.bellmanford.BellmanFordResult;
3130

32-
class BellmanFordWriteStep implements WriteStep<BellmanFordResult, RelationshipsWritten> {
31+
import java.util.Optional;
32+
import java.util.function.Function;
33+
34+
public final class BellmanFordWriteStep implements WriteStep<BellmanFordResult, RelationshipsWritten> {
3335
private final WriteRelationshipService writeRelationshipService;
34-
private final AllShortestPathsBellmanFordWriteConfig configuration;
36+
private final String writeRelationshipType;
37+
private final boolean writeNegativeCycles;
38+
private final boolean writeNodeIds;
39+
private final boolean writeCosts;
40+
private final Function<ResultStore, Optional<ResultStore>> resultStoreResolver;
41+
private final JobId jobId;
3542

36-
BellmanFordWriteStep(
43+
public BellmanFordWriteStep(
3744
WriteRelationshipService writeRelationshipService,
38-
AllShortestPathsBellmanFordWriteConfig configuration
45+
String writeRelationshipType,
46+
boolean writeNegativeCycles,
47+
boolean writeNodeIds,
48+
boolean writeCosts,
49+
Function<ResultStore, Optional<ResultStore>> resultStoreResolver,
50+
JobId jobId
3951
) {
40-
this.configuration = configuration;
4152
this.writeRelationshipService = writeRelationshipService;
53+
this.writeRelationshipType = writeRelationshipType;
54+
this.writeNegativeCycles = writeNegativeCycles;
55+
this.writeNodeIds = writeNodeIds;
56+
this.writeCosts = writeCosts;
57+
this.resultStoreResolver = resultStoreResolver;
58+
this.jobId = jobId;
4259
}
4360

4461
@Override
@@ -49,31 +66,27 @@ public RelationshipsWritten execute(
4966
BellmanFordResult result,
5067
JobId jobId
5168
) {
52-
53-
var writeNodeIds = configuration.writeNodeIds();
54-
var writeCosts = configuration.writeCosts();
55-
56-
var specification = new PathFindingWriteRelationshipSpecification(graph,writeNodeIds,writeCosts);
69+
var specification = new PathFindingWriteRelationshipSpecification(graph, writeNodeIds, writeCosts);
5770
var keys = specification.createKeys();
58-
var types= specification.createTypes();
71+
var types = specification.createTypes();
5972

6073
var paths = result.shortestPaths();
61-
if (configuration.writeNegativeCycles() && result.containsNegativeCycle()) {
74+
if (writeNegativeCycles && result.containsNegativeCycle()) {
6275
paths = result.negativeCycles();
6376
}
6477
try (
6578
var relationshipStream = paths.mapPaths(specification::createRelationship);
6679
) {
6780

6881
return writeRelationshipService.writeFromRelationshipStream(
69-
configuration.writeRelationshipType(),
82+
writeRelationshipType,
7083
keys,
7184
types,
7285
relationshipStream,
7386
graph,
7487
"Write shortest Paths",
75-
configuration.resolveResultStore(resultStore),
76-
configuration.jobId()
88+
resultStoreResolver.apply(resultStore),
89+
this.jobId
7790
);
7891
}
7992
}

applications/algorithms/path-finding/src/main/java/org/neo4j/gds/applications/algorithms/pathfinding/PathFindingWriteRelationshipSpecification.java renamed to procedures/path-finding-write-steps/src/main/java/org/neo4j/gds/pathfinding/PathFindingWriteRelationshipSpecification.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
* You should have received a copy of the GNU General Public License
1818
* along with this program. If not, see <http://www.gnu.org/licenses/>.
1919
*/
20-
package org.neo4j.gds.applications.algorithms.pathfinding;
20+
package org.neo4j.gds.pathfinding;
2121

2222
import org.neo4j.gds.api.ExportedRelationship;
2323
import org.neo4j.gds.api.IdMap;
@@ -28,12 +28,13 @@
2828

2929
import java.util.List;
3030

31-
import static org.neo4j.gds.paths.dijkstra.config.ShortestPathDijkstraWriteConfig.COSTS_KEY;
32-
import static org.neo4j.gds.paths.dijkstra.config.ShortestPathDijkstraWriteConfig.NODE_IDS_KEY;
33-
import static org.neo4j.gds.paths.dijkstra.config.ShortestPathDijkstraWriteConfig.TOTAL_COST_KEY;
34-
3531
final class PathFindingWriteRelationshipSpecification {
3632

33+
private static final String TOTAL_COST_KEY = "totalCost";
34+
private static final String NODE_IDS_KEY = "nodeIds";
35+
private static final String COSTS_KEY = "costs";
36+
37+
3738
private final IdMap idMap;
3839
private final boolean writeNodeIds;
3940
private final boolean writeCosts;

settings.gradle

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -376,6 +376,9 @@ project(':path-finding-mutate-steps').projectDir = file('procedures/path-finding
376376
include('path-finding-params')
377377
project(':path-finding-params').projectDir = file('algo-params/path-finding-params')
378378

379+
include 'path-finding-write-steps'
380+
project(':path-finding-write-steps').projectDir = file("procedures/path-finding-write-steps")
381+
379382
include('node-embeddings-facade-api')
380383
project(':node-embeddings-facade-api').projectDir = file('procedures/facade-api/node-embeddings-facade-api')
381384

0 commit comments

Comments
 (0)