Skip to content

Commit 2ea51a6

Browse files
committed
test and changes
1 parent 266b837 commit 2ea51a6

File tree

5 files changed

+100
-122
lines changed

5 files changed

+100
-122
lines changed

google-cloud-spanner/pom.xml

Lines changed: 47 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@
1717
<site.installationModule>google-cloud-spanner</site.installationModule>
1818
<opencensus.version>0.31.1</opencensus.version>
1919
<spanner.testenv.config.class>com.google.cloud.spanner.GceTestEnvConfig</spanner.testenv.config.class>
20-
<spanner.testenv.instance>projects/span-cloud-testing/instances/gargsurbhi-testing</spanner.testenv.instance>
21-
<spanner.gce.config.project_id>span-cloud-testing</spanner.gce.config.project_id>
20+
<spanner.testenv.instance>projects/gcloud-devel/instances/spanner-testing-east1</spanner.testenv.instance>
21+
<spanner.gce.config.project_id>gcloud-devel</spanner.gce.config.project_id>
2222
<spanner.testenv.kms_key.name>projects/gcloud-devel/locations/us-east1/keyRings/cmek-test-key-ring/cryptoKeys/cmek-test-key</spanner.testenv.kms_key.name>
2323
</properties>
2424

@@ -265,12 +265,6 @@
265265
<dependency>
266266
<groupId>com.google.cloud.opentelemetry</groupId>
267267
<artifactId>detector-resources-support</artifactId>
268-
<version>0.33.0</version>
269-
</dependency>
270-
<dependency>
271-
<groupId>com.google.cloud.opentelemetry</groupId>
272-
<artifactId>exporter-metrics</artifactId>
273-
<version>0.33.0</version>
274268
</dependency>
275269
<dependency>
276270
<groupId>com.google.cloud</groupId>
@@ -451,6 +445,7 @@
451445
<dependency>
452446
<groupId>io.opentelemetry</groupId>
453447
<artifactId>opentelemetry-sdk-trace</artifactId>
448+
<scope>test</scope>
454449
</dependency>
455450
<dependency>
456451
<groupId>io.opentelemetry</groupId>
@@ -461,6 +456,7 @@
461456
<groupId>com.google.cloud.opentelemetry</groupId>
462457
<artifactId>exporter-trace</artifactId>
463458
<version>0.33.0</version>
459+
<scope>test</scope>
464460
</dependency>
465461
<dependency>
466462
<groupId>com.google.cloud</groupId>
@@ -509,10 +505,10 @@
509505
<classpathScope>test</classpathScope>
510506
<executable>java</executable>
511507
<arguments>
512-
<argument>-classpath</argument>
513-
<classpath/>
514-
<argument>org.openjdk.jmh.Main</argument>
515-
<argument>${benchmark.name}</argument>
508+
<argument>-classpath</argument>
509+
<classpath/>
510+
<argument>org.openjdk.jmh.Main</argument>
511+
<argument>${benchmark.name}</argument>
516512
</arguments>
517513
</configuration>
518514
</execution>
@@ -537,44 +533,44 @@
537533
<profile>
538534
<id>slow-tests</id>
539535
<build>
540-
<plugins>
541-
<plugin>
542-
<groupId>org.apache.maven.plugins</groupId>
543-
<artifactId>maven-surefire-plugin</artifactId>
544-
<executions>
545-
<execution>
546-
<id>default-test</id>
547-
<configuration>
548-
<groups>com.google.cloud.spanner.SlowTest</groups>
549-
</configuration>
550-
</execution>
551-
</executions>
552-
</plugin>
553-
<plugin>
554-
<groupId>org.apache.maven.plugins</groupId>
555-
<artifactId>maven-failsafe-plugin</artifactId>
556-
<executions>
557-
<execution>
558-
<id>default</id>
559-
<configuration>
560-
<groups>com.google.cloud.spanner.SlowTest</groups>
561-
<!-- Overrides default configuration to allow slow integration tests more time -->
562-
<forkedProcessTimeoutInSeconds>7200</forkedProcessTimeoutInSeconds>
563-
</configuration>
564-
</execution>
565-
<!-- Overrides default configuration to skip this step -->
566-
<execution>
567-
<id>parallel-integration-test</id>
568-
<goals>
569-
<goal>integration-test</goal>
570-
</goals>
571-
<configuration>
572-
<skipTests>true</skipTests>
573-
</configuration>
574-
</execution>
575-
</executions>
576-
</plugin>
577-
</plugins>
536+
<plugins>
537+
<plugin>
538+
<groupId>org.apache.maven.plugins</groupId>
539+
<artifactId>maven-surefire-plugin</artifactId>
540+
<executions>
541+
<execution>
542+
<id>default-test</id>
543+
<configuration>
544+
<groups>com.google.cloud.spanner.SlowTest</groups>
545+
</configuration>
546+
</execution>
547+
</executions>
548+
</plugin>
549+
<plugin>
550+
<groupId>org.apache.maven.plugins</groupId>
551+
<artifactId>maven-failsafe-plugin</artifactId>
552+
<executions>
553+
<execution>
554+
<id>default</id>
555+
<configuration>
556+
<groups>com.google.cloud.spanner.SlowTest</groups>
557+
<!-- Overrides default configuration to allow slow integration tests more time -->
558+
<forkedProcessTimeoutInSeconds>7200</forkedProcessTimeoutInSeconds>
559+
</configuration>
560+
</execution>
561+
<!-- Overrides default configuration to skip this step -->
562+
<execution>
563+
<id>parallel-integration-test</id>
564+
<goals>
565+
<goal>integration-test</goal>
566+
</goals>
567+
<configuration>
568+
<skipTests>true</skipTests>
569+
</configuration>
570+
</execution>
571+
</executions>
572+
</plugin>
573+
</plugins>
578574
</build>
579575
</profile>
580576
<profile>
@@ -645,4 +641,4 @@
645641
</dependencies>
646642
</profile>
647643
</profiles>
648-
</project>
644+
</project>

google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsRecorder.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
import io.opentelemetry.api.metrics.DoubleHistogram;
2626
import io.opentelemetry.api.metrics.LongCounter;
2727
import io.opentelemetry.api.metrics.Meter;
28-
import io.opentelemetry.context.Context;
2928
import java.util.Map;
3029

3130
/**
@@ -105,7 +104,7 @@ void recordServerTimingHeaderMetrics(
105104
Map<String, String> attributes) {
106105
io.opentelemetry.api.common.Attributes otelAttributes = toOtelAttributes(attributes);
107106
if (gfeLatency != null) {
108-
gfeLatencyRecorder.record(gfeLatency, otelAttributes, Context.current());
107+
gfeLatencyRecorder.record(gfeLatency, otelAttributes);
109108
}
110109
if (gfeHeaderMissingCount > 0) {
111110
gfeHeaderMissingCountRecorder.add(gfeHeaderMissingCount, otelAttributes);

google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/HeaderInterceptor.java

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,8 @@ public void start(Listener<RespT> responseListener, Metadata headers) {
117117
getMetricAttributes(key, method.getFullMethodName(), databaseName);
118118
Map<String, String> builtInMetricsAttributes =
119119
getBuiltInMetricAttributes(key, databaseName);
120+
builtInMetricsAttributes.put(
121+
BuiltInMetricsConstant.REQUEST_ID_KEY.getKey(), extractRequestId(headers));
120122
addBuiltInMetricAttributes(compositeTracer, builtInMetricsAttributes);
121123
super.start(
122124
new SimpleForwardingClientCallListener<RespT>(responseListener) {
@@ -125,7 +127,7 @@ public void onHeaders(Metadata metadata) {
125127
Boolean isDirectPathUsed =
126128
isDirectPathUsed(getAttributes().get(Grpc.TRANSPORT_ATTR_REMOTE_ADDR));
127129
addDirectPathUsedAttribute(compositeTracer, isDirectPathUsed);
128-
addRequestIdAttribute(compositeTracer, getRequestIdFromMetadata(metadata));
130+
129131
processHeader(
130132
metadata, tagContext, attributes, span, compositeTracer, isDirectPathUsed);
131133
super.onHeaders(metadata);
@@ -246,6 +248,10 @@ private DatabaseName extractDatabaseName(Metadata headers) throws ExecutionExcep
246248
return UNDEFINED_DATABASE_NAME;
247249
}
248250

251+
private String extractRequestId(Metadata headers) throws ExecutionException {
252+
return headers.get(XGoogSpannerRequestId.REQUEST_HEADER_KEY);
253+
}
254+
249255
private TagContext getTagContext(String key, String method, DatabaseName databaseName)
250256
throws ExecutionException {
251257
return tagsCache.get(
@@ -306,16 +312,6 @@ private void addDirectPathUsedAttribute(
306312
}
307313
}
308314

309-
private String getRequestIdFromMetadata(Metadata md) {
310-
return md.get(XGoogSpannerRequestId.REQUEST_HEADER_KEY);
311-
}
312-
313-
private void addRequestIdAttribute(CompositeTracer compositeTracer, String requestId) {
314-
if (compositeTracer != null) {
315-
compositeTracer.addAttributes(BuiltInMetricsConstant.REQUEST_ID_KEY.getKey(), requestId);
316-
}
317-
}
318-
319315
private Boolean isDirectPathUsed(SocketAddress remoteAddr) {
320316
if (remoteAddr instanceof InetSocketAddress) {
321317
InetAddress inetAddress = ((InetSocketAddress) remoteAddr).getAddress();

google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerCloudMonitoringExporterTest.java

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
import com.google.monitoring.v3.DroppedLabels;
4646
import com.google.monitoring.v3.TimeSeries;
4747
import com.google.protobuf.Empty;
48+
import com.google.protobuf.InvalidProtocolBufferException;
4849
import io.opentelemetry.api.common.Attributes;
4950
import io.opentelemetry.api.trace.SpanContext;
5051
import io.opentelemetry.api.trace.TraceFlags;
@@ -64,10 +65,8 @@
6465
import io.opentelemetry.sdk.metrics.internal.data.ImmutableSumData;
6566
import io.opentelemetry.sdk.resources.Resource;
6667
import java.io.IOException;
67-
import java.util.ArrayList;
68-
import java.util.Arrays;
69-
import java.util.Collection;
70-
import java.util.Collections;
68+
import java.util.*;
69+
import java.util.stream.Collectors;
7170
import org.junit.After;
7271
import org.junit.Before;
7372
import org.junit.Rule;
@@ -369,7 +368,10 @@ public void testExportingHistogramDataWithExemplars() {
369368

370369
DoubleExemplarData exemplar =
371370
ImmutableDoubleExemplarData.create(
372-
Attributes.builder().put("request_id", "test").build(),
371+
Attributes.builder()
372+
.put(XGoogSpannerRequestId.REQUEST_ID, "test")
373+
.put("lang", "java")
374+
.build(),
373375
recordTimeEpoch,
374376
SpanContext.create(
375377
"0123456789abcdef0123456789abcdef",
@@ -428,9 +430,25 @@ public void testExportingHistogramDataWithExemplars() {
428430
assertThat(hasSpanAttachment).isTrue();
429431

430432
// Assert attachments: DroppedLabels (filtered attributes)
431-
boolean hasFilteredAttrs =
432-
exportedExemplar.getAttachmentsList().stream().anyMatch(any -> any.is(DroppedLabels.class));
433-
assertThat(hasFilteredAttrs).isTrue();
433+
List<DroppedLabels> filterAttributes =
434+
exportedExemplar.getAttachmentsList().stream()
435+
.filter(any -> any.is(DroppedLabels.class))
436+
.map(
437+
any -> {
438+
try {
439+
return any.unpack(DroppedLabels.class);
440+
} catch (InvalidProtocolBufferException e) {
441+
throw new RuntimeException("Failed to unpack SpanContext", e);
442+
}
443+
})
444+
.collect(Collectors.toList());
445+
446+
// Assert only 1 attachment is there with 1 label for request_id.
447+
assertThat(filterAttributes.size()).isEqualTo(1);
448+
assertThat(filterAttributes.get(0).getLabelCount()).isEqualTo(1);
449+
assertThat(filterAttributes.get(0).containsLabel(XGoogSpannerRequestId.REQUEST_ID)).isTrue();
450+
assertThat(filterAttributes.get(0).getLabelOrThrow(XGoogSpannerRequestId.REQUEST_ID))
451+
.isEqualTo("test");
434452
}
435453

436454
@Test

google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITBuiltInMetricsTest.java

Lines changed: 19 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,7 @@
2020
import static org.junit.Assume.assumeFalse;
2121

2222
import com.google.cloud.monitoring.v3.MetricServiceClient;
23-
import com.google.cloud.spanner.Database;
24-
import com.google.cloud.spanner.DatabaseClient;
25-
import com.google.cloud.spanner.IntegrationTestEnv;
26-
import com.google.cloud.spanner.ParallelIntegrationTest;
27-
import com.google.cloud.spanner.Statement;
23+
import com.google.cloud.spanner.*;
2824
import com.google.cloud.spanner.testing.EmulatorSpannerHelper;
2925
import com.google.common.base.Stopwatch;
3026
import com.google.monitoring.v3.ListTimeSeriesRequest;
@@ -35,13 +31,8 @@
3531
import java.io.IOException;
3632
import java.time.Duration;
3733
import java.time.Instant;
38-
import java.util.ArrayList;
39-
import java.util.List;
40-
import java.util.concurrent.Callable;
41-
import java.util.concurrent.ExecutionException;
42-
import java.util.concurrent.ExecutorService;
43-
import java.util.concurrent.Executors;
44-
import java.util.concurrent.Future;
34+
import java.util.Arrays;
35+
import java.util.Collection;
4536
import java.util.concurrent.TimeUnit;
4637
import org.junit.After;
4738
import org.junit.BeforeClass;
@@ -55,16 +46,22 @@
5546
@RunWith(JUnit4.class)
5647
public class ITBuiltInMetricsTest {
5748

49+
public static Collection<IntegrationTestEnv.TestEnvOptions> testEnvOptions =
50+
Arrays.asList(IntegrationTestEnv.TestEnvOptions.USE_END_TO_END_TRACING);
51+
52+
static {
53+
SpannerOptionsHelper.resetActiveTracingFramework();
54+
SpannerOptions.enableOpenTelemetryTraces();
55+
}
56+
5857
private static Database db;
59-
@ClassRule public static IntegrationTestEnv env = new IntegrationTestEnv();
58+
@ClassRule public static IntegrationTestEnv env = new IntegrationTestEnv(testEnvOptions);
6059

6160
private static DatabaseClient client;
6261

6362
private static MetricServiceClient metricClient;
6463

65-
private static String[] METRICS = {
66-
"operation_latencies", "attempt_latencies", "operation_count", "attempt_count",
67-
};
64+
private static String[] METRICS = {"attempt_latencies", "gfe_latencies"};
6865

6966
@BeforeClass
7067
public static void setUp() throws IOException {
@@ -96,40 +93,9 @@ public void testBuiltinMetricsWithDefaultOTEL() throws Exception {
9693
.setEndTime(Timestamps.fromMillis(end.toEpochMilli()))
9794
.build();
9895

99-
int totalQueries = 1;
100-
int batchSize = 1;
101-
ExecutorService executor = Executors.newFixedThreadPool(100);
102-
103-
for (int batch = 0; batch < totalQueries / batchSize; batch++) {
104-
List<Callable<Void>> tasks = new ArrayList<>();
105-
for (int i = 0; i < batchSize; i++) {
106-
tasks.add(
107-
() -> {
108-
client
109-
.readWriteTransaction()
110-
.run(
111-
transaction -> {
112-
transaction.executeQuery(Statement.of("SELECT 1"));
113-
return null;
114-
});
115-
return null;
116-
});
117-
}
118-
119-
List<Future<Void>> futures = executor.invokeAll(tasks);
120-
for (Future<Void> future : futures) {
121-
try {
122-
future.get(); // propagate exceptions
123-
} catch (ExecutionException e) {
124-
System.err.println("Error in query: " + e.getCause());
125-
}
126-
}
127-
128-
System.out.println("Completed batch " + (batch + 1));
129-
}
130-
131-
executor.shutdown();
132-
executor.awaitTermination(1, TimeUnit.HOURS);
96+
client
97+
.readWriteTransaction()
98+
.run(transaction -> transaction.executeQuery(Statement.of("Select 1")));
13399

134100
for (String metric : METRICS) {
135101
String metricFilter =
@@ -161,6 +127,9 @@ public void testBuiltinMetricsWithDefaultOTEL() throws Exception {
161127
assertWithMessage("Metric" + metric + "didn't return any data.")
162128
.that(response.getTimeSeriesCount())
163129
.isGreaterThan(0);
130+
// response.getTimeSeries(0).getPoints(0).getValue().getDistributionValue().getExemplarsCount()
131+
// response.getTimeSeries(0).getPoints(0).getValue().getDistributionValue().getExemplars(0).getAttachmentsCount()
132+
// response.getTimeSeries(0).getPoints(0).getValue().getDistributionValue().getExemplars(0).getAttachments(1).getValue().toString()
164133
}
165134
}
166135
}

0 commit comments

Comments
 (0)