handler.go

 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}