Skip to content

Commit 46cd848

Browse files
Remote Steiner Tree stats
MINOR
1 parent f51ff31 commit 46cd848

File tree

8 files changed

+100
-192
lines changed

8 files changed

+100
-192
lines changed

procedures/algorithms-facade/src/main/java/org/neo4j/gds/procedures/algorithms/pathfinding/SteinerTreeResultBuilderForStatsMode.java

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -41,18 +41,21 @@ public Stream<SteinerStatsResult> build(
4141
Optional<SteinerTreeResult> result,
4242
AlgorithmProcessingTimings timings
4343
) {
44-
var builder = new SteinerStatsResult.Builder();
44+
if (result.isEmpty()) {
45+
return Stream.of(SteinerStatsResult.emptyFrom(timings, configuration.toMap()));
46+
}
47+
48+
var spanningTree = result.get();
49+
return Stream.of(
50+
new SteinerStatsResult(
51+
timings.preProcessingMillis,
52+
timings.computeMillis,
53+
spanningTree.effectiveNodeCount(),
54+
spanningTree.effectiveTargetNodesCount(),
55+
spanningTree.totalCost(),
56+
configuration.toMap()
57+
)
58+
);
4559

46-
builder
47-
.withConfig(configuration)
48-
.withComputeMillis(timings.computeMillis)
49-
.withPreProcessingMillis(timings.preProcessingMillis);
50-
51-
result.ifPresent(r -> builder
52-
.withEffectiveNodeCount(r.effectiveNodeCount())
53-
.withTotalWeight(r.totalCost())
54-
.withEffectiveTargetNodesCount(r.effectiveTargetNodesCount()));
55-
56-
return Stream.of(builder.build());
5760
}
5861
}

procedures/algorithms-facade/src/main/java/org/neo4j/gds/procedures/algorithms/pathfinding/SteinerTreeResultBuilderForWriteMode.java

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import java.util.Optional;
3030

3131
class SteinerTreeResultBuilderForWriteMode implements ResultBuilder<SteinerTreeWriteConfig, SteinerTreeResult, SteinerWriteResult, RelationshipsWritten> {
32+
3233
@Override
3334
public SteinerWriteResult build(
3435
Graph graph,
@@ -37,21 +38,22 @@ public SteinerWriteResult build(
3738
AlgorithmProcessingTimings timings,
3839
Optional<RelationshipsWritten> metadata
3940
) {
40-
var builder = new SteinerWriteResult.Builder();
41-
builder.withConfig(steinerTreeWriteConfig);
42-
43-
builder.withPreProcessingMillis(timings.preProcessingMillis);
44-
builder.withComputeMillis(timings.computeMillis);
45-
builder.withWriteMillis(timings.sideEffectMillis);
41+
if (steinerTreeResult.isEmpty()) {
42+
return SteinerWriteResult.emptyFrom(timings, steinerTreeWriteConfig.toMap());
43+
}
4644

47-
metadata.ifPresent(rw -> builder.withRelationshipsWritten(rw.value()));
45+
var spanningTree = steinerTreeResult.get();
4846

49-
steinerTreeResult.ifPresent(result -> {
50-
builder.withEffectiveNodeCount(result.effectiveNodeCount());
51-
builder.withEffectiveTargetNodeCount(result.effectiveTargetNodesCount());
52-
builder.withTotalWeight(result.totalCost());
53-
});
54-
55-
return builder.build();
47+
return new SteinerWriteResult(
48+
timings.preProcessingMillis,
49+
timings.computeMillis,
50+
timings.sideEffectMillis,
51+
spanningTree.effectiveNodeCount(),
52+
spanningTree.effectiveTargetNodesCount(),
53+
spanningTree.totalCost(),
54+
metadata.get().value(),
55+
steinerTreeWriteConfig.toMap()
56+
);
5657
}
58+
5759
}

procedures/algorithms-facade/src/main/java/org/neo4j/gds/procedures/algorithms/pathfinding/stubs/SteinerTreeResultBuilderForMutateMode.java

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -38,21 +38,21 @@ public SteinerMutateResult build(
3838
AlgorithmProcessingTimings timings,
3939
Optional<RelationshipsWritten> metadata
4040
) {
41-
var builder = new SteinerMutateResult.Builder();
42-
builder.withConfig(steinerTreeMutateConfig);
41+
if (steinerTreeResult.isEmpty()) {
42+
return SteinerMutateResult.emptyFrom(timings, steinerTreeMutateConfig.toMap());
43+
}
4344

44-
builder.withPreProcessingMillis(timings.preProcessingMillis);
45-
builder.withComputeMillis(timings.computeMillis);
46-
builder.withMutateMillis(timings.sideEffectMillis);
45+
var spanningTree = steinerTreeResult.get();
4746

48-
metadata.ifPresent(rw -> builder.withRelationshipsWritten(rw.value()));
49-
50-
steinerTreeResult.ifPresent(result -> {
51-
builder.withEffectiveNodeCount(result.effectiveNodeCount());
52-
builder.withEffectiveTargetNodeCount(result.effectiveTargetNodesCount());
53-
builder.withTotalWeight(result.totalCost());
54-
});
55-
56-
return builder.build();
47+
return new SteinerMutateResult(
48+
timings.preProcessingMillis,
49+
timings.computeMillis,
50+
timings.sideEffectMillis,
51+
spanningTree.effectiveNodeCount(),
52+
spanningTree.effectiveTargetNodesCount(),
53+
spanningTree.totalCost(),
54+
metadata.get().value(),
55+
steinerTreeMutateConfig.toMap()
56+
);
5757
}
5858
}

procedures/facade-api/path-finding-facade-api/src/main/java/org/neo4j/gds/procedures/algorithms/pathfinding/SpanningTreeMutateResult.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,13 @@ public record SpanningTreeMutateResult(
3030
long mutateMillis,
3131
long effectiveNodeCount,
3232
long relationshipsWritten,
33-
double totalCost,
33+
double totalWeight,
3434
Map<String, Object> configuration
3535
) implements ModeResult {
3636

3737
public static SpanningTreeMutateResult emptyFrom(
3838
AlgorithmProcessingTimings timings,
39-
Map<String, Object> configuration
40-
)
39+
Map<String, Object> configuration)
4140
{
4241
return new SpanningTreeMutateResult(
4342
timings.preProcessingMillis,

procedures/facade-api/path-finding-facade-api/src/main/java/org/neo4j/gds/procedures/algorithms/pathfinding/SpanningTreeWriteResult.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,13 @@ public record SpanningTreeWriteResult(
3030
long writeMillis,
3131
long effectiveNodeCount,
3232
long relationshipsWritten,
33-
double totalCost,
33+
double totalWeight,
3434
Map<String, Object> configuration
3535
) implements ModeResult {
3636

3737
public static SpanningTreeWriteResult emptyFrom(
3838
AlgorithmProcessingTimings timings,
39-
Map<String, Object> configuration
40-
)
39+
Map<String, Object> configuration)
4140
{
4241
return new SpanningTreeWriteResult(
4342
timings.preProcessingMillis,

procedures/facade-api/path-finding-facade-api/src/main/java/org/neo4j/gds/procedures/algorithms/pathfinding/SteinerMutateResult.java

Lines changed: 18 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -19,64 +19,34 @@
1919
*/
2020
package org.neo4j.gds.procedures.algorithms.pathfinding;
2121

22-
import org.neo4j.gds.result.AbstractResultBuilder;
22+
import org.neo4j.gds.applications.algorithms.machinery.AlgorithmProcessingTimings;
23+
import org.neo4j.gds.procedures.algorithms.results.ModeResult;
2324

2425
import java.util.Map;
2526

26-
public final class SteinerMutateResult extends SteinerStatsResult {
27-
28-
29-
public final long mutateMillis;
30-
public final long relationshipsWritten;
31-
32-
public SteinerMutateResult(
27+
public record SteinerMutateResult(
3328
long preProcessingMillis,
3429
long computeMillis,
3530
long mutateMillis,
3631
long effectiveNodeCount,
3732
long effectiveTargetNodesCount,
38-
double totalCost,
33+
double totalWeight,
3934
long relationshipsWritten,
4035
Map<String, Object> configuration
41-
) {
42-
super(preProcessingMillis, computeMillis, effectiveNodeCount, effectiveTargetNodesCount, totalCost, configuration);
43-
this.mutateMillis = mutateMillis;
44-
this.relationshipsWritten = relationshipsWritten;
36+
) implements ModeResult {
37+
38+
public static SteinerMutateResult emptyFrom(AlgorithmProcessingTimings timings, Map<String, Object> configuration)
39+
{
40+
return new SteinerMutateResult(
41+
timings.preProcessingMillis,
42+
timings.computeMillis,
43+
0,
44+
0,
45+
0,
46+
0d,
47+
0,
48+
configuration
49+
);
4550
}
4651

47-
public static class Builder extends AbstractResultBuilder<SteinerMutateResult> {
48-
49-
long effectiveNodeCount;
50-
long effectiveTargetNodesCount;
51-
double totalWeight;
52-
53-
public Builder withEffectiveNodeCount(long effectiveNodeCount) {
54-
this.effectiveNodeCount = effectiveNodeCount;
55-
return this;
56-
}
57-
58-
public Builder withEffectiveTargetNodeCount(long effectiveTargetNodesCount) {
59-
this.effectiveTargetNodesCount = effectiveTargetNodesCount;
60-
return this;
61-
}
62-
63-
public Builder withTotalWeight(double totalWeight) {
64-
this.totalWeight = totalWeight;
65-
return this;
66-
}
67-
68-
@Override
69-
public SteinerMutateResult build() {
70-
return new SteinerMutateResult(
71-
preProcessingMillis,
72-
computeMillis,
73-
mutateMillis,
74-
effectiveNodeCount,
75-
effectiveTargetNodesCount,
76-
totalWeight,
77-
relationshipsWritten,
78-
config.toMap()
79-
);
80-
}
81-
}
8252
}

procedures/facade-api/path-finding-facade-api/src/main/java/org/neo4j/gds/procedures/algorithms/pathfinding/SteinerStatsResult.java

Lines changed: 15 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -19,63 +19,29 @@
1919
*/
2020
package org.neo4j.gds.procedures.algorithms.pathfinding;
2121

22-
import org.neo4j.gds.procedures.algorithms.results.StandardModeResult;
23-
import org.neo4j.gds.result.AbstractResultBuilder;
22+
import org.neo4j.gds.applications.algorithms.machinery.AlgorithmProcessingTimings;
23+
import org.neo4j.gds.procedures.algorithms.results.ModeResult;
2424

2525
import java.util.Map;
2626

27-
public class SteinerStatsResult extends StandardModeResult {
28-
29-
public final long effectiveNodeCount;
30-
public final long effectiveTargetNodesCount;
31-
public final double totalWeight;
32-
33-
public SteinerStatsResult(
27+
public record SteinerStatsResult(
3428
long preProcessingMillis,
3529
long computeMillis,
3630
long effectiveNodeCount,
3731
long effectiveTargetNodesCount,
3832
double totalWeight,
3933
Map<String, Object> configuration
40-
) {
41-
super(preProcessingMillis, computeMillis, configuration);
42-
this.effectiveNodeCount = effectiveNodeCount;
43-
this.totalWeight = totalWeight;
44-
this.effectiveTargetNodesCount = effectiveTargetNodesCount;
45-
}
46-
47-
public static final class Builder extends AbstractResultBuilder<SteinerStatsResult> {
48-
49-
private long effectiveNodeCount;
50-
private double totalWeight;
51-
private long effectiveTargetNodesCount;
52-
53-
@Override
54-
public SteinerStatsResult build() {
55-
return new SteinerStatsResult(
56-
preProcessingMillis,
57-
computeMillis,
58-
effectiveNodeCount,
59-
effectiveTargetNodesCount,
60-
totalWeight,
61-
config.toMap()
62-
);
63-
}
64-
65-
public Builder withEffectiveNodeCount(long effectiveNodeCount) {
66-
this.effectiveNodeCount = effectiveNodeCount;
67-
return this;
68-
}
69-
70-
public Builder withTotalWeight(double totalWeight) {
71-
this.totalWeight = totalWeight;
72-
return this;
73-
}
74-
75-
public Builder withEffectiveTargetNodesCount(long effectiveTargetNodesCount) {
76-
this.effectiveTargetNodesCount = effectiveTargetNodesCount;
77-
return this;
78-
}
79-
34+
) implements ModeResult {
35+
36+
static SteinerStatsResult emptyFrom(AlgorithmProcessingTimings timings, Map<String, Object> configuration)
37+
{
38+
return new SteinerStatsResult(
39+
timings.preProcessingMillis,
40+
timings.computeMillis,
41+
0,
42+
0,
43+
0d,
44+
configuration
45+
);
8046
}
8147
}

procedures/facade-api/path-finding-facade-api/src/main/java/org/neo4j/gds/procedures/algorithms/pathfinding/SteinerWriteResult.java

Lines changed: 18 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -19,64 +19,33 @@
1919
*/
2020
package org.neo4j.gds.procedures.algorithms.pathfinding;
2121

22-
import org.neo4j.gds.result.AbstractResultBuilder;
22+
import org.neo4j.gds.applications.algorithms.machinery.AlgorithmProcessingTimings;
23+
import org.neo4j.gds.procedures.algorithms.results.ModeResult;
2324

2425
import java.util.Map;
2526

26-
public final class SteinerWriteResult extends SteinerStatsResult {
27-
28-
29-
public final long writeMillis;
30-
public final long relationshipsWritten;
31-
32-
public SteinerWriteResult(
27+
public record SteinerWriteResult(
3328
long preProcessingMillis,
3429
long computeMillis,
3530
long writeMillis,
3631
long effectiveNodeCount,
3732
long effectiveTargetNodesCount,
38-
double totalCost,
33+
double totalWeight,
3934
long relationshipsWritten,
4035
Map<String, Object> configuration
41-
) {
42-
super(preProcessingMillis, computeMillis, effectiveNodeCount, effectiveTargetNodesCount, totalCost, configuration);
43-
this.writeMillis = writeMillis;
44-
this.relationshipsWritten = relationshipsWritten;
45-
}
46-
47-
public static class Builder extends AbstractResultBuilder<SteinerWriteResult> {
48-
49-
long effectiveNodeCount;
50-
long effectiveTargetNodesCount;
51-
double totalWeight;
52-
53-
public Builder withEffectiveNodeCount(long effectiveNodeCount) {
54-
this.effectiveNodeCount = effectiveNodeCount;
55-
return this;
56-
}
57-
58-
public Builder withEffectiveTargetNodeCount(long effectiveTargetNodesCount) {
59-
this.effectiveTargetNodesCount = effectiveTargetNodesCount;
60-
return this;
61-
}
62-
63-
public Builder withTotalWeight(double totalWeight) {
64-
this.totalWeight = totalWeight;
65-
return this;
66-
}
67-
68-
@Override
69-
public SteinerWriteResult build() {
70-
return new SteinerWriteResult(
71-
preProcessingMillis,
72-
computeMillis,
73-
writeMillis,
74-
effectiveNodeCount,
75-
effectiveTargetNodesCount,
76-
totalWeight,
77-
relationshipsWritten,
78-
config.toMap()
79-
);
80-
}
36+
) implements ModeResult{
37+
38+
static SteinerWriteResult emptyFrom(AlgorithmProcessingTimings timings, Map<String, Object> configuration)
39+
{
40+
return new SteinerWriteResult(
41+
timings.preProcessingMillis,
42+
timings.computeMillis,
43+
0,
44+
0,
45+
0,
46+
0d,
47+
0,
48+
configuration
49+
);
8150
}
8251
}

0 commit comments

Comments
 (0)