diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/AbstractBaseUnitOfWork.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/AbstractBaseUnitOfWork.java index ef624ea841..ff159c681c 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/AbstractBaseUnitOfWork.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/AbstractBaseUnitOfWork.java @@ -165,6 +165,11 @@ B setSpan(@Nullable Span span) { this.span = Preconditions.checkNotNull(builder.span); } + @Override + public Span getSpan() { + return this.span; + } + ApiFuture asyncEndUnitOfWorkSpan() { return this.statementExecutor.submit(this::endUnitOfWorkSpan); } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionImpl.java index 745188c17f..4ab3f7fa86 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionImpl.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionImpl.java @@ -96,7 +96,6 @@ class ConnectionImpl implements Connection { private static final String SINGLE_USE_TRANSACTION = "SingleUseTransaction"; private static final String READ_ONLY_TRANSACTION = "ReadOnlyTransaction"; private static final String READ_WRITE_TRANSACTION = "ReadWriteTransaction"; - private static final String DML_BATCH = "DmlBatch"; private static final String DDL_BATCH = "DdlBatch"; private static final String DDL_STATEMENT = "DdlStatement"; @@ -1932,7 +1931,8 @@ UnitOfWork createNewUnitOfWork( .setStatementTag(statementTag) .setExcludeTxnFromChangeStreams(excludeTxnFromChangeStreams) .setRpcPriority(rpcPriority) - .setSpan(createSpanForUnitOfWork(DML_BATCH)) + // Use the transaction Span for the DML batch. + .setSpan(transactionStack.peek().getSpan()) .build(); case DDL_BATCH: return DdlBatch.newBuilder() diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/UnitOfWork.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/UnitOfWork.java index 577cd39d20..9a5e919724 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/UnitOfWork.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/UnitOfWork.java @@ -31,6 +31,7 @@ import com.google.cloud.spanner.TransactionContext; import com.google.cloud.spanner.connection.AbstractStatementParser.ParsedStatement; import com.google.spanner.v1.ResultSetStats; +import io.opentelemetry.api.trace.Span; import java.util.concurrent.ExecutionException; import javax.annotation.Nonnull; @@ -77,6 +78,9 @@ public boolean isActive() { /** @return true if this unit of work is still active. */ boolean isActive(); + /** @return the {@link Span} that is used by this {@link UnitOfWork}. */ + Span getSpan(); + /** Returns true if this transaction can only be used for a single statement. */ boolean isSingleUse();