diff --git a/google-cloud-spanner/clirr-ignored-differences.xml b/google-cloud-spanner/clirr-ignored-differences.xml index dba08d5fc9c..bcea799a409 100644 --- a/google-cloud-spanner/clirr-ignored-differences.xml +++ b/google-cloud-spanner/clirr-ignored-differences.xml @@ -751,13 +751,6 @@ boolean isEnableBuiltInMetrics() - - - 7012 - com/google/cloud/spanner/SpannerOptions$SpannerEnvironment - boolean isEnableAFEServerTiming() - - 7012 @@ -814,7 +807,7 @@ com/google/cloud/spanner/connection/Connection boolean isKeepTransactionAlive() - + 7012 @@ -846,7 +839,7 @@ com/google/cloud/spanner/connection/Connection boolean isAutoBatchDmlUpdateCountVerification() - + 7012 @@ -870,7 +863,7 @@ com/google/cloud/spanner/connection/Connection java.lang.Object runTransaction(com.google.cloud.spanner.connection.Connection$TransactionCallable) - + 7012 @@ -899,7 +892,7 @@ com/google/cloud/spanner/connection/Connection java.lang.String getDefaultSequenceKind() - + 7012 diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsConstant.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsConstant.java index ac26750dc88..4adf53d7e40 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsConstant.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsConstant.java @@ -26,7 +26,6 @@ import io.opentelemetry.sdk.metrics.InstrumentSelector; import io.opentelemetry.sdk.metrics.InstrumentType; import io.opentelemetry.sdk.metrics.View; -import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; @@ -38,9 +37,6 @@ public class BuiltInMetricsConstant { public static final String GAX_METER_NAME = OpenTelemetryMetricsRecorder.GAX_METER_NAME; static final String SPANNER_METER_NAME = "spanner-java"; static final String GFE_LATENCIES_NAME = "gfe_latencies"; - static final String AFE_LATENCIES_NAME = "afe_latencies"; - static final String GFE_CONNECTIVITY_ERROR_NAME = "gfe_connectivity_error_count"; - static final String AFE_CONNECTIVITY_ERROR_NAME = "afe_connectivity_error_count"; static final String OPERATION_LATENCIES_NAME = "operation_latencies"; static final String ATTEMPT_LATENCIES_NAME = "attempt_latencies"; static final String OPERATION_LATENCY_NAME = "operation_latency"; @@ -54,10 +50,7 @@ public class BuiltInMetricsConstant { ATTEMPT_LATENCIES_NAME, OPERATION_COUNT_NAME, ATTEMPT_COUNT_NAME, - GFE_LATENCIES_NAME, - AFE_LATENCIES_NAME, - GFE_CONNECTIVITY_ERROR_NAME, - AFE_CONNECTIVITY_ERROR_NAME) + GFE_LATENCIES_NAME) .stream() .map(m -> METER_NAME + '/' + m) .collect(Collectors.toSet()); @@ -109,14 +102,14 @@ public class BuiltInMetricsConstant { DIRECT_PATH_ENABLED_KEY, DIRECT_PATH_USED_KEY); - static List BUCKET_BOUNDARIES = - ImmutableList.of( - 0.0, 0.5, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, - 16.0, 17.0, 18.0, 19.0, 20.0, 25.0, 30.0, 40.0, 50.0, 65.0, 80.0, 100.0, 130.0, 160.0, - 200.0, 250.0, 300.0, 400.0, 500.0, 650.0, 800.0, 1000.0, 2000.0, 5000.0, 10000.0, 20000.0, - 50000.0, 100000.0, 200000.0, 400000.0, 800000.0, 1600000.0, 3200000.0); static Aggregation AGGREGATION_WITH_MILLIS_HISTOGRAM = - Aggregation.explicitBucketHistogram(BUCKET_BOUNDARIES); + Aggregation.explicitBucketHistogram( + ImmutableList.of( + 0.0, 0.5, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, + 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 25.0, 30.0, 40.0, 50.0, 65.0, 80.0, 100.0, 130.0, + 160.0, 200.0, 250.0, 300.0, 400.0, 500.0, 650.0, 800.0, 1000.0, 2000.0, 5000.0, + 10000.0, 20000.0, 50000.0, 100000.0, 200000.0, 400000.0, 800000.0, 1600000.0, + 3200000.0)); static Map getAllViews() { ImmutableMap.Builder views = ImmutableMap.builder(); @@ -136,6 +129,14 @@ static Map getAllViews() { BuiltInMetricsConstant.AGGREGATION_WITH_MILLIS_HISTOGRAM, InstrumentType.HISTOGRAM, "ms"); + defineView( + views, + BuiltInMetricsConstant.SPANNER_METER_NAME, + BuiltInMetricsConstant.GFE_LATENCIES_NAME, + BuiltInMetricsConstant.GFE_LATENCIES_NAME, + BuiltInMetricsConstant.AGGREGATION_WITH_MILLIS_HISTOGRAM, + InstrumentType.HISTOGRAM, + "ms"); defineView( views, BuiltInMetricsConstant.GAX_METER_NAME, diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsRecorder.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsRecorder.java index 0229bb02dcf..a12da470b61 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsRecorder.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsRecorder.java @@ -23,7 +23,6 @@ import io.opentelemetry.api.common.Attributes; import io.opentelemetry.api.common.AttributesBuilder; import io.opentelemetry.api.metrics.DoubleHistogram; -import io.opentelemetry.api.metrics.LongCounter; import io.opentelemetry.api.metrics.Meter; import java.util.Map; @@ -36,9 +35,6 @@ class BuiltInMetricsRecorder extends OpenTelemetryMetricsRecorder { private final DoubleHistogram gfeLatencyRecorder; - private final DoubleHistogram afeLatencyRecorder; - private final LongCounter gfeHeaderMissingCountRecorder; - private final LongCounter afeHeaderMissingCountRecorder; /** * Creates the following instruments for the following metrics: @@ -63,27 +59,6 @@ class BuiltInMetricsRecorder extends OpenTelemetryMetricsRecorder { .setDescription( "Latency between Google's network receiving an RPC and reading back the first byte of the response") .setUnit("ms") - .setExplicitBucketBoundariesAdvice(BuiltInMetricsConstant.BUCKET_BOUNDARIES) - .build(); - this.afeLatencyRecorder = - meter - .histogramBuilder(serviceName + '/' + BuiltInMetricsConstant.AFE_LATENCIES_NAME) - .setDescription( - "Latency between Spanner API Frontend receiving an RPC and starting to write back the response.") - .setExplicitBucketBoundariesAdvice(BuiltInMetricsConstant.BUCKET_BOUNDARIES) - .setUnit("ms") - .build(); - this.gfeHeaderMissingCountRecorder = - meter - .counterBuilder(serviceName + '/' + BuiltInMetricsConstant.GFE_CONNECTIVITY_ERROR_NAME) - .setDescription("Number of requests that failed to reach the Google network.") - .setUnit("1") - .build(); - this.afeHeaderMissingCountRecorder = - meter - .counterBuilder(serviceName + '/' + BuiltInMetricsConstant.AFE_CONNECTIVITY_ERROR_NAME) - .setDescription("Number of requests that failed to reach the Spanner API Frontend.") - .setUnit("1") .build(); } @@ -94,25 +69,8 @@ class BuiltInMetricsRecorder extends OpenTelemetryMetricsRecorder { * @param gfeLatency Attempt Latency in ms * @param attributes Map of the attributes to store */ - void recordServerTimingHeaderMetrics( - Long gfeLatency, - Long afeLatency, - Long gfeHeaderMissingCount, - Long afeHeaderMissingCount, - Map attributes) { - io.opentelemetry.api.common.Attributes otelAttributes = toOtelAttributes(attributes); - if (gfeLatency != null) { - gfeLatencyRecorder.record(gfeLatency, otelAttributes); - } - if (gfeHeaderMissingCount > 0) { - gfeHeaderMissingCountRecorder.add(gfeHeaderMissingCount, otelAttributes); - } - if (afeLatency != null) { - afeLatencyRecorder.record(afeLatency, otelAttributes); - } - if (afeHeaderMissingCount > 0) { - afeHeaderMissingCountRecorder.add(afeHeaderMissingCount, otelAttributes); - } + void recordGFELatency(double gfeLatency, Map attributes) { + gfeLatencyRecorder.record(gfeLatency, toOtelAttributes(attributes)); } Attributes toOtelAttributes(Map attributes) { diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsTracer.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsTracer.java index 79b80b20797..6faff5ad6d7 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsTracer.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsTracer.java @@ -37,10 +37,8 @@ class BuiltInMetricsTracer extends MetricsTracer implements ApiTracer { private final BuiltInMetricsRecorder builtInOpenTelemetryMetricsRecorder; // These are RPC specific attributes and pertain to a specific API Trace private final Map attributes = new HashMap<>(); + private Long gfeLatency = null; - private Long afeLatency = null; - private long gfeHeaderMissingCount = 0; - private long afeHeaderMissingCount = 0; BuiltInMetricsTracer( MethodName methodName, BuiltInMetricsRecorder builtInOpenTelemetryMetricsRecorder) { @@ -56,9 +54,10 @@ class BuiltInMetricsTracer extends MetricsTracer implements ApiTracer { @Override public void attemptSucceeded() { super.attemptSucceeded(); - attributes.put(STATUS_ATTRIBUTE, StatusCode.Code.OK.toString()); - builtInOpenTelemetryMetricsRecorder.recordServerTimingHeaderMetrics( - gfeLatency, afeLatency, gfeHeaderMissingCount, afeHeaderMissingCount, attributes); + if (gfeLatency != null) { + attributes.put(STATUS_ATTRIBUTE, StatusCode.Code.OK.toString()); + builtInOpenTelemetryMetricsRecorder.recordGFELatency(gfeLatency, attributes); + } } /** @@ -68,9 +67,10 @@ public void attemptSucceeded() { @Override public void attemptCancelled() { super.attemptCancelled(); - attributes.put(STATUS_ATTRIBUTE, StatusCode.Code.CANCELLED.toString()); - builtInOpenTelemetryMetricsRecorder.recordServerTimingHeaderMetrics( - gfeLatency, afeLatency, gfeHeaderMissingCount, afeHeaderMissingCount, attributes); + if (gfeLatency != null) { + attributes.put(STATUS_ATTRIBUTE, StatusCode.Code.CANCELLED.toString()); + builtInOpenTelemetryMetricsRecorder.recordGFELatency(gfeLatency, attributes); + } } /** @@ -84,9 +84,10 @@ public void attemptCancelled() { @Override public void attemptFailedDuration(Throwable error, java.time.Duration delay) { super.attemptFailedDuration(error, delay); - attributes.put(STATUS_ATTRIBUTE, extractStatus(error)); - builtInOpenTelemetryMetricsRecorder.recordServerTimingHeaderMetrics( - gfeLatency, afeLatency, gfeHeaderMissingCount, afeHeaderMissingCount, attributes); + if (gfeLatency != null) { + attributes.put(STATUS_ATTRIBUTE, extractStatus(error)); + builtInOpenTelemetryMetricsRecorder.recordGFELatency(gfeLatency, attributes); + } } /** @@ -99,9 +100,10 @@ public void attemptFailedDuration(Throwable error, java.time.Duration delay) { @Override public void attemptFailedRetriesExhausted(Throwable error) { super.attemptFailedRetriesExhausted(error); - attributes.put(STATUS_ATTRIBUTE, extractStatus(error)); - builtInOpenTelemetryMetricsRecorder.recordServerTimingHeaderMetrics( - gfeLatency, afeLatency, gfeHeaderMissingCount, afeHeaderMissingCount, attributes); + if (gfeLatency != null) { + attributes.put(STATUS_ATTRIBUTE, extractStatus(error)); + builtInOpenTelemetryMetricsRecorder.recordGFELatency(gfeLatency, attributes); + } } /** @@ -114,27 +116,16 @@ public void attemptFailedRetriesExhausted(Throwable error) { @Override public void attemptPermanentFailure(Throwable error) { super.attemptPermanentFailure(error); - attributes.put(STATUS_ATTRIBUTE, extractStatus(error)); - builtInOpenTelemetryMetricsRecorder.recordServerTimingHeaderMetrics( - gfeLatency, afeLatency, gfeHeaderMissingCount, afeHeaderMissingCount, attributes); + if (gfeLatency != null) { + attributes.put(STATUS_ATTRIBUTE, extractStatus(error)); + builtInOpenTelemetryMetricsRecorder.recordGFELatency(gfeLatency, attributes); + } } void recordGFELatency(Long gfeLatency) { this.gfeLatency = gfeLatency; } - void recordAFELatency(Long afeLatency) { - this.afeLatency = afeLatency; - } - - void recordGfeHeaderMissingCount(Long value) { - this.gfeHeaderMissingCount = value; - } - - void recordAfeHeaderMissingCount(Long value) { - this.afeHeaderMissingCount = value; - } - @Override public void addAttributes(Map attributes) { super.addAttributes(attributes); diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/CompositeTracer.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/CompositeTracer.java index afc202342d8..5268e9046f8 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/CompositeTracer.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/CompositeTracer.java @@ -198,28 +198,4 @@ public void recordGFELatency(Long gfeLatency) { } } } - - public void recordGfeHeaderMissingCount(Long value) { - for (ApiTracer child : children) { - if (child instanceof BuiltInMetricsTracer) { - ((BuiltInMetricsTracer) child).recordGfeHeaderMissingCount(value); - } - } - } - - public void recordAFELatency(Long afeLatency) { - for (ApiTracer child : children) { - if (child instanceof BuiltInMetricsTracer) { - ((BuiltInMetricsTracer) child).recordAFELatency(afeLatency); - } - } - } - - public void recordAfeHeaderMissingCount(Long value) { - for (ApiTracer child : children) { - if (child instanceof BuiltInMetricsTracer) { - ((BuiltInMetricsTracer) child).recordAfeHeaderMissingCount(value); - } - } - } } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java index 09c5a77ee85..0e540ea7926 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java @@ -683,10 +683,6 @@ private static boolean isEmulatorEnabled(SpannerOptions options, String emulator && options.getHost().endsWith(emulatorHost); } - public static boolean isEnableAFEServerTiming() { - return !Boolean.parseBoolean(System.getenv("SPANNER_DISABLE_AFE_SERVER_TIMING")); - } - private static final RetrySettings ADMIN_REQUESTS_LIMIT_EXCEEDED_RETRY_SETTINGS = RetrySettings.newBuilder() .setInitialRetryDelayDuration(Duration.ofSeconds(5L)) @@ -2034,9 +2030,6 @@ GrpcCallContext newCallContext( if (endToEndTracingEnabled) { context = context.withExtraHeaders(metadataProvider.newEndToEndTracingHeader()); } - if (isEnableAFEServerTiming()) { - context = context.withExtraHeaders(metadataProvider.newAfeServerTimingHeader()); - } if (callCredentialsProvider != null) { CallCredentials callCredentials = callCredentialsProvider.getCallCredentials(); if (callCredentials != null) { diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/HeaderInterceptor.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/HeaderInterceptor.java index a3338a8b50e..b972ecdcef4 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/HeaderInterceptor.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/HeaderInterceptor.java @@ -72,7 +72,6 @@ class HeaderInterceptor implements ClientInterceptor { private static final Metadata.Key SERVER_TIMING_HEADER_KEY = Metadata.Key.of("server-timing", Metadata.ASCII_STRING_MARSHALLER); private static final String GFE_TIMING_HEADER = "gfet4t7"; - private static final String AFE_TIMING_HEADER = "afet4t7"; private static final Metadata.Key GOOGLE_CLOUD_RESOURCE_PREFIX_KEY = Metadata.Key.of("google-cloud-resource-prefix", Metadata.ASCII_STRING_MARSHALLER); private static final Pattern SERVER_TIMING_PATTERN = @@ -175,25 +174,13 @@ private void processHeader( if (compositeTracer != null) { compositeTracer.recordGFELatency(gfeLatency); } + if (span != null) { span.setAttribute("gfe_latency", String.valueOf(gfeLatency)); } } else { measureMap.put(SPANNER_GFE_HEADER_MISSING_COUNT, 1L).record(tagContext); spannerRpcMetrics.recordGfeHeaderMissingCount(1L, attributes); - if (compositeTracer != null) { - compositeTracer.recordGfeHeaderMissingCount(1L); - } - } - - // Record AFE metrics - if (compositeTracer != null && GapicSpannerRpc.isEnableAFEServerTiming()) { - if (serverTimingMetrics.containsKey(AFE_TIMING_HEADER)) { - long afeLatency = serverTimingMetrics.get(AFE_TIMING_HEADER); - compositeTracer.recordAFELatency(afeLatency); - } else { - compositeTracer.recordAfeHeaderMissingCount(1L); - } } } catch (NumberFormatException e) { LOGGER.log(LEVEL, "Invalid server-timing object in header: {}", serverTiming); diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerMetadataProvider.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerMetadataProvider.java index e9c74847275..2ebc4925788 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerMetadataProvider.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerMetadataProvider.java @@ -38,8 +38,6 @@ class SpannerMetadataProvider { private final String resourceHeaderKey; private static final String ROUTE_TO_LEADER_HEADER_KEY = "x-goog-spanner-route-to-leader"; private static final String END_TO_END_TRACING_HEADER_KEY = "x-goog-spanner-end-to-end-tracing"; - private static final String AFE_SERVER_TIMING_HEADER_KEY = - "x-goog-spanner-enable-afe-server-timing"; private static final Pattern[] RESOURCE_TOKEN_PATTERNS = { Pattern.compile("^(?projects/[^/]*/instances/[^/]*/databases/[^/]*)(.*)?"), Pattern.compile("^(?projects/[^/]*/instances/[^/]*)(.*)?") @@ -49,8 +47,6 @@ class SpannerMetadataProvider { ImmutableMap.of(ROUTE_TO_LEADER_HEADER_KEY, Collections.singletonList("true")); private static final Map> END_TO_END_TRACING_HEADER_MAP = ImmutableMap.of(END_TO_END_TRACING_HEADER_KEY, Collections.singletonList("true")); - private static final Map> AFE_SERVER_TIMING_HEADER_MAP = - ImmutableMap.of(AFE_SERVER_TIMING_HEADER_KEY, Collections.singletonList("true")); private SpannerMetadataProvider(Map headers, String resourceHeaderKey) { this.resourceHeaderKey = resourceHeaderKey; @@ -100,10 +96,6 @@ Map> newEndToEndTracingHeader() { return END_TO_END_TRACING_HEADER_MAP; } - Map> newAfeServerTimingHeader() { - return AFE_SERVER_TIMING_HEADER_MAP; - } - private Map, String> constructHeadersAsMetadata( Map headers) { ImmutableMap.Builder, String> headersAsMetadataBuilder = diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractNettyMockServerTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractNettyMockServerTest.java index 6e8589d4a44..8e8da054b08 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractNettyMockServerTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractNettyMockServerTest.java @@ -47,9 +47,6 @@ abstract class AbstractNettyMockServerTest { protected static AtomicInteger fakeServerTiming = new AtomicInteger(new Random().nextInt(1000) + 1); - protected static AtomicInteger fakeAFEServerTiming = - new AtomicInteger(new Random().nextInt(500) + 1); - protected Spanner spanner; @BeforeClass @@ -75,9 +72,7 @@ public ServerCall.Listener interceptCall( public void sendHeaders(Metadata headers) { headers.put( Metadata.Key.of("server-timing", Metadata.ASCII_STRING_MARSHALLER), - String.format( - "afet4t7; dur=%d, gfet4t7; dur=%d", - fakeAFEServerTiming.get(), fakeServerTiming.get())); + String.format("gfet4t7; dur=%d", fakeServerTiming.get())); super.sendHeaders(headers); } }, diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OpenTelemetryBuiltInMetricsTracerTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OpenTelemetryBuiltInMetricsTracerTest.java index 4d096121f71..f0c13b0f389 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OpenTelemetryBuiltInMetricsTracerTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OpenTelemetryBuiltInMetricsTracerTest.java @@ -38,9 +38,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.Range; import io.grpc.ManagedChannelBuilder; -import io.grpc.Server; import io.grpc.Status; -import io.grpc.netty.shaded.io.grpc.netty.NettyServerBuilder; import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.common.Attributes; import io.opentelemetry.sdk.OpenTelemetrySdk; @@ -49,8 +47,6 @@ import io.opentelemetry.sdk.metrics.data.LongPointData; import io.opentelemetry.sdk.metrics.data.MetricData; import io.opentelemetry.sdk.testing.exporter.InMemoryMetricReader; -import java.io.IOException; -import java.net.InetSocketAddress; import java.time.Duration; import java.util.Collection; import java.util.List; @@ -77,7 +73,6 @@ public class OpenTelemetryBuiltInMetricsTracerTest extends AbstractNettyMockServ private static Attributes expectedCommonBaseAttributes; private static Attributes expectedCommonRequestAttributes; - private static ApiTracerFactory metricsTracerFactory; private static final long MIN_LATENCY = 0; @@ -115,10 +110,6 @@ public static void setup() { expectedCommonRequestAttributes = Attributes.builder().put(BuiltInMetricsConstant.DIRECT_PATH_USED_KEY, "false").build(); - metricsTracerFactory = - new BuiltInMetricsTracerFactory( - new BuiltInMetricsRecorder(openTelemetry, BuiltInMetricsConstant.METER_NAME), - attributes); } @BeforeClass @@ -131,12 +122,16 @@ public static void setupResults() { @After public void clearRequests() { mockSpanner.clearRequests(); - metricReader.forceFlush(); } @Override public void createSpannerInstance() { SpannerOptions.Builder builder = SpannerOptions.newBuilder(); + + ApiTracerFactory metricsTracerFactory = + new BuiltInMetricsTracerFactory( + new BuiltInMetricsRecorder(openTelemetry, BuiltInMetricsConstant.METER_NAME), + attributes); // Set a quick polling algorithm to prevent this from slowing down the test unnecessarily. builder .getDatabaseAdminStubSettingsBuilder() @@ -214,19 +209,6 @@ public void testMetricsSingleUseQuery() { getMetricData(metricReader, BuiltInMetricsConstant.GFE_LATENCIES_NAME); long gfeLatencyValue = getAggregatedValue(gfeLatencyMetricData, expectedAttributes); assertEquals(fakeServerTiming.get(), gfeLatencyValue, 0); - - MetricData afeLatencyMetricData = - getMetricData(metricReader, BuiltInMetricsConstant.AFE_LATENCIES_NAME); - long afeLatencyValue = getAggregatedValue(afeLatencyMetricData, expectedAttributes); - assertEquals(fakeAFEServerTiming.get(), afeLatencyValue, 0); - - MetricData gfeConnectivityMetricData = - getMetricData(metricReader, BuiltInMetricsConstant.GFE_CONNECTIVITY_ERROR_NAME); - assertThat(getAggregatedValue(gfeConnectivityMetricData, expectedAttributes)).isEqualTo(0); - - MetricData afeConnectivityMetricData = - getMetricData(metricReader, BuiltInMetricsConstant.AFE_CONNECTIVITY_ERROR_NAME); - assertThat(getAggregatedValue(afeConnectivityMetricData, expectedAttributes)).isEqualTo(0); } @Test @@ -363,58 +345,6 @@ public void testNoNetworkConnection() { 1, getAggregatedValue(attemptCountMetricData, expectedAttributesCreateSessionFailed)); } - @Test - public void testNoServerTimingHeader() throws IOException, InterruptedException { - // Create Spanner Object without headers - InetSocketAddress addressNoHeader = new InetSocketAddress("localhost", 0); - Server serverNoHeader = - NettyServerBuilder.forAddress(addressNoHeader).addService(mockSpanner).build().start(); - String endpoint = address.getHostString() + ":" + serverNoHeader.getPort(); - Spanner spannerNoHeader = - SpannerOptions.newBuilder() - .setProjectId("test-project") - .setChannelConfigurator(ManagedChannelBuilder::usePlaintext) - .setHost("http://" + endpoint) - .setCredentials(NoCredentials.getInstance()) - .setSessionPoolOption( - SessionPoolOptions.newBuilder() - .setWaitForMinSessionsDuration(Duration.ofSeconds(5L)) - .setFailOnSessionLeak() - .setSkipVerifyingBeginTransactionForMuxRW(true) - .build()) - // Setting this to false so that Spanner Options does not register Metrics Tracer - // factory again. - .setBuiltInMetricsEnabled(false) - .setApiTracerFactory(metricsTracerFactory) - .build() - .getService(); - DatabaseClient databaseClientNoHeader = - spannerNoHeader.getDatabaseClient(DatabaseId.of("test-project", "i", "d")); - - databaseClientNoHeader - .readWriteTransaction() - .run(transaction -> transaction.executeUpdate(UPDATE_RANDOM)); - - Attributes expectedAttributes = - expectedCommonBaseAttributes - .toBuilder() - .putAll(expectedCommonRequestAttributes) - .put(BuiltInMetricsConstant.STATUS_KEY, "OK") - .put(BuiltInMetricsConstant.METHOD_KEY, "Spanner.ExecuteSql") - .build(); - - MetricData gfeConnectivityMetricData = - getMetricData(metricReader, BuiltInMetricsConstant.GFE_CONNECTIVITY_ERROR_NAME); - assertThat(getAggregatedValue(gfeConnectivityMetricData, expectedAttributes)).isEqualTo(1); - - MetricData afeConnectivityMetricData = - getMetricData(metricReader, BuiltInMetricsConstant.AFE_CONNECTIVITY_ERROR_NAME); - assertThat(getAggregatedValue(afeConnectivityMetricData, expectedAttributes)).isEqualTo(1); - spannerNoHeader.close(); - serverNoHeader.shutdown(); - serverNoHeader.awaitTermination(); - } - private MetricData getMetricData(InMemoryMetricReader reader, String metricName) { String fullMetricName = BuiltInMetricsConstant.METER_NAME + "/" + metricName; Collection allMetricData; diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/SpannerMetadataProviderTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/SpannerMetadataProviderTest.java index 8073b11735e..c4fdd6200af 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/SpannerMetadataProviderTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/SpannerMetadataProviderTest.java @@ -105,17 +105,6 @@ public void testNewEndToEndTracingHeader() { assertTrue(Maps.difference(extraHeaders, expectedHeaders).areEqual()); } - @Test - public void testNewAfeServerTimingHeader() { - SpannerMetadataProvider metadataProvider = - SpannerMetadataProvider.create(ImmutableMap.of(), "header1"); - Map> extraHeaders = metadataProvider.newAfeServerTimingHeader(); - Map> expectedHeaders = - ImmutableMap.>of( - "x-goog-spanner-enable-afe-server-timing", ImmutableList.of("true")); - assertTrue(Maps.difference(extraHeaders, expectedHeaders).areEqual()); - } - private String getResourceHeaderValue( SpannerMetadataProvider headerProvider, String resourceTokenTemplate) { Metadata metadata = headerProvider.newMetadata(resourceTokenTemplate, "projects/p");