Skip to content

Commit db78ae7

Browse files
authored
test: Adding ITTracingTest to verify events and span attributes (whic… (#1514)
* test: Adding ITTracingTest to verify events and span attributes (which are not verified in ITE2ETracingTest) due to TraceClient API limitations. - This test uses InMemorySpanExporter to read the generated Otel span data by the test process to verify generated span data as it were before exporting to a backend. None of the span data is exported to a durable backend. - This test is still an E2E test as it requires a project to send RPCs to. * fix: fixing compilation error due to missing pom dependency. * test: Test for AllocateId and ReserveId rpcs * test: Commit/Put/Update/Delete tests * test: Added fixes and test for RunQuery event
1 parent 5c4f798 commit db78ae7

File tree

4 files changed

+621
-17
lines changed

4 files changed

+621
-17
lines changed

google-cloud-datastore/pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,12 @@
207207
<version>${opentelemetry.version}</version>
208208
<scope>test</scope>
209209
</dependency>
210+
<dependency>
211+
<groupId>io.opentelemetry</groupId>
212+
<artifactId>opentelemetry-sdk-testing</artifactId>
213+
<version>${opentelemetry.version}</version>
214+
<scope>test</scope>
215+
</dependency>
210216
<dependency>
211217
<groupId>io.opentelemetry</groupId>
212218
<artifactId>opentelemetry-sdk-trace</artifactId>

google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreImpl.java

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import com.google.common.collect.ImmutableMap;
3535
import com.google.common.collect.Iterables;
3636
import com.google.common.collect.Sets;
37+
import com.google.datastore.v1.CommitResponse;
3738
import com.google.datastore.v1.ExplainOptions;
3839
import com.google.datastore.v1.ReadOptions;
3940
import com.google.datastore.v1.ReserveIdsRequest;
@@ -290,8 +291,6 @@ com.google.datastore.v1.RunQueryResponse runQuery(
290291
? com.google.cloud.datastore.telemetry.TraceUtil.SPAN_NAME_TRANSACTION_RUN_QUERY
291292
: com.google.cloud.datastore.telemetry.TraceUtil.SPAN_NAME_RUN_QUERY);
292293
com.google.cloud.datastore.telemetry.TraceUtil.Span span = otelTraceUtil.startSpan(spanName);
293-
span.setAttribute("isTransactional", isTransactional);
294-
span.setAttribute("readConsistency", readOptions.getReadConsistency().toString());
295294

296295
try (com.google.cloud.datastore.telemetry.TraceUtil.Scope ignored = span.makeCurrent()) {
297296
RunQueryResponse response =
@@ -303,10 +302,17 @@ com.google.datastore.v1.RunQueryResponse runQuery(
303302
: TRANSACTION_OPERATION_EXCEPTION_HANDLER,
304303
getOptions().getClock());
305304
span.addEvent(
306-
spanName + ": Completed",
305+
spanName,
307306
new ImmutableMap.Builder<String, Object>()
308-
.put("Received", response.getBatch().getEntityResultsCount())
309-
.put("More results", response.getBatch().getMoreResults().toString())
307+
.put("response_count", response.getBatch().getEntityResultsCount())
308+
.put("transactional", isTransactional)
309+
.put("read_consistency", readOptions.getReadConsistency().toString())
310+
.put(
311+
"transaction_id",
312+
(isTransactional
313+
? requestPb.getReadOptions().getTransaction().toStringUtf8()
314+
: ""))
315+
.put("more_results", response.getBatch().getMoreResults().toString())
310316
.build());
311317
return response;
312318
} catch (RetryHelperException e) {
@@ -523,18 +529,18 @@ com.google.datastore.v1.LookupResponse lookup(
523529
? com.google.cloud.datastore.telemetry.TraceUtil.SPAN_NAME_TRANSACTION_LOOKUP
524530
: com.google.cloud.datastore.telemetry.TraceUtil.SPAN_NAME_LOOKUP);
525531
com.google.cloud.datastore.telemetry.TraceUtil.Span span = otelTraceUtil.startSpan(spanName);
526-
span.setAttribute("isTransactional", isTransactional);
527532

528533
try (com.google.cloud.datastore.telemetry.TraceUtil.Scope ignored = span.makeCurrent()) {
529534
return RetryHelper.runWithRetries(
530535
() -> {
531536
com.google.datastore.v1.LookupResponse response = datastoreRpc.lookup(requestPb);
532537
span.addEvent(
533-
spanName + ": Completed",
538+
spanName,
534539
new ImmutableMap.Builder<String, Object>()
535540
.put("Received", response.getFoundCount())
536541
.put("Missing", response.getMissingCount())
537542
.put("Deferred", response.getDeferredCount())
543+
.put("isTransactional", isTransactional)
538544
.build());
539545
return response;
540546
},
@@ -690,15 +696,25 @@ com.google.datastore.v1.CommitResponse commit(
690696
? com.google.cloud.datastore.telemetry.TraceUtil.SPAN_NAME_TRANSACTION_COMMIT
691697
: com.google.cloud.datastore.telemetry.TraceUtil.SPAN_NAME_COMMIT;
692698
com.google.cloud.datastore.telemetry.TraceUtil.Span span = otelTraceUtil.startSpan(spanName);
693-
span.setAttribute("isTransactional", isTransactional);
694699
try (com.google.cloud.datastore.telemetry.TraceUtil.Scope ignored = span.makeCurrent()) {
695-
return RetryHelper.runWithRetries(
696-
() -> datastoreRpc.commit(requestPb),
697-
retrySettings,
698-
requestPb.getTransaction().isEmpty()
699-
? EXCEPTION_HANDLER
700-
: TRANSACTION_OPERATION_EXCEPTION_HANDLER,
701-
getOptions().getClock());
700+
CommitResponse response =
701+
RetryHelper.runWithRetries(
702+
() -> datastoreRpc.commit(requestPb),
703+
retrySettings,
704+
requestPb.getTransaction().isEmpty()
705+
? EXCEPTION_HANDLER
706+
: TRANSACTION_OPERATION_EXCEPTION_HANDLER,
707+
getOptions().getClock());
708+
span.addEvent(
709+
spanName,
710+
new ImmutableMap.Builder<String, Object>()
711+
.put("doc_count", response.getMutationResultsCount())
712+
.put("transactional", isTransactional)
713+
.put(
714+
"transaction_id",
715+
isTransactional ? requestPb.getTransaction().toStringUtf8() : "")
716+
.build());
717+
return response;
702718
} catch (RetryHelperException e) {
703719
span.end(e);
704720
throw DatastoreException.translateAndThrow(e);

google-cloud-datastore/src/test/java/com/google/cloud/datastore/it/ITE2ETracingTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -334,15 +334,15 @@ public void before() throws Exception {
334334
.setNamespace(options.getNamespace())
335335
.build();
336336
KEY2 =
337-
Key.newBuilder(projectId, kind1, "key3", options.getDatabaseId())
337+
Key.newBuilder(projectId, kind1, "key2", options.getDatabaseId())
338338
.setNamespace(options.getNamespace())
339339
.build();
340340
KEY3 =
341341
Key.newBuilder(projectId, kind1, "key4", options.getDatabaseId())
342342
.setNamespace(options.getNamespace())
343343
.build();
344344
KEY4 =
345-
Key.newBuilder(projectId, kind1, "key2", options.getDatabaseId())
345+
Key.newBuilder(projectId, kind1, "key4", options.getDatabaseId())
346346
.setNamespace(options.getNamespace())
347347
.build();
348348
// Set up the tracer for custom TraceID injection

0 commit comments

Comments
 (0)