Skip to content

Commit 2685882

Browse files
Addressed comments
1 parent f219b73 commit 2685882

File tree

6 files changed

+50
-29
lines changed

6 files changed

+50
-29
lines changed

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

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider;
2626
import com.google.api.gax.rpc.PermissionDeniedException;
2727
import com.google.auth.Credentials;
28+
import com.google.cloud.NoCredentials;
2829
import com.google.cloud.monitoring.v3.MetricServiceClient;
2930
import com.google.cloud.monitoring.v3.MetricServiceSettings;
3031
import com.google.common.annotations.VisibleForTesting;
@@ -35,7 +36,7 @@
3536
import com.google.monitoring.v3.ProjectName;
3637
import com.google.monitoring.v3.TimeSeries;
3738
import com.google.protobuf.Empty;
38-
import io.grpc.inprocess.InProcessChannelBuilder;
39+
import io.grpc.ManagedChannelBuilder;
3940
import io.opentelemetry.sdk.common.CompletableResultCode;
4041
import io.opentelemetry.sdk.metrics.InstrumentType;
4142
import io.opentelemetry.sdk.metrics.data.AggregationTemporality;
@@ -94,12 +95,16 @@ static SpannerCloudMonitoringExporter create(
9495
settingsBuilder.setUniverseDomain(universeDomain);
9596
}
9697

97-
if (System.getProperty("jmh.monitoring-server") != null) {
98+
if (System.getProperty("jmh.monitoring-server-port") != null) {
9899
settingsBuilder.setTransportChannelProvider(
99100
InstantiatingGrpcChannelProvider.newBuilder()
101+
.setCredentials(NoCredentials.getInstance())
100102
.setChannelConfigurator(
101103
managedChannelBuilder ->
102-
InProcessChannelBuilder.forName(System.getProperty("jmh.monitoring-server")))
104+
ManagedChannelBuilder.forAddress(
105+
"0.0.0.0",
106+
Integer.parseInt(System.getProperty("jmh.monitoring-server-port")))
107+
.usePlaintext())
103108
.build());
104109
}
105110

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2013,6 +2013,10 @@ public CallCredentialsProvider getCallCredentialsProvider() {
20132013
}
20142014

20152015
private boolean usesNoCredentials() {
2016+
// When JMH is enabled, we need to enable built-in metrics
2017+
if (System.getProperty("jmh.enabled") != null && System.getProperty("jmh.enabled").equals("true")) {
2018+
return false;
2019+
}
20162020
return Objects.equals(getCredentials(), NoCredentials.getInstance());
20172021
}
20182022

google-cloud-spanner/src/test/java/com/google/cloud/spanner/benchmarking/BenchmarkValidator.java

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,7 @@ void validate() {
5555
}
5656
Map<String, Double> actualPercentilesMap = actualResult.primaryMetric.scorePercentiles;
5757
// We will only be comparing the percentiles(p50, p90, p90) which are configured in the
58-
// expected
59-
// percentiles. This allows some checks to be disabled if required.
58+
// expected percentiles. This allows some checks to be disabled if required.
6059
for (Percentile expectedPercentile : expectResult.scorePercentiles) {
6160
String percentile = expectedPercentile.percentile;
6261
double difference =
@@ -135,19 +134,23 @@ static class ValidationException extends RuntimeException {
135134
}
136135
}
137136

138-
private static String parseCommandLineArg(String arg) {
139-
if (arg == null || arg.isEmpty()) {
137+
private static String parseCommandLineArgs(String[] args, String key) {
138+
if (args == null) {
140139
return "";
141140
}
142-
String[] args = arg.split("=");
143-
if (args.length != 2) {
144-
return "";
141+
for (String arg : args) {
142+
if (arg.startsWith("--" + key)) {
143+
String[] splits = arg.split("=");
144+
if (splits.length == 2) {
145+
return splits[1].trim();
146+
}
147+
}
145148
}
146-
return args[1];
149+
return "";
147150
}
148151

149152
public static void main(String[] args) {
150-
String actualFile = parseCommandLineArg(args[0]);
153+
String actualFile = parseCommandLineArgs(args, "file");
151154
new BenchmarkValidator("com/google/cloud/spanner/jmh/jmh-baseline.json", actualFile).validate();
152155
}
153156
}

google-cloud-spanner/src/test/java/com/google/cloud/spanner/benchmarking/MonitoringServiceImpl.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import com.google.monitoring.v3.CreateTimeSeriesRequest;
2020
import com.google.monitoring.v3.MetricServiceGrpc.MetricServiceImplBase;
2121
import com.google.protobuf.Empty;
22+
import io.grpc.Status;
2223
import io.grpc.stub.StreamObserver;
2324

2425
class MonitoringServiceImpl extends MetricServiceImplBase {
@@ -31,7 +32,8 @@ public void createServiceTimeSeries(
3132
responseObserver.onNext(Empty.getDefaultInstance());
3233
responseObserver.onCompleted();
3334
} catch (InterruptedException e) {
34-
responseObserver.onError(e);
35+
responseObserver.onError(
36+
Status.CANCELLED.withCause(e).withDescription(e.getMessage()).asException());
3537
}
3638
}
3739
}

google-cloud-spanner/src/test/java/com/google/cloud/spanner/benchmarking/ReadBenchmark.java

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package com.google.cloud.spanner.benchmarking;
1818

19+
import com.google.cloud.NoCredentials;
1920
import com.google.cloud.spanner.DatabaseClient;
2021
import com.google.cloud.spanner.DatabaseId;
2122
import com.google.cloud.spanner.Key;
@@ -32,9 +33,9 @@
3233
import com.google.spanner.v1.StructType;
3334
import com.google.spanner.v1.StructType.Field;
3435
import com.google.spanner.v1.TypeCode;
36+
import io.grpc.ManagedChannelBuilder;
3537
import io.grpc.Server;
36-
import io.grpc.inprocess.InProcessChannelBuilder;
37-
import io.grpc.inprocess.InProcessServerBuilder;
38+
import io.grpc.ServerBuilder;
3839
import java.io.IOException;
3940
import java.util.Arrays;
4041
import java.util.List;
@@ -88,6 +89,9 @@ public static class BenchmarkState {
8889

8990
@Setup(Level.Trial)
9091
public void setup() throws IOException {
92+
// Enable JMH system property
93+
System.setProperty("jmh.enabled", "true");
94+
9195
// Initializing mock spanner service
9296
MockSpannerServiceImpl mockSpannerService = new MockSpannerServiceImpl();
9397
mockSpannerService.setAbortProbability(0.0D);
@@ -99,9 +103,8 @@ public void setup() throws IOException {
99103
gRPCServerExecutor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
100104

101105
// Creating Spanner Inprocess gRPC server
102-
String serverName = InProcessServerBuilder.generateName();
103106
gRPCServer =
104-
InProcessServerBuilder.forName(serverName)
107+
ServerBuilder.forPort(0)
105108
.addService(mockSpannerService)
106109
.executor(gRPCServerExecutor)
107110
.build()
@@ -110,21 +113,21 @@ public void setup() throws IOException {
110113
registerMocks(mockSpannerService);
111114

112115
// Creating Monitoring Inprocess gRPC server
113-
String monitoringServerName = InProcessServerBuilder.generateName();
114116
gRPCMonitoringServer =
115-
InProcessServerBuilder.forName(monitoringServerName)
116-
.addService(mockMonitoringService)
117-
.build()
118-
.start();
117+
ServerBuilder.forPort(0).addService(mockMonitoringService).build().start();
119118

120-
// Set the monitoring host for exporter to forward requests to inprocess gRPC server
121-
System.setProperty("jmh.monitoring-server", monitoringServerName);
119+
// Set the monitoring host port for exporter to forward requests to local netty gRPC server
120+
System.setProperty(
121+
"jmh.monitoring-server-port", String.valueOf(gRPCMonitoringServer.getPort()));
122122

123123
spanner =
124124
SpannerOptions.newBuilder()
125125
.setProjectId("[PROJECT]")
126+
.setCredentials(NoCredentials.getInstance())
126127
.setChannelConfigurator(
127-
managedChannelBuilder -> InProcessChannelBuilder.forName(serverName))
128+
managedChannelBuilder ->
129+
ManagedChannelBuilder.forAddress("0.0.0.0", gRPCServer.getPort())
130+
.usePlaintext())
128131
.build()
129132
.getService();
130133
databaseClient =
@@ -172,10 +175,14 @@ private void registerMocks(MockSpannerServiceImpl mockSpannerService) {
172175
}
173176

174177
@TearDown(Level.Trial)
175-
public void tearDown() {
178+
public void tearDown() throws InterruptedException {
176179
spanner.close();
177180
gRPCServer.shutdown();
178181
gRPCServerExecutor.shutdown();
182+
183+
// awaiting termination for servers and executors
184+
gRPCServer.awaitTermination(10, TimeUnit.SECONDS);
185+
gRPCServerExecutor.awaitTermination(10, TimeUnit.SECONDS);
179186
}
180187
}
181188

google-cloud-spanner/src/test/resources/com/google/cloud/spanner/jmh/jmh-baseline.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
{
2-
"baselineConfigurations": {
2+
"benchmarkResultMap": {
33
"com.google.cloud.spanner.benchmarking.ReadBenchmark.queryBenchmark": {
44
"scorePercentiles": [
55
{
66
"percentile": "50.0",
7-
"baseline": "120",
7+
"baseline": "450",
88
"difference": "15"
99
}
1010
]
@@ -13,7 +13,7 @@
1313
"scorePercentiles": [
1414
{
1515
"percentile": "50.0",
16-
"baseline": "120",
16+
"baseline": "450",
1717
"difference": "15"
1818
}
1919
]

0 commit comments

Comments
 (0)