28
28
import com .google .api .gax .longrunning .OperationTimedPollAlgorithm ;
29
29
import com .google .api .gax .retrying .RetrySettings ;
30
30
import com .google .api .gax .tracing .ApiTracerFactory ;
31
- import com .google .api .gax .tracing .MetricsTracerFactory ;
32
- import com .google .api .gax .tracing .OpenTelemetryMetricsRecorder ;
33
31
import com .google .cloud .NoCredentials ;
34
32
import com .google .cloud .spanner .MockSpannerServiceImpl .SimulatedExecutionTime ;
35
33
import com .google .cloud .spanner .MockSpannerServiceImpl .StatementResult ;
65
63
66
64
@ RunWith (JUnit4 .class )
67
65
public class OpenTelemetryBuiltInMetricsTracerTest extends AbstractNettyMockServerTest {
68
-
69
66
private static final Statement SELECT_RANDOM = Statement .of ("SELECT * FROM random" );
70
-
71
67
private static final Statement UPDATE_RANDOM = Statement .of ("UPDATE random SET foo=1 WHERE id=1" );
72
68
private static InMemoryMetricReader metricReader ;
73
-
74
- private static OpenTelemetry openTelemetry ;
75
-
76
- private static Map <String , String > attributes ;
77
-
78
- private static Attributes expectedCommonBaseAttributes ;
79
- private static Attributes expectedCommonRequestAttributes ;
80
- private static ApiTracerFactory metricsTracerFactory ;
69
+ private static Map <String , String > attributes =
70
+ BuiltInMetricsProvider .INSTANCE .createClientAttributes ();
71
+ private static Attributes expectedCommonBaseAttributes =
72
+ Attributes .builder ()
73
+ .put (BuiltInMetricsConstant .CLIENT_NAME_KEY , "spanner-java/" )
74
+ .put (BuiltInMetricsConstant .CLIENT_UID_KEY , attributes .get ("client_uid" ))
75
+ .put (BuiltInMetricsConstant .INSTANCE_ID_KEY , "i" )
76
+ .put (BuiltInMetricsConstant .DATABASE_KEY , "d" )
77
+ .put (BuiltInMetricsConstant .DIRECT_PATH_ENABLED_KEY , "false" )
78
+ .build ();;
79
+ private static Attributes expectedCommonRequestAttributes =
80
+ Attributes .builder ().put (BuiltInMetricsConstant .DIRECT_PATH_USED_KEY , "false" ).build ();;
81
81
82
82
private static final long MIN_LATENCY = 0 ;
83
83
84
84
private DatabaseClient client ;
85
85
86
- @ BeforeClass
87
- public static void setup () {
86
+ public ApiTracerFactory createMetricsTracerFactory () {
88
87
metricReader = InMemoryMetricReader .create ();
89
88
90
- BuiltInMetricsProvider provider = BuiltInMetricsProvider .INSTANCE ;
91
-
92
89
SdkMeterProviderBuilder meterProvider =
93
90
SdkMeterProvider .builder ().registerMetricReader (metricReader );
94
-
95
91
BuiltInMetricsConstant .getAllViews ().forEach (meterProvider ::registerView );
92
+ OpenTelemetry openTelemetry =
93
+ OpenTelemetrySdk .builder ().setMeterProvider (meterProvider .build ()).build ();
96
94
97
- String client_name = "spanner-java/" ;
98
- openTelemetry = OpenTelemetrySdk .builder ().setMeterProvider (meterProvider .build ()).build ();
99
- attributes = provider .createClientAttributes ();
100
-
101
- expectedCommonBaseAttributes =
102
- Attributes .builder ()
103
- .put (BuiltInMetricsConstant .CLIENT_NAME_KEY , client_name )
104
- .put (BuiltInMetricsConstant .CLIENT_UID_KEY , attributes .get ("client_uid" ))
105
- .put (BuiltInMetricsConstant .INSTANCE_ID_KEY , "i" )
106
- .put (BuiltInMetricsConstant .DATABASE_KEY , "d" )
107
- .put (BuiltInMetricsConstant .DIRECT_PATH_ENABLED_KEY , "false" )
108
- .build ();
109
-
110
- expectedCommonRequestAttributes =
111
- Attributes .builder ().put (BuiltInMetricsConstant .DIRECT_PATH_USED_KEY , "false" ).build ();
112
- metricsTracerFactory =
113
- new BuiltInMetricsTracerFactory (
114
- new BuiltInMetricsRecorder (openTelemetry , BuiltInMetricsConstant .METER_NAME ),
115
- attributes );
95
+ return new BuiltInMetricsTracerFactory (
96
+ new BuiltInMetricsRecorder (openTelemetry , BuiltInMetricsConstant .METER_NAME ), attributes );
116
97
}
117
98
118
99
@ BeforeClass
@@ -123,9 +104,9 @@ public static void setupResults() {
123
104
}
124
105
125
106
@ After
126
- public void clearRequests () {
107
+ public void clearRequests () throws IOException {
127
108
mockSpanner .clearRequests ();
128
- metricReader .forceFlush ();
109
+ metricReader .close ();
129
110
}
130
111
131
112
@ Override
@@ -159,7 +140,7 @@ public void createSpannerInstance() {
159
140
// Setting this to false so that Spanner Options does not register Metrics Tracer
160
141
// factory again.
161
142
.setBuiltInMetricsEnabled (false )
162
- .setApiTracerFactory (metricsTracerFactory )
143
+ .setApiTracerFactory (createMetricsTracerFactory () )
163
144
.build ()
164
145
.getService ();
165
146
client = spanner .getDatabaseClient (DatabaseId .of ("test-project" , "i" , "d" ));
@@ -209,6 +190,8 @@ public void testMetricsSingleUseQuery() {
209
190
long gfeLatencyValue = getAggregatedValue (gfeLatencyMetricData , expectedAttributes );
210
191
assertEquals (fakeServerTiming .get (), gfeLatencyValue , 0 );
211
192
193
+ assertFalse (
194
+ checkIfMetricExists (metricReader , BuiltInMetricsConstant .GFE_CONNECTIVITY_ERROR_NAME ));
212
195
assertFalse (checkIfMetricExists (metricReader , BuiltInMetricsConstant .AFE_LATENCIES_NAME ));
213
196
assertFalse (
214
197
checkIfMetricExists (metricReader , BuiltInMetricsConstant .AFE_CONNECTIVITY_ERROR_NAME ));
@@ -284,10 +267,6 @@ public void testNoNetworkConnection() {
284
267
return null ;
285
268
});
286
269
287
- ApiTracerFactory metricsTracerFactory =
288
- new MetricsTracerFactory (
289
- new OpenTelemetryMetricsRecorder (openTelemetry , BuiltInMetricsConstant .METER_NAME ),
290
- attributes );
291
270
Spanner spanner =
292
271
builder
293
272
.setProjectId ("test-project" )
@@ -305,7 +284,7 @@ public void testNoNetworkConnection() {
305
284
// Setting this to false so that Spanner Options does not register Metrics Tracer
306
285
// factory again.
307
286
.setBuiltInMetricsEnabled (false )
308
- .setApiTracerFactory (metricsTracerFactory )
287
+ .setApiTracerFactory (createMetricsTracerFactory () )
309
288
.build ()
310
289
.getService ();
311
290
String instance = "i" ;
@@ -370,7 +349,7 @@ public void testNoServerTimingHeader() throws IOException, InterruptedException
370
349
// Setting this to false so that Spanner Options does not register Metrics Tracer
371
350
// factory again.
372
351
.setBuiltInMetricsEnabled (false )
373
- .setApiTracerFactory (metricsTracerFactory )
352
+ .setApiTracerFactory (createMetricsTracerFactory () )
374
353
.build ()
375
354
.getService ();
376
355
DatabaseClient databaseClientNoHeader =
@@ -391,6 +370,8 @@ public void testNoServerTimingHeader() throws IOException, InterruptedException
391
370
MetricData gfeConnectivityMetricData =
392
371
getMetricData (metricReader , BuiltInMetricsConstant .GFE_CONNECTIVITY_ERROR_NAME );
393
372
assertThat (getAggregatedValue (gfeConnectivityMetricData , expectedAttributes )).isEqualTo (1 );
373
+ assertFalse (checkIfMetricExists (metricReader , BuiltInMetricsConstant .AFE_LATENCIES_NAME ));
374
+ assertFalse (checkIfMetricExists (metricReader , BuiltInMetricsConstant .GFE_LATENCIES_NAME ));
394
375
assertFalse (
395
376
checkIfMetricExists (metricReader , BuiltInMetricsConstant .AFE_CONNECTIVITY_ERROR_NAME ));
396
377
spannerNoHeader .close ();
0 commit comments