Skip to content

Commit 0a3696b

Browse files
committed
refactor(storage): implement Option C scoped metrics context and wire operations across transports
- Overload Retrier.run() and RetrierWithAlg.run() to accept @nullable StorageMetricsContext as the last parameter - Constructor-inject @nullable StorageMetricsContext in DefaultRetrierWithAlg - Attach StorageMetricsContext to GrpcCallContext in Retrying.newCallContext(metricsContext) - Fast-path zero overhead in DefaultRetrier.run() when metrics are null/disabled - Wrap execution in otelContext.makeCurrent() scope for trace exemplar collection - Record raw exceptions before StorageException.coalesce() - Wire operation-scoped metrics context across StorageImpl and GrpcStorageImpl - Propagate StorageMetricsContext in GrpcStorageImpl pagination decorators - Add rpc.system.name and server.address attributes to StorageClientMetrics - Add comprehensive unit tests in RetryingMetricsTest, StorageClientMetricsTest, and StorageOptionsTest [Generated-by: AI]
1 parent 9d14b16 commit 0a3696b

8 files changed

Lines changed: 1103 additions & 229 deletions

File tree

‎java-storage/google-cloud-storage/src/main/java/com/google/cloud/storage/GrpcStorageImpl.java‎

Lines changed: 190 additions & 71 deletions
Large diffs are not rendered by default.

‎java-storage/google-cloud-storage/src/main/java/com/google/cloud/storage/Retrying.java‎

Lines changed: 162 additions & 113 deletions
Large diffs are not rendered by default.

‎java-storage/google-cloud-storage/src/main/java/com/google/cloud/storage/StorageClientMetrics.java‎

Lines changed: 62 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -127,28 +127,80 @@ final class StorageClientMetrics {
127127
static StorageClientMetrics create(
128128
MeterProvider meterProvider, boolean enableOtelMetrics, boolean enableOtelDebugMetrics) {
129129
return create(
130-
meterProvider, UUID.randomUUID().toString(), enableOtelMetrics, enableOtelDebugMetrics);
130+
meterProvider, enableOtelMetrics, enableOtelDebugMetrics, (String) null, (String) null);
131131
}
132132

133133
static StorageClientMetrics create(
134134
MeterProvider meterProvider,
135135
String instanceId,
136136
boolean enableOtelMetrics,
137137
boolean enableOtelDebugMetrics) {
138+
return create(
139+
meterProvider,
140+
enableOtelMetrics,
141+
enableOtelDebugMetrics,
142+
StorageOptions.version(),
143+
instanceId,
144+
null,
145+
null);
146+
}
147+
148+
static StorageClientMetrics create(
149+
MeterProvider meterProvider,
150+
boolean enableOtelMetrics,
151+
boolean enableOtelDebugMetrics,
152+
@Nullable String rpcSystemName,
153+
@Nullable String serverAddress) {
154+
return create(
155+
meterProvider,
156+
enableOtelMetrics,
157+
enableOtelDebugMetrics,
158+
StorageOptions.version(),
159+
rpcSystemName,
160+
serverAddress);
161+
}
162+
163+
static StorageClientMetrics create(
164+
MeterProvider meterProvider,
165+
boolean enableOtelMetrics,
166+
boolean enableOtelDebugMetrics,
167+
String sdkVersion,
168+
@Nullable String rpcSystemName,
169+
@Nullable String serverAddress) {
170+
return create(
171+
meterProvider,
172+
enableOtelMetrics,
173+
enableOtelDebugMetrics,
174+
sdkVersion,
175+
UUID.randomUUID().toString(),
176+
rpcSystemName,
177+
serverAddress);
178+
}
179+
180+
static StorageClientMetrics create(
181+
MeterProvider meterProvider,
182+
boolean enableOtelMetrics,
183+
boolean enableOtelDebugMetrics,
184+
String sdkVersion,
185+
String instanceId,
186+
@Nullable String rpcSystemName,
187+
@Nullable String serverAddress) {
138188
Meter meter =
139-
meterProvider
140-
.meterBuilder(METER_NAME)
141-
.setInstrumentationVersion(StorageOptions.version())
142-
.build();
143-
Attributes clientAttributes =
189+
meterProvider.meterBuilder(METER_NAME).setInstrumentationVersion(sdkVersion).build();
190+
AttributesBuilder builder =
144191
Attributes.builder()
145192
.put(KEY_GCP_CLIENT_SERVICE, SERVICE_STORAGE)
146-
.put(KEY_GCP_CLIENT_VERSION, StorageOptions.version())
193+
.put(KEY_GCP_CLIENT_VERSION, sdkVersion)
147194
.put(KEY_GCP_CLIENT_ARTIFACT, ARTIFACT_STORAGE)
148-
.put(KEY_GCP_CLIENT_INSTANCE_ID, instanceId)
149-
.build();
195+
.put(KEY_GCP_CLIENT_INSTANCE_ID, instanceId);
196+
if (rpcSystemName != null && !rpcSystemName.isEmpty()) {
197+
builder.put(KEY_RPC_SYSTEM_NAME, rpcSystemName);
198+
}
199+
if (serverAddress != null && !serverAddress.isEmpty()) {
200+
builder.put(KEY_SERVER_ADDRESS, serverAddress);
201+
}
150202
return new StorageClientMetrics(
151-
meter, clientAttributes, enableOtelMetrics, enableOtelDebugMetrics);
203+
meter, builder.build(), enableOtelMetrics, enableOtelDebugMetrics);
152204
}
153205

154206
StorageClientMetrics(Meter meter, boolean enableOtelMetrics, boolean enableOtelDebugMetrics) {

0 commit comments

Comments
 (0)