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