From bf5f0c7e7f38ef2c09a7229bbece70e7b346fbe4 Mon Sep 17 00:00:00 2001 From: Nick Dimiduk Date: Sat, 21 May 2022 00:13:23 +0200 Subject: [PATCH] HBASE-27052 TestAsyncTableScanner.testScanWrongColumnFamily is flaky (#4451) Signed-off-by: Andrew Purtell --- .../client/AbstractTestAsyncTableScan.java | 18 ++++++++++++++++-- .../hbase/client/TestAsyncTableScan.java | 7 ++++--- .../hbase/client/TestAsyncTableScanAll.java | 7 ++++--- .../hbase/client/TestAsyncTableScanner.java | 7 ++++--- .../hbase/client/TestRawAsyncTableScan.java | 7 ++++--- 5 files changed, 32 insertions(+), 14 deletions(-) diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/AbstractTestAsyncTableScan.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/AbstractTestAsyncTableScan.java index 34c9bf0eaeb..f4210b0e36e 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/AbstractTestAsyncTableScan.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/AbstractTestAsyncTableScan.java @@ -17,17 +17,22 @@ */ package org.apache.hadoop.hbase.client; +import static org.apache.hadoop.hbase.client.trace.hamcrest.AttributesMatchers.containsEntry; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.allOf; +import static org.hamcrest.Matchers.anyOf; +import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.endsWith; import static org.hamcrest.Matchers.hasItem; import static org.hamcrest.Matchers.hasProperty; +import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.isA; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThrows; import static org.junit.Assert.fail; import io.opentelemetry.sdk.trace.data.SpanData; +import io.opentelemetry.semconv.trace.attributes.SemanticAttributes; import java.io.IOException; import java.io.UncheckedIOException; import java.util.Arrays; @@ -46,6 +51,7 @@ import org.apache.hadoop.hbase.MiniClusterRule; import org.apache.hadoop.hbase.StartTestingClusterOption; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.Waiter; +import org.apache.hadoop.hbase.ipc.RemoteWithExtrasException; import org.apache.hadoop.hbase.regionserver.NoSuchColumnFamilyException; import org.apache.hadoop.hbase.trace.OpenTelemetryClassRule; import org.apache.hadoop.hbase.trace.OpenTelemetryTestRule; @@ -176,7 +182,8 @@ public abstract class AbstractTestAsyncTableScan { /** * Used by implementation classes to assert the correctness of spans having errors. */ - protected abstract void assertTraceError(final Matcher exceptionTypeNameMatcher); + protected abstract void + assertTraceError(final Matcher exceptionMatcher); protected final List convertFromBatchResult(List results) { assertEquals(0, results.size() % 2); @@ -269,7 +276,14 @@ public abstract class AbstractTestAsyncTableScan { } else { fail("Found unexpected Exception " + e); } - assertTraceError(endsWith(NoSuchColumnFamilyException.class.getName())); + assertTraceError(anyOf( + containsEntry(is(SemanticAttributes.EXCEPTION_TYPE), + endsWith(NoSuchColumnFamilyException.class.getName())), + allOf( + containsEntry(is(SemanticAttributes.EXCEPTION_TYPE), + endsWith(RemoteWithExtrasException.class.getName())), + containsEntry(is(SemanticAttributes.EXCEPTION_MESSAGE), + containsString(NoSuchColumnFamilyException.class.getName()))))); } private void testScan(int start, boolean startInclusive, int stop, boolean stopInclusive, 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 31fef318d5a..a0f38c15803 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 @@ -18,7 +18,7 @@ package org.apache.hadoop.hbase.client; import static org.apache.hadoop.hbase.client.trace.hamcrest.SpanDataMatchers.hasEnded; -import static org.apache.hadoop.hbase.client.trace.hamcrest.SpanDataMatchers.hasExceptionWithType; +import static org.apache.hadoop.hbase.client.trace.hamcrest.SpanDataMatchers.hasException; import static org.apache.hadoop.hbase.client.trace.hamcrest.SpanDataMatchers.hasName; import static org.apache.hadoop.hbase.client.trace.hamcrest.SpanDataMatchers.hasParentSpanId; import static org.apache.hadoop.hbase.client.trace.hamcrest.SpanDataMatchers.hasStatusWithCode; @@ -145,7 +145,8 @@ public class TestAsyncTableScan extends AbstractTestAsyncTableScan { } @Override - protected void assertTraceError(Matcher exceptionTypeNameMatcher) { + protected void + assertTraceError(Matcher exceptionMatcher) { final String parentSpanName = testName.getMethodName(); final Matcher parentSpanMatcher = allOf(hasName(parentSpanName), hasEnded()); waitForSpan(parentSpanMatcher); @@ -163,7 +164,7 @@ public class TestAsyncTableScan extends AbstractTestAsyncTableScan { final Matcher scanOperationSpanMatcher = allOf(hasName(startsWith("SCAN " + TABLE_NAME.getNameWithNamespaceInclAsString())), hasParentSpanId(parentSpanId), hasStatusWithCode(StatusCode.ERROR), - hasExceptionWithType(exceptionTypeNameMatcher), hasEnded()); + hasException(exceptionMatcher), hasEnded()); assertThat(spans, hasItem(scanOperationSpanMatcher)); final String scanOperationSpanId = spans.stream().filter(scanOperationSpanMatcher::matches) .map(SpanData::getSpanId).findAny().orElseThrow(AssertionError::new); 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 eb81fbf93bf..cbb2541a109 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 @@ -18,7 +18,7 @@ package org.apache.hadoop.hbase.client; import static org.apache.hadoop.hbase.client.trace.hamcrest.SpanDataMatchers.hasEnded; -import static org.apache.hadoop.hbase.client.trace.hamcrest.SpanDataMatchers.hasExceptionWithType; +import static org.apache.hadoop.hbase.client.trace.hamcrest.SpanDataMatchers.hasException; import static org.apache.hadoop.hbase.client.trace.hamcrest.SpanDataMatchers.hasName; import static org.apache.hadoop.hbase.client.trace.hamcrest.SpanDataMatchers.hasParentSpanId; import static org.apache.hadoop.hbase.client.trace.hamcrest.SpanDataMatchers.hasStatusWithCode; @@ -116,7 +116,8 @@ public class TestAsyncTableScanAll extends AbstractTestAsyncTableScan { } @Override - protected void assertTraceError(Matcher exceptionTypeNameMatcher) { + protected void + assertTraceError(Matcher exceptionMatcher) { final String parentSpanName = testName.getMethodName(); final Matcher parentSpanMatcher = allOf(hasName(parentSpanName), hasEnded()); waitForSpan(parentSpanMatcher); @@ -134,7 +135,7 @@ public class TestAsyncTableScanAll extends AbstractTestAsyncTableScan { final Matcher scanOperationSpanMatcher = allOf(hasName(startsWith("SCAN " + TABLE_NAME.getNameWithNamespaceInclAsString())), hasParentSpanId(parentSpanId), hasStatusWithCode(StatusCode.ERROR), - hasExceptionWithType(exceptionTypeNameMatcher), hasEnded()); + hasException(exceptionMatcher), hasEnded()); assertThat(spans, hasItem(scanOperationSpanMatcher)); } } 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 2df5cf38822..10932a7da77 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 @@ -18,7 +18,7 @@ package org.apache.hadoop.hbase.client; import static org.apache.hadoop.hbase.client.trace.hamcrest.SpanDataMatchers.hasEnded; -import static org.apache.hadoop.hbase.client.trace.hamcrest.SpanDataMatchers.hasExceptionWithType; +import static org.apache.hadoop.hbase.client.trace.hamcrest.SpanDataMatchers.hasException; import static org.apache.hadoop.hbase.client.trace.hamcrest.SpanDataMatchers.hasName; import static org.apache.hadoop.hbase.client.trace.hamcrest.SpanDataMatchers.hasParentSpanId; import static org.apache.hadoop.hbase.client.trace.hamcrest.SpanDataMatchers.hasStatusWithCode; @@ -128,7 +128,8 @@ public class TestAsyncTableScanner extends AbstractTestAsyncTableScan { } @Override - protected void assertTraceError(Matcher exceptionTypeNameMatcher) { + protected void + assertTraceError(Matcher exceptionMatcher) { final String parentSpanName = testName.getMethodName(); final Matcher parentSpanMatcher = allOf(hasName(parentSpanName), hasEnded()); waitForSpan(parentSpanMatcher); @@ -146,7 +147,7 @@ public class TestAsyncTableScanner extends AbstractTestAsyncTableScan { final Matcher scanOperationSpanMatcher = allOf(hasName(startsWith("SCAN " + TABLE_NAME.getNameWithNamespaceInclAsString())), hasParentSpanId(parentSpanId), hasStatusWithCode(StatusCode.ERROR), - hasExceptionWithType(exceptionTypeNameMatcher), hasEnded()); + hasException(exceptionMatcher), hasEnded()); assertThat(spans, hasItem(scanOperationSpanMatcher)); } } 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 a0bff7fb0dc..1aba069ac49 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 @@ -18,7 +18,7 @@ package org.apache.hadoop.hbase.client; import static org.apache.hadoop.hbase.client.trace.hamcrest.SpanDataMatchers.hasEnded; -import static org.apache.hadoop.hbase.client.trace.hamcrest.SpanDataMatchers.hasExceptionWithType; +import static org.apache.hadoop.hbase.client.trace.hamcrest.SpanDataMatchers.hasException; import static org.apache.hadoop.hbase.client.trace.hamcrest.SpanDataMatchers.hasName; import static org.apache.hadoop.hbase.client.trace.hamcrest.SpanDataMatchers.hasParentSpanId; import static org.apache.hadoop.hbase.client.trace.hamcrest.SpanDataMatchers.hasStatusWithCode; @@ -142,7 +142,8 @@ public class TestRawAsyncTableScan extends AbstractTestAsyncTableScan { } @Override - protected void assertTraceError(Matcher exceptionTypeNameMatcher) { + protected void + assertTraceError(Matcher exceptionMatcher) { final String parentSpanName = testName.getMethodName(); final Matcher parentSpanMatcher = allOf(hasName(parentSpanName), hasEnded()); waitForSpan(parentSpanMatcher); @@ -160,7 +161,7 @@ public class TestRawAsyncTableScan extends AbstractTestAsyncTableScan { final Matcher scanOperationSpanMatcher = allOf(hasName(startsWith("SCAN " + TABLE_NAME.getNameWithNamespaceInclAsString())), hasParentSpanId(parentSpanId), hasStatusWithCode(StatusCode.ERROR), - hasExceptionWithType(exceptionTypeNameMatcher), hasEnded()); + hasException(exceptionMatcher), hasEnded()); assertThat(spans, hasItem(scanOperationSpanMatcher)); final String scanOperationSpanId = spans.stream().filter(scanOperationSpanMatcher::matches) .map(SpanData::getSpanId).findAny().orElseThrow(AssertionError::new);