diff --git a/apps/opentelemetry/src/opentelemetry_app.erl b/apps/opentelemetry/src/opentelemetry_app.erl index 57891747..5055f664 100644 --- a/apps/opentelemetry/src/opentelemetry_app.erl +++ b/apps/opentelemetry/src/opentelemetry_app.erl @@ -54,6 +54,8 @@ start(_StartType, _StartArgs) -> end. stop(_State) -> + _ = opentelemetry:cleanup_persistent_terms(), + _ = otel_span_limits:cleanup_persistent_terms(), ok. %% internal functions diff --git a/apps/opentelemetry/src/otel_span_limits.erl b/apps/opentelemetry/src/otel_span_limits.erl index 1fcd895b..60a6af44 100644 --- a/apps/opentelemetry/src/otel_span_limits.erl +++ b/apps/opentelemetry/src/otel_span_limits.erl @@ -25,7 +25,8 @@ event_count_limit/0, link_count_limit/0, attribute_per_event_limit/0, - attribute_per_link_limit/0]). + attribute_per_link_limit/0, + cleanup_persistent_terms/0]). -include("otel_span.hrl"). @@ -33,7 +34,7 @@ -spec get() -> #span_limits{}. get() -> - persistent_term:get(?SPAN_LIMITS_KEY). + persistent_term:get(?SPAN_LIMITS_KEY, #span_limits{}). -spec set(otel_configuration:t()) -> ok. set(#{attribute_count_limit := AttributeCountLimit, @@ -80,3 +81,6 @@ get_limit(attribute_per_event_limit, #span_limits{attribute_per_event_limit=Attr AttributePerEventLimit; get_limit(attribute_per_link_limit, #span_limits{attribute_per_link_limit=AttributePerLinkLimit}) -> AttributePerLinkLimit. + +cleanup_persistent_terms() -> + otel_utils:cleanup_persistent_terms(?MODULE). diff --git a/apps/opentelemetry_api/src/opentelemetry.erl b/apps/opentelemetry_api/src/opentelemetry.erl index d7a48e2f..54838c96 100644 --- a/apps/opentelemetry_api/src/opentelemetry.erl +++ b/apps/opentelemetry_api/src/opentelemetry.erl @@ -59,7 +59,8 @@ status/1, status/2, verify_and_set_term/3, - vsn_to_binary/1]). + vsn_to_binary/1, + cleanup_persistent_terms/0]). -include("opentelemetry.hrl"). -include_lib("kernel/include/logger.hrl"). @@ -445,6 +446,9 @@ status(?OTEL_STATUS_UNSET, _Message) -> status(_, _) -> undefined. +cleanup_persistent_terms() -> + otel_utils:cleanup_persistent_terms(?MODULE). + %% internal functions -spec verify_and_set_term(module() | {module(), term()}, term(), atom()) -> boolean(). diff --git a/apps/opentelemetry_api/src/otel_utils.erl b/apps/opentelemetry_api/src/otel_utils.erl index e76091f9..3dec5082 100644 --- a/apps/opentelemetry_api/src/otel_utils.erl +++ b/apps/opentelemetry_api/src/otel_utils.erl @@ -21,7 +21,8 @@ format_binary_string/2, format_binary_string/3, assert_to_binary/1, - unicode_to_binary/1]). + unicode_to_binary/1, + cleanup_persistent_terms/1]). -if(?OTP_RELEASE >= 24). format_exception(Kind, Reason, StackTrace) -> @@ -56,3 +57,14 @@ unicode_to_binary(String) -> _ -> {error, bad_binary_conversion} end. + +-spec cleanup_persistent_terms(module()) -> ok. +cleanup_persistent_terms(Module) -> + lists:foreach( + fun({Key, _}) -> + case is_tuple(Key) andalso element(1, Key) =:= Module of + true -> persistent_term:erase(Key); + false -> ok + end + end, + persistent_term:get()). diff --git a/apps/opentelemetry_api_experimental/src/opentelemetry_experimental.erl b/apps/opentelemetry_api_experimental/src/opentelemetry_experimental.erl index 01dcc4bf..9cac50e8 100644 --- a/apps/opentelemetry_api_experimental/src/opentelemetry_experimental.erl +++ b/apps/opentelemetry_api_experimental/src/opentelemetry_experimental.erl @@ -23,7 +23,8 @@ set_default_meter/1, set_default_meter/2, get_meter/0, - get_meter/1]). + get_meter/1, + cleanup_persistent_terms/0]). -include_lib("kernel/include/logger.hrl"). -include("otel_meter.hrl"). @@ -118,3 +119,6 @@ set_meter(Name, Vsn, SchemaUrl, Meter) -> Meter:: meter(). set_meter(MeterProvider, Name, Vsn, SchemaUrl, Meter) -> opentelemetry:verify_and_set_term(Meter, ?METER_KEY(MeterProvider, {Name, Vsn, SchemaUrl}), otel_meter). + +cleanup_persistent_terms() -> + otel_utils:cleanup_persistent_terms(?MODULE). diff --git a/apps/opentelemetry_experimental/src/opentelemetry_experimental_app.erl b/apps/opentelemetry_experimental/src/opentelemetry_experimental_app.erl index 6f6aec02..c2265c25 100644 --- a/apps/opentelemetry_experimental/src/opentelemetry_experimental_app.erl +++ b/apps/opentelemetry_experimental/src/opentelemetry_experimental_app.erl @@ -24,6 +24,7 @@ start(_StartType, _StartArgs) -> {ok, Pid}. stop(_State) -> + _ = opentelemetry_experimental:cleanup_persistent_terms(), ok. %% internal functions