@@ -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