From bac086ee646720b078d7d21478dbf542ead41a08 Mon Sep 17 00:00:00 2001 From: Nick Dimiduk Date: Fri, 12 Dec 2025 16:58:57 +0100 Subject: [PATCH 1/2] HBASE-29759 TestAsyncTableScan fails with tracing assert error (#7538) Retrieve the most recent span when validating results. Signed-off-by: Duo Zhang --- .../org/apache/hadoop/hbase/client/TestAsyncTableScan.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncTableScan.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncTableScan.java index efd76677373d..8479bd052214 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncTableScan.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncTableScan.java @@ -120,7 +120,8 @@ protected void assertTraceContinuity() { hasParentSpanId(parentSpanId), hasStatusWithCode(StatusCode.OK), hasEnded()); waitForSpan(scanOperationSpanMatcher); final String scanOperationSpanId = spanStream().filter(scanOperationSpanMatcher::matches) - .map(SpanData::getSpanId).findAny().get(); + .max((a, b) -> Long.compare(a.getEndEpochNanos(), b.getEndEpochNanos())) + .map(SpanData::getSpanId).get(); final Matcher onNextMatcher = hasName("TracedScanResultConsumer#onNext"); waitForSpan(onNextMatcher); @@ -157,7 +158,8 @@ protected void assertTraceContinuity() { hasException(exceptionMatcher), hasEnded()); waitForSpan(scanOperationSpanMatcher); final String scanOperationSpanId = spanStream().filter(scanOperationSpanMatcher::matches) - .map(SpanData::getSpanId).findAny().get(); + .max((a, b) -> Long.compare(a.getEndEpochNanos(), b.getEndEpochNanos())) + .map(SpanData::getSpanId).get(); final Matcher onErrorMatcher = hasName("TracedScanResultConsumer#onError"); waitForSpan(onErrorMatcher); From 976cbfa5d12cd6dd58808e68baeba19d7638db8e Mon Sep 17 00:00:00 2001 From: Nick Dimiduk Date: Wed, 17 Dec 2025 10:09:24 +0100 Subject: [PATCH 2/2] HBASE-29759 TestAsyncTableScan fails with tracing assert error (addendum) (#7557) Signed-off-by: Duo Zhang --- .../hadoop/hbase/client/TestAsyncTableScan.java | 10 ++++++---- .../hbase/client/TestAsyncTableScanAll.java | 10 ++++++---- .../hbase/client/TestAsyncTableScanner.java | 10 ++++++---- .../hbase/client/TestRawAsyncTableScan.java | 16 ++++++++++------ 4 files changed, 28 insertions(+), 18 deletions(-) diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncTableScan.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncTableScan.java index 8479bd052214..7cdb58c12604 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncTableScan.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncTableScan.java @@ -112,8 +112,9 @@ protected void assertTraceContinuity() { stringTraceRenderer.render(logger::debug); } - final String parentSpanId = - spanStream().filter(parentSpanMatcher::matches).map(SpanData::getSpanId).findAny().get(); + final String parentSpanId = spanStream().filter(parentSpanMatcher::matches) + .max((a, b) -> Long.compare(a.getEndEpochNanos(), b.getEndEpochNanos())) + .map(SpanData::getSpanId).get(); final Matcher scanOperationSpanMatcher = allOf(hasName(startsWith("SCAN " + TABLE_NAME.getNameWithNamespaceInclAsString())), @@ -149,8 +150,9 @@ protected void assertTraceContinuity() { stringTraceRenderer.render(logger::debug); } - final String parentSpanId = - spanStream().filter(parentSpanMatcher::matches).map(SpanData::getSpanId).findAny().get(); + final String parentSpanId = spanStream().filter(parentSpanMatcher::matches) + .max((a, b) -> Long.compare(a.getEndEpochNanos(), b.getEndEpochNanos())) + .map(SpanData::getSpanId).get(); final Matcher scanOperationSpanMatcher = allOf(hasName(startsWith("SCAN " + TABLE_NAME.getNameWithNamespaceInclAsString())), diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncTableScanAll.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncTableScanAll.java index a59f1fa355be..8f2d3c5e814a 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncTableScanAll.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncTableScanAll.java @@ -102,8 +102,9 @@ protected void assertTraceContinuity() { stringTraceRenderer.render(logger::debug); } - final String parentSpanId = - spanStream().filter(parentSpanMatcher::matches).map(SpanData::getSpanId).findAny().get(); + final String parentSpanId = spanStream().filter(parentSpanMatcher::matches) + .max((a, b) -> Long.compare(a.getEndEpochNanos(), b.getEndEpochNanos())) + .map(SpanData::getSpanId).get(); final Matcher scanOperationSpanMatcher = allOf(hasName(startsWith("SCAN " + TABLE_NAME.getNameWithNamespaceInclAsString())), @@ -124,8 +125,9 @@ protected void assertTraceContinuity() { stringTraceRenderer.render(logger::debug); } - final String parentSpanId = - spanStream().filter(parentSpanMatcher::matches).map(SpanData::getSpanId).findAny().get(); + final String parentSpanId = spanStream().filter(parentSpanMatcher::matches) + .max((a, b) -> Long.compare(a.getEndEpochNanos(), b.getEndEpochNanos())) + .map(SpanData::getSpanId).get(); final Matcher scanOperationSpanMatcher = allOf(hasName(startsWith("SCAN " + TABLE_NAME.getNameWithNamespaceInclAsString())), diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncTableScanner.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncTableScanner.java index 0da3e0ded58a..54552639c75e 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncTableScanner.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncTableScanner.java @@ -115,8 +115,9 @@ protected void assertTraceContinuity() { stringTraceRenderer.render(logger::debug); } - final String parentSpanId = - spanStream().filter(parentSpanMatcher::matches).map(SpanData::getSpanId).findAny().get(); + final String parentSpanId = spanStream().filter(parentSpanMatcher::matches) + .max((a, b) -> Long.compare(a.getEndEpochNanos(), b.getEndEpochNanos())) + .map(SpanData::getSpanId).get(); waitForSpan(allOf(hasName(startsWith("SCAN " + TABLE_NAME.getNameWithNamespaceInclAsString())), hasParentSpanId(parentSpanId), hasStatusWithCode(StatusCode.OK), hasEnded())); @@ -135,8 +136,9 @@ protected void assertTraceContinuity() { stringTraceRenderer.render(logger::debug); } - final String parentSpanId = - spanStream().filter(parentSpanMatcher::matches).map(SpanData::getSpanId).findAny().get(); + final String parentSpanId = spanStream().filter(parentSpanMatcher::matches) + .max((a, b) -> Long.compare(a.getEndEpochNanos(), b.getEndEpochNanos())) + .map(SpanData::getSpanId).get(); final Matcher scanOperationSpanMatcher = allOf(hasName(startsWith("SCAN " + TABLE_NAME.getNameWithNamespaceInclAsString())), diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestRawAsyncTableScan.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestRawAsyncTableScan.java index b7a8fc9a0178..758e1245bde2 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestRawAsyncTableScan.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestRawAsyncTableScan.java @@ -107,8 +107,9 @@ protected void assertTraceContinuity() { stringTraceRenderer.render(logger::debug); } - final String parentSpanId = - spanStream().filter(parentSpanMatcher::matches).map(SpanData::getSpanId).findAny().get(); + final String parentSpanId = spanStream().filter(parentSpanMatcher::matches) + .max((a, b) -> Long.compare(a.getEndEpochNanos(), b.getEndEpochNanos())) + .map(SpanData::getSpanId).get(); final Matcher scanOperationSpanMatcher = allOf(hasName(startsWith("SCAN " + TABLE_NAME.getNameWithNamespaceInclAsString())), @@ -116,7 +117,8 @@ protected void assertTraceContinuity() { waitForSpan(scanOperationSpanMatcher); final String scanOperationSpanId = spanStream().filter(scanOperationSpanMatcher::matches) - .map(SpanData::getSpanId).findAny().get(); + .max((a, b) -> Long.compare(a.getEndEpochNanos(), b.getEndEpochNanos())) + .map(SpanData::getSpanId).get(); final Matcher onNextMatcher = hasName("TracedAdvancedScanResultConsumer#onNext"); waitForSpan(onNextMatcher); spanStream().filter(onNextMatcher::matches) @@ -145,8 +147,9 @@ protected void assertTraceContinuity() { stringTraceRenderer.render(logger::debug); } - final String parentSpanId = - spanStream().filter(parentSpanMatcher::matches).map(SpanData::getSpanId).findAny().get(); + final String parentSpanId = spanStream().filter(parentSpanMatcher::matches) + .max((a, b) -> Long.compare(a.getEndEpochNanos(), b.getEndEpochNanos())) + .map(SpanData::getSpanId).get(); final Matcher scanOperationSpanMatcher = allOf(hasName(startsWith("SCAN " + TABLE_NAME.getNameWithNamespaceInclAsString())), @@ -154,7 +157,8 @@ protected void assertTraceContinuity() { hasException(exceptionMatcher), hasEnded()); waitForSpan(scanOperationSpanMatcher); final String scanOperationSpanId = spanStream().filter(scanOperationSpanMatcher::matches) - .map(SpanData::getSpanId).findAny().get(); + .max((a, b) -> Long.compare(a.getEndEpochNanos(), b.getEndEpochNanos())) + .map(SpanData::getSpanId).get(); final Matcher onCompleteMatcher = hasName("TracedAdvancedScanResultConsumer#onError"); waitForSpan(onCompleteMatcher);