2828import com .google .api .gax .longrunning .OperationTimedPollAlgorithm ;
2929import com .google .api .gax .retrying .RetrySettings ;
3030import com .google .api .gax .tracing .ApiTracerFactory ;
31- import com .google .api .gax .tracing .MetricsTracerFactory ;
32- import com .google .api .gax .tracing .OpenTelemetryMetricsRecorder ;
3331import com .google .cloud .NoCredentials ;
3432import com .google .cloud .spanner .MockSpannerServiceImpl .SimulatedExecutionTime ;
3533import com .google .cloud .spanner .MockSpannerServiceImpl .StatementResult ;
6563
6664@ RunWith (JUnit4 .class )
6765public class OpenTelemetryBuiltInMetricsTracerTest extends AbstractNettyMockServerTest {
68-
6966 private static final Statement SELECT_RANDOM = Statement .of ("SELECT * FROM random" );
70-
7167 private static final Statement UPDATE_RANDOM = Statement .of ("UPDATE random SET foo=1 WHERE id=1" );
7268 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 ();;
8181
8282 private static final long MIN_LATENCY = 0 ;
8383
8484 private DatabaseClient client ;
8585
86- @ BeforeClass
87- public static void setup () {
86+ public ApiTracerFactory createMetricsTracerFactory () {
8887 metricReader = InMemoryMetricReader .create ();
8988
90- BuiltInMetricsProvider provider = BuiltInMetricsProvider .INSTANCE ;
91-
9289 SdkMeterProviderBuilder meterProvider =
9390 SdkMeterProvider .builder ().registerMetricReader (metricReader );
94-
9591 BuiltInMetricsConstant .getAllViews ().forEach (meterProvider ::registerView );
92+ OpenTelemetry openTelemetry =
93+ OpenTelemetrySdk .builder ().setMeterProvider (meterProvider .build ()).build ();
9694
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 );
11697 }
11798
11899 @ BeforeClass
@@ -123,9 +104,9 @@ public static void setupResults() {
123104 }
124105
125106 @ After
126- public void clearRequests () {
107+ public void clearRequests () throws IOException {
127108 mockSpanner .clearRequests ();
128- metricReader .forceFlush ();
109+ metricReader .close ();
129110 }
130111
131112 @ Override
@@ -159,7 +140,7 @@ public void createSpannerInstance() {
159140 // Setting this to false so that Spanner Options does not register Metrics Tracer
160141 // factory again.
161142 .setBuiltInMetricsEnabled (false )
162- .setApiTracerFactory (metricsTracerFactory )
143+ .setApiTracerFactory (createMetricsTracerFactory () )
163144 .build ()
164145 .getService ();
165146 client = spanner .getDatabaseClient (DatabaseId .of ("test-project" , "i" , "d" ));
@@ -209,6 +190,8 @@ public void testMetricsSingleUseQuery() {
209190 long gfeLatencyValue = getAggregatedValue (gfeLatencyMetricData , expectedAttributes );
210191 assertEquals (fakeServerTiming .get (), gfeLatencyValue , 0 );
211192
193+ assertFalse (
194+ checkIfMetricExists (metricReader , BuiltInMetricsConstant .GFE_CONNECTIVITY_ERROR_NAME ));
212195 assertFalse (checkIfMetricExists (metricReader , BuiltInMetricsConstant .AFE_LATENCIES_NAME ));
213196 assertFalse (
214197 checkIfMetricExists (metricReader , BuiltInMetricsConstant .AFE_CONNECTIVITY_ERROR_NAME ));
@@ -284,10 +267,6 @@ public void testNoNetworkConnection() {
284267 return null ;
285268 });
286269
287- ApiTracerFactory metricsTracerFactory =
288- new MetricsTracerFactory (
289- new OpenTelemetryMetricsRecorder (openTelemetry , BuiltInMetricsConstant .METER_NAME ),
290- attributes );
291270 Spanner spanner =
292271 builder
293272 .setProjectId ("test-project" )
@@ -305,7 +284,7 @@ public void testNoNetworkConnection() {
305284 // Setting this to false so that Spanner Options does not register Metrics Tracer
306285 // factory again.
307286 .setBuiltInMetricsEnabled (false )
308- .setApiTracerFactory (metricsTracerFactory )
287+ .setApiTracerFactory (createMetricsTracerFactory () )
309288 .build ()
310289 .getService ();
311290 String instance = "i" ;
@@ -370,7 +349,7 @@ public void testNoServerTimingHeader() throws IOException, InterruptedException
370349 // Setting this to false so that Spanner Options does not register Metrics Tracer
371350 // factory again.
372351 .setBuiltInMetricsEnabled (false )
373- .setApiTracerFactory (metricsTracerFactory )
352+ .setApiTracerFactory (createMetricsTracerFactory () )
374353 .build ()
375354 .getService ();
376355 DatabaseClient databaseClientNoHeader =
@@ -391,6 +370,8 @@ public void testNoServerTimingHeader() throws IOException, InterruptedException
391370 MetricData gfeConnectivityMetricData =
392371 getMetricData (metricReader , BuiltInMetricsConstant .GFE_CONNECTIVITY_ERROR_NAME );
393372 assertThat (getAggregatedValue (gfeConnectivityMetricData , expectedAttributes )).isEqualTo (1 );
373+ assertFalse (checkIfMetricExists (metricReader , BuiltInMetricsConstant .AFE_LATENCIES_NAME ));
374+ assertFalse (checkIfMetricExists (metricReader , BuiltInMetricsConstant .GFE_LATENCIES_NAME ));
394375 assertFalse (
395376 checkIfMetricExists (metricReader , BuiltInMetricsConstant .AFE_CONNECTIVITY_ERROR_NAME ));
396377 spannerNoHeader .close ();
0 commit comments