|
37 | 37 | import org.apache.kafka.streams.processor.internals.InternalProcessorContext; |
38 | 38 | import org.apache.kafka.streams.processor.internals.ProcessorStateManager; |
39 | 39 | import org.apache.kafka.streams.processor.internals.metrics.StreamsMetricsImpl; |
| 40 | +import org.apache.kafka.streams.query.PositionBound; |
| 41 | +import org.apache.kafka.streams.query.Query; |
| 42 | +import org.apache.kafka.streams.query.QueryConfig; |
| 43 | +import org.apache.kafka.streams.query.QueryResult; |
| 44 | +import org.apache.kafka.streams.query.RangeQuery; |
| 45 | +import org.apache.kafka.streams.query.TimestampedRangeQuery; |
40 | 46 | import org.apache.kafka.streams.state.KeyValueIterator; |
41 | 47 | import org.apache.kafka.streams.state.KeyValueStore; |
42 | 48 | import org.apache.kafka.streams.state.ValueAndTimestamp; |
@@ -451,6 +457,56 @@ public void shouldTrackOpenIteratorsMetric() { |
451 | 457 | assertThat((Long) openIteratorsMetric.metricValue(), equalTo(0L)); |
452 | 458 | } |
453 | 459 |
|
| 460 | + @Test |
| 461 | + public void shouldTrackOpenIteratorsMetricForRangeQuery() { |
| 462 | + assertTracksOpenIteratorsMetricForQuery( |
| 463 | + RangeQuery.<String, String>withNoBounds() |
| 464 | + ); |
| 465 | + } |
| 466 | + |
| 467 | + @Test |
| 468 | + public void shouldTrackOpenIteratorsMetricForTimestampedRangeQuery() { |
| 469 | + assertTracksOpenIteratorsMetricForQuery( |
| 470 | + TimestampedRangeQuery.<String, String>withNoBounds() |
| 471 | + ); |
| 472 | + } |
| 473 | + |
| 474 | + @SuppressWarnings({"rawtypes", "unchecked"}) |
| 475 | + private void assertTracksOpenIteratorsMetricForQuery(final Query<?> query) { |
| 476 | + setUp(); |
| 477 | + |
| 478 | + final QueryResult<KeyValueIterator<Bytes, byte[]>> rawResult = |
| 479 | + QueryResult.forResult(KeyValueIterators.emptyIterator()); |
| 480 | + |
| 481 | + when(inner.query( |
| 482 | + any(), |
| 483 | + any(PositionBound.class), |
| 484 | + any(QueryConfig.class) |
| 485 | + )).thenReturn((QueryResult) rawResult); |
| 486 | + |
| 487 | + init(); |
| 488 | + |
| 489 | + final KafkaMetric openIteratorsMetric = metric("num-open-iterators"); |
| 490 | + assertThat(openIteratorsMetric, not(nullValue())); |
| 491 | + assertThat((Long) openIteratorsMetric.metricValue(), equalTo(0L)); |
| 492 | + |
| 493 | + final QueryResult<?> result = metered.query( |
| 494 | + query, |
| 495 | + PositionBound.unbounded(), |
| 496 | + new QueryConfig(false) |
| 497 | + ); |
| 498 | + |
| 499 | + assertTrue(result.isSuccess()); |
| 500 | + |
| 501 | + try (final KeyValueIterator<?, ?> unused = |
| 502 | + (KeyValueIterator<?, ?>) result.getResult()) { |
| 503 | + assertThat((Long) openIteratorsMetric.metricValue(), equalTo(1L)); |
| 504 | + } |
| 505 | + |
| 506 | + assertThat((Long) openIteratorsMetric.metricValue(), equalTo(0L)); |
| 507 | + } |
| 508 | + |
| 509 | + |
454 | 510 | @SuppressWarnings("unused") |
455 | 511 | @Test |
456 | 512 | public void shouldTimeIteratorDuration() { |
|
0 commit comments