1// Copyright The OpenTelemetry Authors
2// SPDX-License-Identifier: Apache-2.0
3
4package global // import "go.opentelemetry.io/otel/internal/global"
5
6import (
7 "log"
8 "sync/atomic"
9)
10
11// ErrorHandler handles irremediable events.
12type ErrorHandler interface {
13 // Handle handles any error deemed irremediable by an OpenTelemetry
14 // component.
15 Handle(error)
16}
17
18type ErrDelegator struct {
19 delegate atomic.Pointer[ErrorHandler]
20}
21
22// Compile-time check that delegator implements ErrorHandler.
23var _ ErrorHandler = (*ErrDelegator)(nil)
24
25func (d *ErrDelegator) Handle(err error) {
26 if eh := d.delegate.Load(); eh != nil {
27 (*eh).Handle(err)
28 return
29 }
30 log.Print(err)
31}
32
33// setDelegate sets the ErrorHandler delegate.
34func (d *ErrDelegator) setDelegate(eh ErrorHandler) {
35 d.delegate.Store(&eh)
36}