diff --git a/README.md b/README.md
index 01c88f4f8cf..b3edd324c8e 100644
--- a/README.md
+++ b/README.md
@@ -19,7 +19,7 @@ If you are using Maven with [BOM][libraries-bom], add this to your pom.xml file:
com.google.cloud
libraries-bom
- 26.54.0
+ 26.57.0
pom
import
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 dba3b38e92f..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
@@ -87,6 +87,8 @@ class HeaderInterceptor implements ClientInterceptor {
CacheBuilder.newBuilder().maximumSize(1000).build();
private final Cache> builtInAttributesCache =
CacheBuilder.newBuilder().maximumSize(1000).build();
+ private final Cache> keyCache =
+ CacheBuilder.newBuilder().maximumSize(1000).build();
// Get the global singleton Tagger object.
private static final Tagger TAGGER = Tags.getTagger();
@@ -116,7 +118,7 @@ public void start(Listener responseListener, Metadata headers) {
try {
Span span = Span.current();
DatabaseName databaseName = extractDatabaseName(headers);
- String key = databaseName + method.getFullMethodName();
+ String key = extractKey(databaseName, method.getFullMethodName());
TagContext tagContext = getTagContext(key, method.getFullMethodName(), databaseName);
Attributes attributes =
getMetricAttributes(key, method.getFullMethodName(), databaseName);
@@ -201,6 +203,13 @@ private Map parseServerTimingHeader(String serverTiming) {
return serverTimingMetrics;
}
+ private String extractKey(DatabaseName databaseName, String methodName)
+ throws ExecutionException {
+ Cache keys =
+ keyCache.get(databaseName, () -> CacheBuilder.newBuilder().maximumSize(1000).build());
+ return keys.get(methodName, () -> databaseName + methodName);
+ }
+
private DatabaseName extractDatabaseName(Metadata headers) throws ExecutionException {
String googleResourcePrefix = headers.get(GOOGLE_CLOUD_RESOURCE_PREFIX_KEY);
if (googleResourcePrefix != null) {