Skip to content

Commit f30be1e

Browse files
Refactor AbstractCentralityResultBuilder
1 parent 6ef3d94 commit f30be1e

File tree

12 files changed

+46
-40
lines changed

12 files changed

+46
-40
lines changed

algo-common/src/main/java/org/neo4j/gds/result/AbstractCentralityResultBuilder.java

Lines changed: 33 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
package org.neo4j.gds.result;
2121

2222
import org.HdrHistogram.DoubleHistogram;
23-
import org.jetbrains.annotations.Nullable;
23+
import org.jetbrains.annotations.NotNull;
2424
import org.neo4j.gds.compat.MapUtil;
2525
import org.neo4j.gds.core.concurrency.Pools;
2626
import org.neo4j.gds.core.utils.ProgressTimer;
@@ -38,29 +38,14 @@ public abstract class AbstractCentralityResultBuilder<WRITE_RESULT> extends Abst
3838
private static final String HISTOGRAM_ERROR_KEY = "Error";
3939

4040
private final int concurrency;
41-
protected boolean buildHistogram;
41+
private final boolean buildHistogram;
42+
private final Map<String, Object> histogramError;
4243

43-
protected long postProcessingMillis = -1L;
44-
protected Optional<DoubleHistogram> maybeCentralityHistogram = Optional.empty();
45-
46-
protected Map<String, Object> histogramError;
47-
48-
protected @Nullable Map<String, Object> centralityHistogramOrNull() {
49-
return maybeCentralityHistogram.map(histogram -> MapUtil.map(
50-
"min", histogram.getMinValue(),
51-
"mean", histogram.getMean(),
52-
"max", histogram.getMaxValue(),
53-
"p50", histogram.getValueAtPercentile(50),
54-
"p75", histogram.getValueAtPercentile(75),
55-
"p90", histogram.getValueAtPercentile(90),
56-
"p95", histogram.getValueAtPercentile(95),
57-
"p99", histogram.getValueAtPercentile(99),
58-
"p999", histogram.getValueAtPercentile(99.9)
59-
)).orElse(histogramError);
60-
}
44+
private LongToDoubleFunction centralityFunction;
45+
private ScalarScaler.Variant scaler;
6146

62-
protected LongToDoubleFunction centralityFunction = null;
63-
protected ScalarScaler.Variant scaler;
47+
protected long postProcessingMillis = -1L;
48+
protected Map<String, Object> centralityHistogram;
6449

6550
protected AbstractCentralityResultBuilder(
6651
ProcedureCallContext callContext,
@@ -87,25 +72,46 @@ public AbstractCentralityResultBuilder<WRITE_RESULT> withScalerVariant(ScalarSca
8772

8873
@Override
8974
public WRITE_RESULT build() {
90-
final ProgressTimer timer = ProgressTimer.start();
75+
var timer = ProgressTimer.start();
76+
var maybeCentralityHistogram = computeCentralityHistogram();
77+
this.centralityHistogram = centralityHistogramResult(maybeCentralityHistogram);
78+
79+
timer.stop();
80+
this.postProcessingMillis = timer.getDuration();
9181

82+
return buildResult();
83+
}
84+
85+
@NotNull
86+
private Optional<DoubleHistogram> computeCentralityHistogram() {
9287
var logScaler = scaler == ScalarScaler.Variant.LOG;
9388
if (buildHistogram && centralityFunction != null) {
9489
if (logScaler) {
9590
logScalerHistogramError();
9691
} else {
97-
maybeCentralityHistogram = Optional.of(CentralityStatistics.histogram(
92+
return Optional.of(CentralityStatistics.histogram(
9893
nodeCount,
9994
centralityFunction,
10095
Pools.DEFAULT,
10196
concurrency
10297
));
10398
}
10499
}
105-
timer.stop();
106-
this.postProcessingMillis = timer.getDuration();
100+
return Optional.empty();
101+
}
107102

108-
return buildResult();
103+
private Map<String, Object> centralityHistogramResult(Optional<DoubleHistogram> maybeHistogram) {
104+
return maybeHistogram.map(histogram -> MapUtil.map(
105+
"min", histogram.getMinValue(),
106+
"mean", histogram.getMean(),
107+
"max", histogram.getMaxValue(),
108+
"p50", histogram.getValueAtPercentile(50),
109+
"p75", histogram.getValueAtPercentile(75),
110+
"p90", histogram.getValueAtPercentile(90),
111+
"p95", histogram.getValueAtPercentile(95),
112+
"p99", histogram.getValueAtPercentile(99),
113+
"p999", histogram.getValueAtPercentile(99.9)
114+
)).orElse(histogramError);
109115
}
110116

111117
private void logScalerHistogramError() {

alpha/alpha-algo/src/main/java/org/neo4j/gds/results/CentralityScore.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020
package org.neo4j.gds.results;
2121

2222
import org.jetbrains.annotations.Nullable;
23-
import org.neo4j.gds.result.AbstractCentralityResultBuilder;
2423
import org.neo4j.gds.config.WritePropertyConfig;
24+
import org.neo4j.gds.result.AbstractCentralityResultBuilder;
2525
import org.neo4j.internal.kernel.api.procs.ProcedureCallContext;
2626

2727
import java.util.Map;
@@ -73,7 +73,7 @@ public CentralityScore.Stats buildResult() {
7373
computeMillis,
7474
writeMillis,
7575
config instanceof WritePropertyConfig ? ((WritePropertyConfig) config).writeProperty() : "",
76-
centralityHistogramOrNull()
76+
centralityHistogram
7777
);
7878
}
7979
}

alpha/alpha-algo/src/main/java/org/neo4j/gds/results/PageRankScore.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020
package org.neo4j.gds.results;
2121

2222
import org.jetbrains.annotations.Nullable;
23-
import org.neo4j.gds.result.AbstractCentralityResultBuilder;
2423
import org.neo4j.gds.config.WritePropertyConfig;
24+
import org.neo4j.gds.result.AbstractCentralityResultBuilder;
2525
import org.neo4j.internal.kernel.api.procs.ProcedureCallContext;
2626

2727
import java.util.Map;
@@ -92,7 +92,7 @@ public Stats buildResult() {
9292
writeMillis,
9393
dampingFactor,
9494
config instanceof WritePropertyConfig ? ((WritePropertyConfig) config).writeProperty() : "",
95-
centralityHistogramOrNull()
95+
centralityHistogram
9696
);
9797
}
9898
}

proc/centrality/src/main/java/org/neo4j/gds/betweenness/BetweennessCentralityMutateProc.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ public MutateResult buildResult() {
137137
computeMillis,
138138
postProcessingMillis,
139139
mutateMillis,
140-
centralityHistogramOrNull(),
140+
centralityHistogram,
141141
sumCentrality,
142142
minCentrality,
143143
maxCentrality,

proc/centrality/src/main/java/org/neo4j/gds/betweenness/BetweennessCentralityStatsProc.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ protected Builder(ProcedureCallContext callContext, int concurrency) {
128128
@Override
129129
public StatsResult buildResult() {
130130
return new StatsResult(
131-
centralityHistogramOrNull(),
131+
centralityHistogram,
132132
sumCentrality,
133133
minCentrality,
134134
maxCentrality,

proc/centrality/src/main/java/org/neo4j/gds/betweenness/BetweennessCentralityWriteProc.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ public WriteResult buildResult() {
132132
computeMillis,
133133
postProcessingMillis,
134134
writeMillis,
135-
centralityHistogramOrNull(),
135+
centralityHistogram,
136136
sumCentrality,
137137
minCentrality,
138138
maxCentrality,

proc/centrality/src/main/java/org/neo4j/gds/degree/DegreeCentralityMutateProc.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ public DegreeCentralityMutateProc.MutateResult buildResult() {
127127
computeMillis,
128128
postProcessingMillis,
129129
mutateMillis,
130-
centralityHistogramOrNull(),
130+
centralityHistogram,
131131
config.toMap()
132132
);
133133
}

proc/centrality/src/main/java/org/neo4j/gds/degree/DegreeCentralityStatsProc.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ protected Builder(ProcedureCallContext callContext, int concurrency) {
112112
@Override
113113
public DegreeCentralityStatsProc.StatsResult buildResult() {
114114
return new DegreeCentralityStatsProc.StatsResult(
115-
centralityHistogramOrNull(),
115+
centralityHistogram,
116116
createMillis,
117117
computeMillis,
118118
postProcessingMillis,

proc/centrality/src/main/java/org/neo4j/gds/degree/DegreeCentralityWriteProc.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ protected WriteResult buildResult() {
123123
computeMillis,
124124
postProcessingMillis,
125125
writeMillis,
126-
centralityHistogramOrNull(),
126+
centralityHistogram,
127127
config.toMap()
128128
);
129129
}

proc/centrality/src/main/java/org/neo4j/gds/pagerank/PageRankMutateProc.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ public MutateResult buildResult() {
138138
return new MutateResult(
139139
ranIterations,
140140
didConverge,
141-
centralityHistogramOrNull(),
141+
centralityHistogram,
142142
createMillis,
143143
computeMillis,
144144
postProcessingMillis,

0 commit comments

Comments
 (0)