Skip to content

Commit

Permalink
Attempt to reduce provider lifetime issues (#2848)
Browse files Browse the repository at this point in the history
  • Loading branch information
cijothomas authored Feb 2, 2022
1 parent c1c5436 commit 3833a4f
Show file tree
Hide file tree
Showing 6 changed files with 29 additions and 0 deletions.
10 changes: 10 additions & 0 deletions docs/metrics/customizing-the-sdk/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,16 @@ using OpenTelemetry.Metrics;
using var meterProvider = Sdk.CreateMeterProviderBuilder().Build();
```

In a typical application, a single `MeterProvider` is created at application
startup and disposed at application shutdown. It is important to ensure that the
provider is not disposed too early. Actual mechanism depends on the application
type. For example, in a typical ASP.NET application, `MeterProvider` is created
in `Application_Start`, and disposed in `Application_End` (both methods part of
Global.asax.cs file) as shown [here](../../../examples/AspNet/Global.asax.cs). In
a typical ASP.NET Core application, `MeterProvider` lifetime is managed by
leveraging the built-in Dependency Injection container as shown
[here](../../../examples/AspNetCore/Startup.cs).

## MeterProvider configuration

`MeterProvider` holds the metrics configuration, which includes the following:
Expand Down
10 changes: 10 additions & 0 deletions docs/trace/customizing-the-sdk/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,16 @@ using OpenTelemetry.Trace;
using var tracerProvider = Sdk.CreateTracerProviderBuilder().Build();
```

In a typical application, a single `TracerProvider` is created at application
startup and disposed at application shutdown. It is important to ensure that the
provider is not disposed too early. Actual mechanism depends on the application
type. For example, in a typical ASP.NET application, `TracerProvider` is created
in `Application_Start`, and disposed in `Application_End` (both methods part of
Global.asax.cs file) as shown [here](../../../examples/AspNet/Global.asax.cs). In
a typical ASP.NET Core application, `TracerProvider` lifetime is managed by
leveraging the built-in Dependency Injection container as shown
[here](../../../examples/AspNetCore/Startup.cs).

## TracerProvider configuration

`TracerProvider` holds the tracing configuration, which includes the following:
Expand Down
6 changes: 6 additions & 0 deletions src/OpenTelemetry/Internal/OpenTelemetrySdkEventSource.cs
Original file line number Diff line number Diff line change
Expand Up @@ -354,6 +354,12 @@ public void MeasurementDropped(string instrumentName, string reason, string fix)
this.WriteEvent(36, instrumentName, reason, fix);
}

[Event(37, Message = "'{0}' Disposed.", Level = EventLevel.Informational)]
public void ProviderDisposed(string providerName)
{
this.WriteEvent(37, providerName);
}

#if DEBUG
public class OpenTelemetryEventListener : EventListener
{
Expand Down
1 change: 1 addition & 0 deletions src/OpenTelemetry/Logs/OpenTelemetryLoggerProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,7 @@ protected override void Dispose(bool disposing)
}

this.disposed = true;
OpenTelemetrySdkEventSource.Log.ProviderDisposed(nameof(OpenTelemetryLoggerProvider));
}

base.Dispose(disposing);
Expand Down
1 change: 1 addition & 0 deletions src/OpenTelemetry/Metrics/MeterProviderSdk.cs
Original file line number Diff line number Diff line change
Expand Up @@ -491,6 +491,7 @@ protected override void Dispose(bool disposing)
}

this.disposed = true;
OpenTelemetrySdkEventSource.Log.ProviderDisposed(nameof(MeterProvider));
}

base.Dispose(disposing);
Expand Down
1 change: 1 addition & 0 deletions src/OpenTelemetry/Trace/TracerProviderSdk.cs
Original file line number Diff line number Diff line change
Expand Up @@ -375,6 +375,7 @@ protected override void Dispose(bool disposing)
}

this.disposed = true;
OpenTelemetrySdkEventSource.Log.ProviderDisposed(nameof(TracerProvider));
}

base.Dispose(disposing);
Expand Down

0 comments on commit 3833a4f

Please sign in to comment.