HBASE-26472 Adhere to semantic conventions regarding table data operations (addendum)
Ensure table data operations emit one and only one span.
This commit is contained in:
parent
5e01534494
commit
94e126fecb
|
@ -433,11 +433,6 @@ public class HTable implements Table {
|
||||||
@Override
|
@Override
|
||||||
public void batch(final List<? extends Row> actions, final Object[] results)
|
public void batch(final List<? extends Row> actions, final Object[] results)
|
||||||
throws InterruptedException, IOException {
|
throws InterruptedException, IOException {
|
||||||
final Supplier<Span> supplier = new TableOperationSpanBuilder(connection)
|
|
||||||
.setTableName(tableName)
|
|
||||||
.setOperation(HBaseSemanticAttributes.Operation.BATCH)
|
|
||||||
.setContainerOperations(actions);
|
|
||||||
TraceUtil.traceWithIOException(() -> {
|
|
||||||
int rpcTimeout = writeRpcTimeoutMs;
|
int rpcTimeout = writeRpcTimeoutMs;
|
||||||
boolean hasRead = false;
|
boolean hasRead = false;
|
||||||
boolean hasWrite = false;
|
boolean hasWrite = false;
|
||||||
|
@ -459,7 +454,6 @@ public class HTable implements Table {
|
||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
throw (InterruptedIOException) new InterruptedIOException().initCause(e);
|
throw (InterruptedIOException) new InterruptedIOException().initCause(e);
|
||||||
}
|
}
|
||||||
}, supplier);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void batch(final List<? extends Row> actions, final Object[] results, int rpcTimeout)
|
public void batch(final List<? extends Row> actions, final Object[] results, int rpcTimeout)
|
||||||
|
@ -555,11 +549,6 @@ public class HTable implements Table {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void delete(final List<Delete> deletes) throws IOException {
|
public void delete(final List<Delete> deletes) throws IOException {
|
||||||
final Supplier<Span> supplier = new TableOperationSpanBuilder(connection)
|
|
||||||
.setTableName(tableName)
|
|
||||||
.setOperation(HBaseSemanticAttributes.Operation.BATCH)
|
|
||||||
.setContainerOperations(deletes);
|
|
||||||
TraceUtil.traceWithIOException(() -> {
|
|
||||||
Object[] results = new Object[deletes.size()];
|
Object[] results = new Object[deletes.size()];
|
||||||
try {
|
try {
|
||||||
batch(deletes, results, writeRpcTimeoutMs);
|
batch(deletes, results, writeRpcTimeoutMs);
|
||||||
|
@ -577,7 +566,6 @@ public class HTable implements Table {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, supplier);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -605,11 +593,6 @@ public class HTable implements Table {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void put(final List<Put> puts) throws IOException {
|
public void put(final List<Put> puts) throws IOException {
|
||||||
final Supplier<Span> supplier = new TableOperationSpanBuilder(connection)
|
|
||||||
.setTableName(tableName)
|
|
||||||
.setOperation(HBaseSemanticAttributes.Operation.BATCH)
|
|
||||||
.setContainerOperations(puts);
|
|
||||||
TraceUtil.traceWithIOException(() -> {
|
|
||||||
for (Put put : puts) {
|
for (Put put : puts) {
|
||||||
validatePut(put);
|
validatePut(put);
|
||||||
}
|
}
|
||||||
|
@ -619,7 +602,6 @@ public class HTable implements Table {
|
||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
throw (InterruptedIOException) new InterruptedIOException().initCause(e);
|
throw (InterruptedIOException) new InterruptedIOException().initCause(e);
|
||||||
}
|
}
|
||||||
}, supplier);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -29,6 +29,7 @@ import static org.hamcrest.MatcherAssert.assertThat;
|
||||||
import static org.hamcrest.Matchers.allOf;
|
import static org.hamcrest.Matchers.allOf;
|
||||||
import static org.hamcrest.Matchers.containsString;
|
import static org.hamcrest.Matchers.containsString;
|
||||||
import static org.hamcrest.Matchers.hasItem;
|
import static org.hamcrest.Matchers.hasItem;
|
||||||
|
import static org.hamcrest.Matchers.hasSize;
|
||||||
import static org.junit.Assert.fail;
|
import static org.junit.Assert.fail;
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
import static org.mockito.ArgumentMatchers.anyInt;
|
import static org.mockito.ArgumentMatchers.anyInt;
|
||||||
|
@ -41,9 +42,11 @@ import io.opentelemetry.sdk.testing.junit4.OpenTelemetryRule;
|
||||||
import io.opentelemetry.sdk.trace.data.SpanData;
|
import io.opentelemetry.sdk.trace.data.SpanData;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
import java.util.concurrent.ForkJoinPool;
|
import java.util.concurrent.ForkJoinPool;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
import org.apache.hadoop.conf.Configuration;
|
import org.apache.hadoop.conf.Configuration;
|
||||||
import org.apache.hadoop.hbase.Cell;
|
import org.apache.hadoop.hbase.Cell;
|
||||||
import org.apache.hadoop.hbase.CellBuilderFactory;
|
import org.apache.hadoop.hbase.CellBuilderFactory;
|
||||||
|
@ -253,11 +256,12 @@ public class TestAsyncTableTracing {
|
||||||
Waiter.waitFor(CONF, 1000, new MatcherPredicate<>(
|
Waiter.waitFor(CONF, 1000, new MatcherPredicate<>(
|
||||||
"waiting for span to emit",
|
"waiting for span to emit",
|
||||||
() -> traceRule.getSpans(), hasItem(spanLocator)));
|
() -> traceRule.getSpans(), hasItem(spanLocator)));
|
||||||
SpanData data = traceRule.getSpans()
|
List<SpanData> candidateSpans = traceRule.getSpans()
|
||||||
.stream()
|
.stream()
|
||||||
.filter(spanLocator::matches)
|
.filter(spanLocator::matches)
|
||||||
.findFirst()
|
.collect(Collectors.toList());
|
||||||
.orElseThrow(AssertionError::new);
|
assertThat(candidateSpans, hasSize(1));
|
||||||
|
SpanData data = candidateSpans.iterator().next();
|
||||||
assertThat(data, allOf(
|
assertThat(data, allOf(
|
||||||
hasName(expectedName),
|
hasName(expectedName),
|
||||||
hasKind(SpanKind.CLIENT),
|
hasKind(SpanKind.CLIENT),
|
||||||
|
|
|
@ -29,6 +29,7 @@ import static org.hamcrest.MatcherAssert.assertThat;
|
||||||
import static org.hamcrest.Matchers.allOf;
|
import static org.hamcrest.Matchers.allOf;
|
||||||
import static org.hamcrest.Matchers.containsString;
|
import static org.hamcrest.Matchers.containsString;
|
||||||
import static org.hamcrest.Matchers.hasItem;
|
import static org.hamcrest.Matchers.hasItem;
|
||||||
|
import static org.hamcrest.Matchers.hasSize;
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
import static org.mockito.ArgumentMatchers.anyBoolean;
|
import static org.mockito.ArgumentMatchers.anyBoolean;
|
||||||
import static org.mockito.ArgumentMatchers.anyInt;
|
import static org.mockito.ArgumentMatchers.anyInt;
|
||||||
|
@ -42,8 +43,10 @@ import io.opentelemetry.api.trace.StatusCode;
|
||||||
import io.opentelemetry.sdk.trace.data.SpanData;
|
import io.opentelemetry.sdk.trace.data.SpanData;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
import java.util.concurrent.ForkJoinPool;
|
import java.util.concurrent.ForkJoinPool;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
import org.apache.hadoop.hbase.Cell;
|
import org.apache.hadoop.hbase.Cell;
|
||||||
import org.apache.hadoop.hbase.CellBuilderFactory;
|
import org.apache.hadoop.hbase.CellBuilderFactory;
|
||||||
import org.apache.hadoop.hbase.CellBuilderType;
|
import org.apache.hadoop.hbase.CellBuilderType;
|
||||||
|
@ -251,11 +254,12 @@ public class TestHTableTracing extends TestTracingBase {
|
||||||
Waiter.waitFor(conf, 1000, new MatcherPredicate<>(
|
Waiter.waitFor(conf, 1000, new MatcherPredicate<>(
|
||||||
"waiting for span to emit",
|
"waiting for span to emit",
|
||||||
() -> TRACE_RULE.getSpans(), hasItem(spanLocator)));
|
() -> TRACE_RULE.getSpans(), hasItem(spanLocator)));
|
||||||
SpanData data = TRACE_RULE.getSpans()
|
List<SpanData> candidateSpans = TRACE_RULE.getSpans()
|
||||||
.stream()
|
.stream()
|
||||||
.filter(spanLocator::matches)
|
.filter(spanLocator::matches)
|
||||||
.findFirst()
|
.collect(Collectors.toList());
|
||||||
.orElseThrow(AssertionError::new);
|
assertThat(candidateSpans, hasSize(1));
|
||||||
|
SpanData data = candidateSpans.iterator().next();
|
||||||
assertThat(data, allOf(
|
assertThat(data, allOf(
|
||||||
hasName(expectedName),
|
hasName(expectedName),
|
||||||
hasKind(SpanKind.CLIENT),
|
hasKind(SpanKind.CLIENT),
|
||||||
|
|
Loading…
Reference in New Issue