Skip to content

Commit 2346cf1

Browse files
authored
fix(bigtable): Ignore errors while creating monitoring client and disable metrics (#12708)
* feat(bigtable): Swallow all errors from metrics * use shorter context for exporter * revert timeout
1 parent 67b0320 commit 2346cf1

File tree

1 file changed

+16
-13
lines changed

1 file changed

+16
-13
lines changed

bigtable/metrics.go

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,11 @@ var (
8888
// duration between two metric exports
8989
defaultSamplePeriod = time.Minute
9090

91+
disabledMetricsTracerFactory = &builtinMetricsTracerFactory{
92+
enabled: false,
93+
shutdown: func() {},
94+
}
95+
9196
metricsErrorPrefix = "bigtable-metrics: "
9297

9398
clientName = fmt.Sprintf("go-bigtable/%v", internal.Version)
@@ -199,26 +204,22 @@ type builtinMetricsTracerFactory struct {
199204
debugTags metric.Int64Counter
200205
}
201206

207+
// Returns error only if metricsProvider is of unknown type. Rest all errors are swallowed
202208
func newBuiltinMetricsTracerFactory(ctx context.Context, project, instance, appProfile string, metricsProvider MetricsProvider, opts ...option.ClientOption) (*builtinMetricsTracerFactory, error) {
203209
if metricsProvider != nil {
204210
switch metricsProvider.(type) {
205211
case NoopMetricsProvider:
206-
return &builtinMetricsTracerFactory{
207-
enabled: false,
208-
shutdown: func() {},
209-
}, nil
212+
return disabledMetricsTracerFactory, nil
210213
default:
211-
return &builtinMetricsTracerFactory{
212-
enabled: false,
213-
shutdown: func() {},
214-
}, errors.New("unknown MetricsProvider type")
214+
return disabledMetricsTracerFactory, errors.New("bigtable: unknown MetricsProvider type")
215215
}
216216
}
217217

218218
// Metrics are enabled.
219219
clientUID, err := generateClientUID()
220220
if err != nil {
221-
return nil, err
221+
// Swallow the error and disable metrics
222+
return disabledMetricsTracerFactory, nil
222223
}
223224

224225
tracerFactory := &builtinMetricsTracerFactory{
@@ -236,8 +237,8 @@ func newBuiltinMetricsTracerFactory(ctx context.Context, project, instance, appP
236237
// Create default meter provider
237238
mpOptions, err := builtInMeterProviderOptions(project, opts...)
238239
if err != nil {
239-
tracerFactory.enabled = false
240-
return tracerFactory, err
240+
// Swallow the error and disable metrics
241+
return disabledMetricsTracerFactory, nil
241242
}
242243
meterProvider := sdkmetric.NewMeterProvider(mpOptions...)
243244
tracerFactory.shutdown = func() { meterProvider.Shutdown(ctx) }
@@ -246,9 +247,11 @@ func newBuiltinMetricsTracerFactory(ctx context.Context, project, instance, appP
246247
meter := meterProvider.Meter(builtInMetricsMeterName, metric.WithInstrumentationVersion(internal.Version))
247248
err = tracerFactory.createInstruments(meter)
248249
if err != nil {
249-
tracerFactory.enabled = false
250+
// Swallow the error and disable metrics
251+
return disabledMetricsTracerFactory, nil
250252
}
251-
return tracerFactory, err
253+
// Swallow the error and disable metrics
254+
return tracerFactory, nil
252255
}
253256

254257
func builtInMeterProviderOptions(project string, opts ...option.ClientOption) ([]sdkmetric.Option, error) {

0 commit comments

Comments
 (0)