Skip to content

Commit 0d8865a

Browse files
committed
cleaning up code
1 parent 852c5b1 commit 0d8865a

1 file changed

Lines changed: 20 additions & 11 deletions

File tree

  • packages/google-api-core/google/api_core/gapic_v1

packages/google-api-core/google/api_core/gapic_v1/method.py

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -91,14 +91,17 @@ def __init__(
9191
self._timeout = timeout
9292
self._compression = compression
9393
self._metadata = metadata
94-
# separate x-goog-api-client header from provided metadata
94+
95+
# Pre-extract the client metrics header from the initialized metadata.
96+
# This avoids repeating this work on every single RPC request invocation.
9597
self._arbitrary_metadata = []
9698
self._metrics_values = ""
97-
for key, val in metadata:
98-
if key == client_info.METRICS_METADATA_KEY:
99-
self._metrics_values = val
100-
else:
101-
self._arbitrary_metadata.append((key, val))
99+
if metadata:
100+
for key, val in metadata:
101+
if key == client_info.METRICS_METADATA_KEY:
102+
self._metrics_values = val
103+
else:
104+
self._arbitrary_metadata.append((key, val))
102105

103106
def __call__(
104107
self, *args, timeout=DEFAULT, retry=DEFAULT, compression=DEFAULT, **kwargs
@@ -124,22 +127,28 @@ def __call__(
124127
if self._metadata is not None:
125128
metadata = kwargs.get("metadata")
126129
if not metadata:
130+
# Fast path: in 99% of calls, the user did not pass any custom metadata,
131+
# so we can directly assign the pre-extracted metadata and skip any merging overhead.
127132
if self._metrics_values:
128-
kwargs["metadata"] = [(client_info.METRICS_METADATA_KEY, self._metrics_values), *self._arbitrary_metadata]
133+
kwargs["metadata"] = [(client_info.METRICS_METADATA_KEY, self._metrics_values)] + self._arbitrary_metadata
129134
else:
130135
kwargs["metadata"] = self._arbitrary_metadata
131136
else:
132137
# Merge user-supplied metadata with library-supplied metadata.
138+
# All keys in gRPC metadata are already lowercase.
133139
metadata = list(metadata)
134-
metric_values = [self._metrics_values] if self._metrics_values else []
140+
api_client_values = []
135141
merged_metadata = []
136142
for key, val in metadata:
137143
if key == client_info.METRICS_METADATA_KEY:
138-
metric_values.append(val)
144+
api_client_values.append(val)
139145
else:
140146
merged_metadata.append((key, val))
141-
if metric_values:
142-
merged_metadata.append((client_info.METRICS_METADATA_KEY, " ".join(metric_values)))
147+
if self._metrics_values:
148+
api_client_values.append(self._metrics_values)
149+
if api_client_values:
150+
merged_metadata.append((client_info.METRICS_METADATA_KEY, " ".join(api_client_values)))
151+
merged_metadata.extend(self._arbitrary_metadata)
143152
kwargs["metadata"] = merged_metadata
144153

145154
if self._compression is not None:

0 commit comments

Comments
 (0)