Skip to content

Commit 522dbb1

Browse files
committed
GH-5691 CLI for running and storing query explanations
1 parent 7ecde98 commit 522dbb1

13 files changed

Lines changed: 391 additions & 142 deletions

File tree

testsuites/benchmark-common/src/main/java/org/eclipse/rdf4j/benchmark/common/plan/FeatureFlagCollector.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.util.Map;
2121
import java.util.Objects;
2222
import java.util.Set;
23+
import java.util.TreeSet;
2324
import java.util.function.Supplier;
2425
import java.util.stream.Collectors;
2526

@@ -51,7 +52,7 @@ public FeatureFlagCollector addSystemPropertiesWithPrefix(String propertyPrefix)
5152
.stringPropertyNames()
5253
.stream()
5354
.filter(name -> name.startsWith(propertyPrefix))
54-
.collect(Collectors.toCollection(java.util.TreeSet::new));
55+
.collect(Collectors.toCollection(TreeSet::new));
5556
keys.forEach(this::addSystemProperty);
5657
return this;
5758
}

testsuites/benchmark-common/src/main/java/org/eclipse/rdf4j/benchmark/common/plan/QueryPlanCapture.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
package org.eclipse.rdf4j.benchmark.common.plan;
1313

1414
import java.io.IOException;
15+
import java.io.InputStream;
16+
import java.nio.charset.StandardCharsets;
1517
import java.nio.file.Files;
1618
import java.nio.file.Path;
1719
import java.time.Instant;
@@ -22,6 +24,7 @@
2224
import java.util.Map;
2325
import java.util.Objects;
2426
import java.util.Optional;
27+
import java.util.Set;
2528
import java.util.UUID;
2629
import java.util.concurrent.TimeUnit;
2730
import java.util.function.Function;
@@ -181,7 +184,7 @@ public Optional<Path> findByUnoptimizedFingerprint(Path directory, String unopti
181184
}
182185

183186
private QueryPlanExplanation captureLevel(Explanation.Level level, Explanation explanation,
184-
java.util.Set<Explanation.Level> irRenderedLevels, Function<TupleExpr, String> tupleExprRenderer) {
187+
Set<Explanation.Level> irRenderedLevels, Function<TupleExpr, String> tupleExprRenderer) {
185188
QueryPlanExplanation captured = new QueryPlanExplanation();
186189
captured.setLevel(level.name());
187190
captured.setExplanationText(explanation.toString());
@@ -257,9 +260,11 @@ private static String resolveGitCommit() {
257260
if (!finished || process.exitValue() != 0) {
258261
return "unknown";
259262
}
260-
String output = new String(process.getInputStream().readAllBytes(), java.nio.charset.StandardCharsets.UTF_8)
261-
.trim();
262-
return output.isEmpty() ? "unknown" : output;
263+
try (InputStream stream = process.getInputStream()) {
264+
String output = new String(stream.readAllBytes(), StandardCharsets.UTF_8)
265+
.trim();
266+
return output.isEmpty() ? "unknown" : output;
267+
}
263268
} catch (Exception ignored) {
264269
return "unknown";
265270
} finally {

testsuites/benchmark/src/main/java/org/eclipse/rdf4j/benchmark/InitializationBenchmark.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,12 @@ abstract class InitializationBenchmark {
3636
@BenchmarkMode(Mode.AverageTime)
3737
@OutputTimeUnit(TimeUnit.MILLISECONDS)
3838
public void init() {
39-
getSail(null).init();
39+
SailRepository sail = getSail(null);
40+
try {
41+
sail.init();
42+
} finally {
43+
sail.shutDown();
44+
}
4045
}
4146

4247
}

testsuites/benchmark/src/main/java/org/eclipse/rdf4j/benchmark/ReasoningBenchmark.java

Lines changed: 98 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -53,46 +53,55 @@ public class ReasoningBenchmark {
5353
@Benchmark
5454
public void noReasoning() throws IOException {
5555
SailRepository sail = new SailRepository(new MemoryStore());
56+
try {
57+
try (SailRepositoryConnection connection = sail.getConnection()) {
58+
connection.begin();
5659

57-
try (SailRepositoryConnection connection = sail.getConnection()) {
58-
connection.begin();
60+
addRequiredResource(connection, "schema.ttl");
61+
addAllDataSingleTransaction(connection);
5962

60-
connection.add(resourceAsStream("schema.ttl"), "", RDFFormat.TURTLE);
61-
addAllDataSingleTransaction(connection);
62-
63-
connection.commit();
63+
connection.commit();
64+
}
65+
} finally {
66+
sail.shutDown();
6467
}
6568
}
6669

6770
@Benchmark
6871
public void noReasoningMultipleTransactions() throws IOException {
6972
SailRepository sail = new SailRepository(new MemoryStore());
73+
try {
74+
try (SailRepositoryConnection connection = sail.getConnection()) {
7075

71-
try (SailRepositoryConnection connection = sail.getConnection()) {
76+
connection.begin();
77+
addRequiredResource(connection, "schema.ttl");
78+
connection.commit();
7279

73-
connection.begin();
74-
connection.add(resourceAsStream("schema.ttl"), "", RDFFormat.TURTLE);
75-
connection.commit();
76-
77-
addAllDataMultipleTransactions(connection);
80+
addAllDataMultipleTransactions(connection);
7881

82+
}
83+
} finally {
84+
sail.shutDown();
7985
}
8086
}
8187

8288
@Benchmark
8389
public void forwardChainingSchemaCachingRDFSInferencer() throws IOException {
8490
SailRepository sail = new SailRepository(new SchemaCachingRDFSInferencer(new MemoryStore()));
91+
try {
92+
try (SailRepositoryConnection connection = sail.getConnection()) {
93+
connection.begin();
8594

86-
try (SailRepositoryConnection connection = sail.getConnection()) {
87-
connection.begin();
95+
addRequiredResource(connection, "schema.ttl");
96+
addAllDataSingleTransaction(connection);
8897

89-
connection.add(resourceAsStream("schema.ttl"), "", RDFFormat.TURTLE);
90-
addAllDataSingleTransaction(connection);
98+
connection.commit();
99+
}
91100

92-
connection.commit();
101+
checkSize(sail);
102+
} finally {
103+
sail.shutDown();
93104
}
94-
95-
checkSize(sail);
96105
}
97106

98107
private void checkSize(SailRepository sail) {
@@ -115,89 +124,121 @@ private int getSize(SailRepository sail) {
115124
@Benchmark
116125
public void forwardChainingSchemaCachingRDFSInferencerMultipleTransactions() throws IOException {
117126
SailRepository sail = new SailRepository(new SchemaCachingRDFSInferencer(new MemoryStore()));
127+
try {
128+
try (SailRepositoryConnection connection = sail.getConnection()) {
118129

119-
try (SailRepositoryConnection connection = sail.getConnection()) {
120-
121-
connection.begin();
122-
connection.add(resourceAsStream("schema.ttl"), "", RDFFormat.TURTLE);
123-
connection.commit();
130+
connection.begin();
131+
addRequiredResource(connection, "schema.ttl");
132+
connection.commit();
124133

125-
addAllDataMultipleTransactions(connection);
134+
addAllDataMultipleTransactions(connection);
126135

136+
}
137+
checkSize(sail);
138+
} finally {
139+
sail.shutDown();
127140
}
128-
checkSize(sail);
129-
130141
}
131142

132143
@Benchmark
133144
public void forwardChainingSchemaCachingRDFSInferencerSchema() throws IOException {
134-
SailRepository sail = new SailRepository(new SchemaCachingRDFSInferencer(new MemoryStore(), createSchema()));
135-
136-
try (SailRepositoryConnection connection = sail.getConnection()) {
137-
connection.begin();
138-
addAllDataSingleTransaction(connection);
139-
connection.commit();
145+
SailRepository schema = createSchema();
146+
SailRepository sail = new SailRepository(new SchemaCachingRDFSInferencer(new MemoryStore(), schema));
147+
try {
148+
try (SailRepositoryConnection connection = sail.getConnection()) {
149+
connection.begin();
150+
addAllDataSingleTransaction(connection);
151+
connection.commit();
152+
}
153+
checkSize(sail);
154+
} finally {
155+
try {
156+
sail.shutDown();
157+
} finally {
158+
schema.shutDown();
159+
}
140160
}
141-
checkSize(sail);
142-
143161
}
144162

145163
@Benchmark
146164
public void forwardChainingSchemaCachingRDFSInferencerMultipleTransactionsSchema() throws IOException {
147-
SailRepository sail = new SailRepository(new SchemaCachingRDFSInferencer(new MemoryStore(), createSchema()));
148-
149-
try (SailRepositoryConnection connection = sail.getConnection()) {
150-
addAllDataMultipleTransactions(connection);
165+
SailRepository schema = createSchema();
166+
SailRepository sail = new SailRepository(new SchemaCachingRDFSInferencer(new MemoryStore(), schema));
167+
try {
168+
try (SailRepositoryConnection connection = sail.getConnection()) {
169+
addAllDataMultipleTransactions(connection);
170+
}
171+
checkSize(sail);
172+
} finally {
173+
try {
174+
sail.shutDown();
175+
} finally {
176+
schema.shutDown();
177+
}
151178
}
152-
checkSize(sail);
153-
154179
}
155180

156181
private SailRepository createSchema() throws IOException {
157182
SailRepository schema = new SailRepository(new MemoryStore());
158183
try (SailRepositoryConnection schemaConnection = schema.getConnection()) {
159184
schemaConnection.begin();
160-
schemaConnection.add(resourceAsStream("schema.ttl"), "", RDFFormat.TURTLE);
185+
addRequiredResource(schemaConnection, "schema.ttl");
161186
schemaConnection.commit();
162187
}
163188
return schema;
164189
}
165190

166191
private void addAllDataSingleTransaction(SailRepositoryConnection connection) throws IOException {
167-
InputStream data = resourceAsStream("data.ttl");
192+
addOptionalResource(connection, "data.ttl");
168193

169-
if (data != null) {
170-
connection.add(data, "", RDFFormat.TURTLE);
194+
int counter = 0;
195+
while (true) {
196+
if (!addOptionalResource(connection, "data" + counter++ + ".ttl")) {
197+
break;
198+
}
171199
}
200+
}
201+
202+
private void addAllDataMultipleTransactions(SailRepositoryConnection connection) throws IOException {
203+
addOptionalResourceInTransaction(connection, "data.ttl");
172204

173205
int counter = 0;
174206
while (true) {
175-
data = resourceAsStream("data" + counter++ + ".ttl");
176-
if (data == null) {
207+
if (!addOptionalResourceInTransaction(connection, "data" + counter++ + ".ttl")) {
177208
break;
178209
}
179-
connection.add(data, "", RDFFormat.TURTLE);
180210
}
181211
}
182212

183-
private void addAllDataMultipleTransactions(SailRepositoryConnection connection) throws IOException {
184-
InputStream data = resourceAsStream("data.ttl");
213+
private void addRequiredResource(SailRepositoryConnection connection, String resourceName) throws IOException {
214+
try (InputStream data = resourceAsStream(resourceName)) {
215+
if (data == null) {
216+
throw new IOException("Resource not found: " + resourceName);
217+
}
218+
connection.add(data, "", RDFFormat.TURTLE);
219+
}
220+
}
185221

186-
if (data != null) {
187-
connection.begin();
222+
private boolean addOptionalResource(SailRepositoryConnection connection, String resourceName) throws IOException {
223+
try (InputStream data = resourceAsStream(resourceName)) {
224+
if (data == null) {
225+
return false;
226+
}
188227
connection.add(data, "", RDFFormat.TURTLE);
189-
connection.commit();
228+
return true;
190229
}
230+
}
191231

192-
int counter = 0;
193-
while (true) {
194-
data = resourceAsStream("data" + counter++ + ".ttl");
232+
private boolean addOptionalResourceInTransaction(SailRepositoryConnection connection, String resourceName)
233+
throws IOException {
234+
try (InputStream data = resourceAsStream(resourceName)) {
195235
if (data == null) {
196-
break;
236+
return false;
197237
}
198238
connection.begin();
199239
connection.add(data, "", RDFFormat.TURTLE);
200240
connection.commit();
241+
return true;
201242
}
202243
}
203244

testsuites/benchmark/src/main/java/org/eclipse/rdf4j/benchmark/ReasoningUpdateBenchmark.java

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -64,17 +64,18 @@ public class ReasoningUpdateBenchmark {
6464
@OutputTimeUnit(TimeUnit.MILLISECONDS)
6565
public void forwardChainingSchemaCachingRDFSInferencer() throws IOException {
6666
SailRepository sail = new SailRepository(new SchemaCachingRDFSInferencer(new MemoryStore()));
67+
try {
68+
try (SailRepositoryConnection connection = sail.getConnection()) {
69+
connection.begin();
70+
addRequiredResource(connection, "schema.ttl");
71+
connection.commit();
6772

68-
try (SailRepositoryConnection connection = sail.getConnection()) {
69-
connection.begin();
70-
connection.add(resourceAsStream("schema.ttl"), "", RDFFormat.TURTLE, schemaGraph);
71-
connection.commit();
72-
73-
addAllDataMultipleTransactions(connection);
74-
73+
addAllDataMultipleTransactions(connection);
74+
}
75+
checkSize(sail);
76+
} finally {
77+
sail.shutDown();
7578
}
76-
77-
checkSize(sail);
7879
}
7980

8081
private void checkSize(SailRepository sail) {
@@ -104,9 +105,13 @@ private void addAllDataMultipleTransactions(SailRepositoryConnection connection)
104105
}
105106
connection.commit();
106107

107-
connection.begin();
108-
connection.add(resourceAsStream("data" + i++ + ".ttl"), "", RDFFormat.TURTLE);
109-
connection.commit();
108+
try (InputStream data = resourceAsStream("data" + i++ + ".ttl")) {
109+
if (data != null) {
110+
connection.begin();
111+
connection.add(data, "", RDFFormat.TURTLE);
112+
connection.commit();
113+
}
114+
}
110115
}
111116
}
112117

@@ -117,9 +122,11 @@ private InputStream resourceAsStream(String resourceName) {
117122
this.expectedCount = Integer.parseInt(split[1]);
118123
String filename = split[0] + "/" + resourceName;
119124
String content = cache.computeIfAbsent(filename, (fn) -> {
120-
try {
121-
return IOUtils.toString(ReasoningUpdateBenchmark.class.getClassLoader().getResourceAsStream(fn),
122-
StandardCharsets.UTF_8);
125+
try (InputStream stream = ReasoningUpdateBenchmark.class.getClassLoader().getResourceAsStream(fn)) {
126+
if (stream == null) {
127+
throw new IllegalStateException("Resource not found: " + fn);
128+
}
129+
return IOUtils.toString(stream, StandardCharsets.UTF_8);
123130
} catch (IOException e) {
124131
throw new RuntimeException(e);
125132
}
@@ -129,4 +136,13 @@ private InputStream resourceAsStream(String resourceName) {
129136

130137
}
131138

139+
private void addRequiredResource(SailRepositoryConnection connection, String resourceName) throws IOException {
140+
try (InputStream schemaStream = resourceAsStream(resourceName)) {
141+
if (schemaStream == null) {
142+
throw new IOException("Resource not found: " + resourceName);
143+
}
144+
connection.add(schemaStream, "", RDFFormat.TURTLE, schemaGraph);
145+
}
146+
}
147+
132148
}

0 commit comments

Comments
 (0)