Skip to content

Commit b42dfeb

Browse files
authored
Merge pull request #5544 from k8s-infra-cherrypick-robot/cherry-pick-5540-to-release-1.18
[release-1.18] fix: reuse global TracerProvider to avoid memory leak
2 parents 00dc84d + d181051 commit b42dfeb

File tree

4 files changed

+10
-23
lines changed

4 files changed

+10
-23
lines changed

azure/defaults.go

Lines changed: 2 additions & 7 deletions
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

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,14 @@ import (
2626
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
2727
"github.com/Azure/azure-sdk-for-go/sdk/tracing/azotel"
2828
"github.com/pkg/errors"
29+
"go.opentelemetry.io/otel"
2930
corev1 "k8s.io/api/core/v1"
3031
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3132
"k8s.io/apimachinery/pkg/types"
3233
"sigs.k8s.io/controller-runtime/pkg/client"
3334

3435
infrav1 "sigs.k8s.io/cluster-api-provider-azure/api/v1beta1"
3536
"sigs.k8s.io/cluster-api-provider-azure/azure"
36-
"sigs.k8s.io/cluster-api-provider-azure/pkg/ot"
3737
"sigs.k8s.io/cluster-api-provider-azure/util/tele"
3838
)
3939

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

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

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

controllers/aso_credential_cache.go

Lines changed: 2 additions & 7 deletions
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

Lines changed: 3 additions & 3 deletions
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)