Skip to content

Commit 56379cb

Browse files
committed
GH-5686 feat: add query-plan telemetry and tracking plumbing
1 parent a3ad055 commit 56379cb

28 files changed

Lines changed: 5994 additions & 218 deletions

File tree

core/common/iterator/src/main/java/org/eclipse/rdf4j/common/iteration/IndexReportingIterator.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,16 @@ public interface IndexReportingIterator {
2121

2222
String getIndexName();
2323

24+
default long getSourceRowsScannedActual() {
25+
return -1;
26+
}
27+
28+
default long getSourceRowsMatchedActual() {
29+
return -1;
30+
}
31+
32+
default long getSourceRowsFilteredActual() {
33+
return -1;
34+
}
35+
2436
}

core/query/src/main/java/org/eclipse/rdf4j/query/explanation/GenericPlanNode.java

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,19 @@ public class GenericPlanNode {
6666
// plans[0..n].totalTimeActual)
6767
private Double totalTimeActual;
6868

69+
// Telemetry counters captured while iterating this node during executed/timed explanations.
70+
private Long hasNextCallCountActual;
71+
private Long hasNextTrueCountActual;
72+
private Long hasNextTimeNanosActual;
73+
private Long nextCallCountActual;
74+
private Long nextTimeNanosActual;
75+
private Long joinRightIteratorsCreatedActual;
76+
private Long joinLeftBindingsConsumedActual;
77+
private Long joinRightBindingsConsumedActual;
78+
private Long sourceRowsScannedActual;
79+
private Long sourceRowsMatchedActual;
80+
private Long sourceRowsFilteredActual;
81+
6982
// true if this node introduces a new scope
7083
private Boolean newScope;
7184

@@ -176,6 +189,116 @@ public void setTotalTimeActual(Double totalTimeActual) {
176189
}
177190
}
178191

192+
public Long getHasNextCallCountActual() {
193+
return hasNextCallCountActual;
194+
}
195+
196+
public void setHasNextCallCountActual(Long hasNextCallCountActual) {
197+
if (hasNextCallCountActual != null && hasNextCallCountActual >= 0) {
198+
this.hasNextCallCountActual = hasNextCallCountActual;
199+
}
200+
}
201+
202+
public Long getHasNextTrueCountActual() {
203+
return hasNextTrueCountActual;
204+
}
205+
206+
public void setHasNextTrueCountActual(Long hasNextTrueCountActual) {
207+
if (hasNextTrueCountActual != null && hasNextTrueCountActual >= 0) {
208+
this.hasNextTrueCountActual = hasNextTrueCountActual;
209+
}
210+
}
211+
212+
public Long getHasNextTimeNanosActual() {
213+
return hasNextTimeNanosActual;
214+
}
215+
216+
public void setHasNextTimeNanosActual(Long hasNextTimeNanosActual) {
217+
if (hasNextTimeNanosActual != null && hasNextTimeNanosActual >= 0) {
218+
this.hasNextTimeNanosActual = hasNextTimeNanosActual;
219+
}
220+
}
221+
222+
public Long getNextCallCountActual() {
223+
return nextCallCountActual;
224+
}
225+
226+
public void setNextCallCountActual(Long nextCallCountActual) {
227+
if (nextCallCountActual != null && nextCallCountActual >= 0) {
228+
this.nextCallCountActual = nextCallCountActual;
229+
}
230+
}
231+
232+
public Long getNextTimeNanosActual() {
233+
return nextTimeNanosActual;
234+
}
235+
236+
public void setNextTimeNanosActual(Long nextTimeNanosActual) {
237+
if (nextTimeNanosActual != null && nextTimeNanosActual >= 0) {
238+
this.nextTimeNanosActual = nextTimeNanosActual;
239+
}
240+
}
241+
242+
public Long getJoinRightIteratorsCreatedActual() {
243+
return joinRightIteratorsCreatedActual;
244+
}
245+
246+
public void setJoinRightIteratorsCreatedActual(Long joinRightIteratorsCreatedActual) {
247+
if (joinRightIteratorsCreatedActual != null && joinRightIteratorsCreatedActual >= 0) {
248+
this.joinRightIteratorsCreatedActual = joinRightIteratorsCreatedActual;
249+
}
250+
}
251+
252+
public Long getJoinLeftBindingsConsumedActual() {
253+
return joinLeftBindingsConsumedActual;
254+
}
255+
256+
public void setJoinLeftBindingsConsumedActual(Long joinLeftBindingsConsumedActual) {
257+
if (joinLeftBindingsConsumedActual != null && joinLeftBindingsConsumedActual >= 0) {
258+
this.joinLeftBindingsConsumedActual = joinLeftBindingsConsumedActual;
259+
}
260+
}
261+
262+
public Long getJoinRightBindingsConsumedActual() {
263+
return joinRightBindingsConsumedActual;
264+
}
265+
266+
public void setJoinRightBindingsConsumedActual(Long joinRightBindingsConsumedActual) {
267+
if (joinRightBindingsConsumedActual != null && joinRightBindingsConsumedActual >= 0) {
268+
this.joinRightBindingsConsumedActual = joinRightBindingsConsumedActual;
269+
}
270+
}
271+
272+
public Long getSourceRowsScannedActual() {
273+
return sourceRowsScannedActual;
274+
}
275+
276+
public void setSourceRowsScannedActual(Long sourceRowsScannedActual) {
277+
if (sourceRowsScannedActual != null && sourceRowsScannedActual >= 0) {
278+
this.sourceRowsScannedActual = sourceRowsScannedActual;
279+
}
280+
}
281+
282+
public Long getSourceRowsMatchedActual() {
283+
return sourceRowsMatchedActual;
284+
}
285+
286+
public void setSourceRowsMatchedActual(Long sourceRowsMatchedActual) {
287+
if (sourceRowsMatchedActual != null && sourceRowsMatchedActual >= 0) {
288+
this.sourceRowsMatchedActual = sourceRowsMatchedActual;
289+
}
290+
}
291+
292+
public Long getSourceRowsFilteredActual() {
293+
return sourceRowsFilteredActual;
294+
}
295+
296+
public void setSourceRowsFilteredActual(Long sourceRowsFilteredActual) {
297+
if (sourceRowsFilteredActual != null && sourceRowsFilteredActual >= 0) {
298+
this.sourceRowsFilteredActual = sourceRowsFilteredActual;
299+
}
300+
}
301+
179302
public void setTimedOut(Boolean timedOut) {
180303
this.timedOut = timedOut;
181304
}

core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/EvaluationStrategy.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,14 @@ default void setTrackTime(boolean trackTime) {
148148
// no-op for backwards compatibility
149149
}
150150

151+
/**
152+
* Enable or disable time tracking for the query plan.
153+
*/
154+
@Experimental
155+
default boolean isTrackTime() {
156+
return false;
157+
}
158+
151159
QueryEvaluationMode getQueryEvaluationMode();
152160

153161
void setQueryEvaluationMode(QueryEvaluationMode queryEvaluationMode);

0 commit comments

Comments
 (0)