From 74d25b91fb289117176becf98ad8d43a4188c293 Mon Sep 17 00:00:00 2001 From: Sydney Munro Date: Mon, 11 Nov 2024 10:49:18 -0800 Subject: [PATCH 1/2] feat: instrument HTTP readAllBytes --- .../google/cloud/storage/spi/v1/HttpStorageRpc.java | 7 ++++++- .../cloud/storage/ITHttpOpenTelemetryTest.java | 13 +++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/spi/v1/HttpStorageRpc.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/spi/v1/HttpStorageRpc.java index 45366e5e1c..05fce30f9a 100644 --- a/google-cloud-storage/src/main/java/com/google/cloud/storage/spi/v1/HttpStorageRpc.java +++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/spi/v1/HttpStorageRpc.java @@ -791,9 +791,11 @@ public StorageObject compose( @Override public byte[] load(StorageObject from, Map options) { + OpenTelemetryTraceUtil.Span otelSpan = + openTelemetryTraceUtil.startSpan("load", this.getClass().getName()); Span span = startSpan(HttpStorageRpcSpans.SPAN_NAME_LOAD); Scope scope = tracer.withSpan(span); - try { + try (OpenTelemetryTraceUtil.Scope unused = otelSpan.makeCurrent()) { Storage.Objects.Get getRequest = storage .objects() @@ -812,9 +814,12 @@ public byte[] load(StorageObject from, Map options) { getRequest.executeMedia().download(out); return out.toByteArray(); } catch (IOException ex) { + otelSpan.recordException(ex); + otelSpan.setStatus(StatusCode.ERROR, ex.getClass().getSimpleName()); span.setStatus(Status.UNKNOWN.withDescription(ex.getMessage())); throw translate(ex); } finally { + otelSpan.end(); scope.close(); span.end(HttpStorageRpcSpans.END_SPAN_OPTIONS); } diff --git a/google-cloud-storage/src/test/java/com/google/cloud/storage/ITHttpOpenTelemetryTest.java b/google-cloud-storage/src/test/java/com/google/cloud/storage/ITHttpOpenTelemetryTest.java index afe7884445..84a3e83015 100644 --- a/google-cloud-storage/src/test/java/com/google/cloud/storage/ITHttpOpenTelemetryTest.java +++ b/google-cloud-storage/src/test/java/com/google/cloud/storage/ITHttpOpenTelemetryTest.java @@ -141,6 +141,19 @@ public void runCopy() { Assert.assertTrue(spanData.stream().anyMatch(x -> x.getName().contains("rewrite"))); } + @Test + public void runReadAllBytes() { + BlobInfo blobInfo = + BlobInfo.newBuilder(blobId).setContentType("text/plain").build(); + storage.create(blobInfo, helloWorldTextBytes); + byte[] read = storage.readAllBytes(blobId); + TestExporter testExported = (TestExporter) exporter; + List spanData = testExported.getExportedSpans(); + checkCommonAttributes(spanData); + Assert.assertTrue(spanData.stream().anyMatch(x -> x.getName().contains("load"))); + + } + private void checkCommonAttributes(List spanData) { for (SpanData span : spanData) { Assert.assertEquals("Storage", getAttributeValue(span, "gcp.client.service")); From d06e6c1d097590e827f452e5c4c700a62ff64205 Mon Sep 17 00:00:00 2001 From: Sydney Munro Date: Mon, 11 Nov 2024 11:54:20 -0800 Subject: [PATCH 2/2] lint --- .../com/google/cloud/storage/ITHttpOpenTelemetryTest.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/google-cloud-storage/src/test/java/com/google/cloud/storage/ITHttpOpenTelemetryTest.java b/google-cloud-storage/src/test/java/com/google/cloud/storage/ITHttpOpenTelemetryTest.java index 84a3e83015..be5efedec3 100644 --- a/google-cloud-storage/src/test/java/com/google/cloud/storage/ITHttpOpenTelemetryTest.java +++ b/google-cloud-storage/src/test/java/com/google/cloud/storage/ITHttpOpenTelemetryTest.java @@ -143,15 +143,13 @@ public void runCopy() { @Test public void runReadAllBytes() { - BlobInfo blobInfo = - BlobInfo.newBuilder(blobId).setContentType("text/plain").build(); + BlobInfo blobInfo = BlobInfo.newBuilder(blobId).setContentType("text/plain").build(); storage.create(blobInfo, helloWorldTextBytes); byte[] read = storage.readAllBytes(blobId); TestExporter testExported = (TestExporter) exporter; List spanData = testExported.getExportedSpans(); checkCommonAttributes(spanData); Assert.assertTrue(spanData.stream().anyMatch(x -> x.getName().contains("load"))); - } private void checkCommonAttributes(List spanData) {