Skip to content

Commit b18718c

Browse files
authored
Merge pull request #5540 from helio/fix-tracerprovider
fix: reuse global TracerProvider to avoid memory leak
2 parents b32f0c6 + f4efea5 commit b18718c

File tree

4 files changed

+10
-23
lines changed

4 files changed

+10
-23
lines changed

azure/defaults.go

+2-7
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ limitations under the License.
1717
package azure
1818

1919
import (
20-
"context"
2120
"fmt"
2221
"net/http"
2322
"regexp"
@@ -28,8 +27,8 @@ import (
2827
"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
2928
"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5"
3029
"github.com/Azure/azure-sdk-for-go/sdk/tracing/azotel"
30+
"go.opentelemetry.io/otel"
3131

32-
"sigs.k8s.io/cluster-api-provider-azure/pkg/ot"
3332
"sigs.k8s.io/cluster-api-provider-azure/util/tele"
3433
"sigs.k8s.io/cluster-api-provider-azure/version"
3534
)
@@ -380,11 +379,7 @@ func ARMClientOptions(azureEnvironment string, extraPolicies ...policy.Policy) (
380379
opts.PerCallPolicies = append(opts.PerCallPolicies, extraPolicies...)
381380
opts.Retry.MaxRetries = -1 // Less than zero means one try and no retries.
382381

383-
otelTP, err := ot.OTLPTracerProvider(context.TODO())
384-
if err != nil {
385-
return nil, err
386-
}
387-
opts.TracingProvider = azotel.NewTracingProvider(otelTP, nil)
382+
opts.TracingProvider = azotel.NewTracingProvider(otel.GetTracerProvider(), nil)
388383

389384
return opts, nil
390385
}

azure/scope/identity.go

+3-6
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,14 @@ import (
2727
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
2828
"github.com/Azure/azure-sdk-for-go/sdk/tracing/azotel"
2929
"github.com/pkg/errors"
30+
"go.opentelemetry.io/otel"
3031
corev1 "k8s.io/api/core/v1"
3132
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3233
"k8s.io/apimachinery/pkg/types"
3334
"sigs.k8s.io/controller-runtime/pkg/client"
3435

3536
infrav1 "sigs.k8s.io/cluster-api-provider-azure/api/v1beta1"
3637
"sigs.k8s.io/cluster-api-provider-azure/azure"
37-
"sigs.k8s.io/cluster-api-provider-azure/pkg/ot"
3838
"sigs.k8s.io/cluster-api-provider-azure/util/tele"
3939
)
4040

@@ -90,11 +90,7 @@ func (p *AzureCredentialsProvider) GetTokenCredential(ctx context.Context, resou
9090
var authErr error
9191
var cred azcore.TokenCredential
9292

93-
otelTP, err := ot.OTLPTracerProvider(ctx)
94-
if err != nil {
95-
return nil, err
96-
}
97-
tracingProvider := azotel.NewTracingProvider(otelTP, nil)
93+
tracingProvider := azotel.NewTracingProvider(otel.GetTracerProvider(), nil)
9894

9995
switch p.Identity.Spec.Type {
10096
case infrav1.WorkloadIdentity:
@@ -134,6 +130,7 @@ func (p *AzureCredentialsProvider) GetTokenCredential(ctx context.Context, resou
134130
case infrav1.ServicePrincipalCertificate:
135131
var certsContent []byte
136132
if p.Identity.Spec.CertPath != "" {
133+
var err error
137134
certsContent, err = os.ReadFile(p.Identity.Spec.CertPath)
138135
if err != nil {
139136
return nil, errors.Wrap(err, "failed to read certificate file")

controllers/aso_credential_cache.go

+2-7
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,12 @@ import (
2626
"github.com/Azure/azure-sdk-for-go/sdk/tracing/azotel"
2727
asoannotations "github.com/Azure/azure-service-operator/v2/pkg/common/annotations"
2828
"github.com/Azure/azure-service-operator/v2/pkg/common/config"
29+
"go.opentelemetry.io/otel"
2930
corev1 "k8s.io/api/core/v1"
3031
"sigs.k8s.io/controller-runtime/pkg/client"
3132

3233
"sigs.k8s.io/cluster-api-provider-azure/azure"
3334
"sigs.k8s.io/cluster-api-provider-azure/azure/scope"
34-
"sigs.k8s.io/cluster-api-provider-azure/pkg/ot"
3535
"sigs.k8s.io/cluster-api-provider-azure/util/tele"
3636
)
3737

@@ -98,13 +98,8 @@ func (c *asoCredentialCache) clientOptsForASOResource(ctx context.Context, obj c
9898
return azcore.ClientOptions{}, err
9999
}
100100

101-
otelTP, err := ot.OTLPTracerProvider(ctx)
102-
if err != nil {
103-
return azcore.ClientOptions{}, err
104-
}
105-
106101
opts := azcore.ClientOptions{
107-
TracingProvider: azotel.NewTracingProvider(otelTP, nil),
102+
TracingProvider: azotel.NewTracingProvider(otel.GetTracerProvider(), nil),
108103
Cloud: cloud.Configuration{
109104
ActiveDirectoryAuthorityHost: string(secret.Data[config.AzureAuthorityHost]),
110105
},

pkg/ot/traces.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ import (
3535

3636
// RegisterTracing enables code tracing via OpenTelemetry.
3737
func RegisterTracing(ctx context.Context, log logr.Logger) error {
38-
tp, err := OTLPTracerProvider(ctx)
38+
tp, err := otlpTracerProvider(ctx)
3939
if err != nil {
4040
return err
4141
}
@@ -54,8 +54,8 @@ func RegisterTracing(ctx context.Context, log logr.Logger) error {
5454
return nil
5555
}
5656

57-
// OTLPTracerProvider initializes an OTLP exporter and configures the corresponding tracer provider.
58-
func OTLPTracerProvider(ctx context.Context) (*sdktrace.TracerProvider, error) {
57+
// otlpTracerProvider initializes an OTLP exporter and configures the corresponding tracer provider.
58+
func otlpTracerProvider(ctx context.Context) (*sdktrace.TracerProvider, error) {
5959
res, err := resource.New(ctx,
6060
resource.WithAttributes(
6161
semconv.ServiceNameKey.String("capz"),

0 commit comments

Comments
 (0)