Skip to content
Merged
Show file tree
Hide file tree
Changes from 14 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,47 @@ Increment the:
* [SDK] Add tracer scope configurator
[#3137](https://github.com/open-telemetry/opentelemetry-cpp/pull/3137)

* [SDK] Support OTEL_SDK_DISABLED environment variable
[#3245](https://github.com/open-telemetry/opentelemetry-cpp/pull/3245)

Important changes:

* [SDK] Support OTEL_SDK_DISABLED environment variable
[#3245](https://github.com/open-telemetry/opentelemetry-cpp/pull/3245)

* The SDK now exposes the following new methods:

* opentelemetry::sdk::trace::Provider::SetTracerProvider()
* opentelemetry::sdk::metrics::Provider::SetMeterProvider()
* opentelemetry::sdk::logs::Provider::SetLoggerProvider()

* These methods do support the `OTEL_SDK_DISABLED` environment variable,
unlike the corresponding existing API Provider classes.

* Applications are encouraged to migrate from the API to the SDK
`Provider` classes, to benefit from this feature.

* Note that the API methods will no longer be public starting
with OPENTELEMETRY_ABI_VERSION >= 2, only the SDK methods will
be available then.

* All the example code has been updated to reflect the new usage.

Breaking changes:

* [SDK] Support OTEL_SDK_DISABLED environment variable
[#3245](https://github.com/open-telemetry/opentelemetry-cpp/pull/3245)

* The following existing API methods are no longer public
starting with OPENTELEMETRY_ABI_VERSION >= 2.

* opentelemetry::trace::Provider::SetTracerProvider()
* opentelemetry::metrics::Provider::SetMeterProvider()
* opentelemetry::logs::Provider::SetLoggerProvider()

* Applications should use the corresponding SDK methods,
already available in every ABI version.

## [1.19 2025-01-22]

* [PROMETHEUS_EXPORTER] Fix default for emitting otel_scope attributes
Expand Down
36 changes: 27 additions & 9 deletions api/include/opentelemetry/logs/provider.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,17 @@
#include "opentelemetry/version.h"

OPENTELEMETRY_BEGIN_NAMESPACE
namespace sdk
{
namespace logs
{
// The forward declaration is sufficient,
// we do not want a API -> SDK dependency.
// IWYU pragma: no_include "opentelemetry/sdk/logs/provider.h"
class Provider;
} // namespace logs
} // namespace sdk

namespace logs
{

Expand All @@ -36,15 +47,6 @@ class OPENTELEMETRY_EXPORT Provider
return nostd::shared_ptr<LoggerProvider>(GetProvider());
}

/**
* Changes the singleton LoggerProvider.
*/
static void SetLoggerProvider(const nostd::shared_ptr<LoggerProvider> &tp) noexcept
{
std::lock_guard<common::SpinLockMutex> guard(GetLock());
GetProvider() = tp;
}

/**
* Returns the singleton EventLoggerProvider.
*
Expand All @@ -66,7 +68,23 @@ class OPENTELEMETRY_EXPORT Provider
GetEventProvider() = tp;
}

#if OPENTELEMETRY_ABI_VERSION_NO >= 2
private:
#endif /* OPENTELEMETRY_ABI_VERSION_NO */

/**
* Changes the singleton LoggerProvider.
*/
static void SetLoggerProvider(const nostd::shared_ptr<LoggerProvider> &tp) noexcept
{
std::lock_guard<common::SpinLockMutex> guard(GetLock());
GetProvider() = tp;
}

private:
/* The SDK is allowed to change the singleton in the API. */
friend class opentelemetry::sdk::logs::Provider;

OPENTELEMETRY_API_SINGLETON static nostd::shared_ptr<LoggerProvider> &GetProvider() noexcept
{
static nostd::shared_ptr<LoggerProvider> provider(new NoopLoggerProvider);
Expand Down
20 changes: 18 additions & 2 deletions api/include/opentelemetry/metrics/provider.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,26 @@

#include <mutex>

#include "opentelemetry/common/macros.h"
#include "opentelemetry/common/spin_lock_mutex.h"
#include "opentelemetry/metrics/meter_provider.h"
#include "opentelemetry/metrics/noop.h"
#include "opentelemetry/nostd/shared_ptr.h"
#include "opentelemetry/version.h"

OPENTELEMETRY_BEGIN_NAMESPACE
namespace sdk
{
namespace metrics
{
// The forward declaration is sufficient,
// we do not want a API -> SDK dependency.
// IWYU pragma: no_include "opentelemetry/sdk/metrics/provider.h"
class Provider; // IWYU pragma: keep
} // namespace metrics
} // namespace sdk

class MeterProvider;
namespace metrics
{

/**
* Stores the singleton global MeterProvider.
Expand All @@ -35,6 +44,10 @@ class Provider
return nostd::shared_ptr<MeterProvider>(GetProvider());
}

#if OPENTELEMETRY_ABI_VERSION_NO >= 2
private:
#endif /* OPENTELEMETRY_ABI_VERSION_NO */

/**
* Changes the singleton MeterProvider.
*/
Expand All @@ -45,6 +58,9 @@ class Provider
}

private:
/* The SDK is allowed to change the singleton in the API. */
friend class opentelemetry::sdk::metrics::Provider;

OPENTELEMETRY_API_SINGLETON static nostd::shared_ptr<MeterProvider> &GetProvider() noexcept
{
static nostd::shared_ptr<MeterProvider> provider(new NoopMeterProvider);
Expand Down
18 changes: 18 additions & 0 deletions api/include/opentelemetry/trace/provider.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,17 @@
#include "opentelemetry/version.h"

OPENTELEMETRY_BEGIN_NAMESPACE
namespace sdk
{
namespace trace
{
// The forward declaration is sufficient,
// we do not want a API -> SDK dependency.
// IWYU pragma: no_include "opentelemetry/sdk/trace/provider.h"
class Provider; // IWYU pragma: keep
} // namespace trace
} // namespace sdk

namespace trace
{

Expand All @@ -33,6 +44,10 @@ class OPENTELEMETRY_EXPORT Provider
return nostd::shared_ptr<TracerProvider>(GetProvider());
}

#if OPENTELEMETRY_ABI_VERSION_NO >= 2
private:
#endif /* OPENTELEMETRY_ABI_VERSION_NO */

/**
* Changes the singleton TracerProvider.
*/
Expand All @@ -43,6 +58,9 @@ class OPENTELEMETRY_EXPORT Provider
}

private:
/* The SDK is allowed to change the singleton in the API. */
friend class opentelemetry::sdk::trace::Provider;

OPENTELEMETRY_API_SINGLETON static nostd::shared_ptr<TracerProvider> &GetProvider() noexcept
{
static nostd::shared_ptr<TracerProvider> provider(new NoopTracerProvider);
Expand Down
4 changes: 0 additions & 4 deletions api/test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,3 @@ add_subdirectory(metrics)
add_subdirectory(logs)
add_subdirectory(common)
add_subdirectory(baggage)

if(NOT OPENTELEMETRY_SKIP_DYNAMIC_LOADING_TESTS)
add_subdirectory(singleton)
endif()
2 changes: 2 additions & 0 deletions api/test/logs/logger_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -220,6 +220,7 @@ class TestProvider : public LoggerProvider
}
};

#if OPENTELEMETRY_ABI_VERSION_NO == 1
TEST(Logger, PushLoggerImplementation)
{
// Push the new loggerprovider class into the global singleton
Expand All @@ -233,3 +234,4 @@ TEST(Logger, PushLoggerImplementation)
auto logger = lp->GetLogger("TestLogger", "opentelelemtry_library", "", schema_url);
ASSERT_EQ("test logger", logger->GetName());
}
#endif /* OPENTELEMETRY_ABI_VERSION_NO */
2 changes: 2 additions & 0 deletions api/test/logs/provider_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ TEST(Provider, GetLoggerProviderDefault)
EXPECT_NE(nullptr, tf);
}

#if OPENTELEMETRY_ABI_VERSION_NO == 1
TEST(Provider, SetLoggerProvider)
{
auto tf = shared_ptr<LoggerProvider>(new TestProvider());
Expand All @@ -56,6 +57,7 @@ TEST(Provider, MultipleLoggerProviders)

ASSERT_NE(Provider::GetLoggerProvider(), tf);
}
#endif /* OPENTELEMETRY_ABI_VERSION_NO */

TEST(Provider, GetLogger)
{
Expand Down
3 changes: 3 additions & 0 deletions api/test/metrics/meter_provider_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

#include <gtest/gtest.h>

#include "opentelemetry/metrics/meter_provider.h"
#include "opentelemetry/metrics/noop.h"
#include "opentelemetry/metrics/provider.h"
#include "opentelemetry/nostd/shared_ptr.h"
Expand All @@ -17,6 +18,7 @@ TEST(Provider, GetMeterProviderDefault)
EXPECT_NE(nullptr, tf);
}

#if OPENTELEMETRY_ABI_VERSION_NO == 1
TEST(Provider, SetMeterProvider)
{
auto tf = opentelemetry::nostd::shared_ptr<MeterProvider>(new NoopMeterProvider());
Expand All @@ -33,3 +35,4 @@ TEST(Provider, MultipleMeterProviders)

ASSERT_NE(Provider::GetMeterProvider(), tf);
}
#endif /* OPENTELEMETRY_ABI_VERSION_NO */
2 changes: 2 additions & 0 deletions api/test/trace/provider_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,11 @@ TEST(Provider, GetTracerProviderDefault)
EXPECT_NE(nullptr, tf);
}

#if OPENTELEMETRY_ABI_VERSION_NO == 1
TEST(Provider, SetTracerProvider)
{
auto tf = nostd::shared_ptr<TracerProvider>(new TestProvider());
Provider::SetTracerProvider(tf);
ASSERT_EQ(tf, Provider::GetTracerProvider());
}
#endif /* OPENTELEMETRY_ABI_VERSION_NO */
5 changes: 3 additions & 2 deletions examples/batch/main.cc
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
#include "opentelemetry/sdk/trace/batch_span_processor_options.h"
#include "opentelemetry/sdk/trace/exporter.h"
#include "opentelemetry/sdk/trace/processor.h"
#include "opentelemetry/sdk/trace/provider.h"
#include "opentelemetry/sdk/trace/tracer_provider.h"
#include "opentelemetry/sdk/trace/tracer_provider_factory.h"
#include "opentelemetry/trace/provider.h"
Expand Down Expand Up @@ -56,13 +57,13 @@ void InitTracer()
trace_sdk::TracerProviderFactory::Create(std::move(processor), resource);

// Set the global trace provider.
trace_api::Provider::SetTracerProvider(provider);
trace_sdk::Provider::SetTracerProvider(provider);
}

void CleanupTracer()
{
std::shared_ptr<opentelemetry::trace::TracerProvider> none;
trace_api::Provider::SetTracerProvider(none);
trace_sdk::Provider::SetTracerProvider(none);
}

opentelemetry::nostd::shared_ptr<trace_api::Tracer> get_tracer()
Expand Down
5 changes: 3 additions & 2 deletions examples/grpc/tracer_common.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#include "opentelemetry/nostd/shared_ptr.h"
#include "opentelemetry/sdk/trace/exporter.h"
#include "opentelemetry/sdk/trace/processor.h"
#include "opentelemetry/sdk/trace/provider.h"
#include "opentelemetry/sdk/trace/simple_processor_factory.h"
#include "opentelemetry/sdk/trace/tracer_context.h"
#include "opentelemetry/sdk/trace/tracer_context_factory.h"
Expand Down Expand Up @@ -85,7 +86,7 @@ void InitTracer()
std::shared_ptr<opentelemetry::trace::TracerProvider> provider =
opentelemetry::sdk::trace::TracerProviderFactory::Create(std::move(context));
// Set the global trace provider
opentelemetry::trace::Provider::SetTracerProvider(provider);
opentelemetry::sdk::trace::Provider::SetTracerProvider(provider);

// set global propagator
opentelemetry::context::propagation::GlobalTextMapPropagator::SetGlobalPropagator(
Expand All @@ -96,7 +97,7 @@ void InitTracer()
void CleanupTracer()
{
std::shared_ptr<opentelemetry::trace::TracerProvider> none;
opentelemetry::trace::Provider::SetTracerProvider(none);
opentelemetry::sdk::trace::Provider::SetTracerProvider(none);
}

opentelemetry::nostd::shared_ptr<opentelemetry::trace::Tracer> get_tracer(std::string tracer_name)
Expand Down
24 changes: 12 additions & 12 deletions examples/http/tracer_common.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,24 +3,24 @@

#pragma once

#include <cstring>
#include <iostream>
#include <vector>

#include "opentelemetry/context/propagation/global_propagator.h"
#include "opentelemetry/context/propagation/text_map_propagator.h"
#include "opentelemetry/exporters/ostream/span_exporter_factory.h"
#include "opentelemetry/ext/http/client/http_client.h"
#include "opentelemetry/nostd/shared_ptr.h"
#include "opentelemetry/sdk/trace/exporter.h"
#include "opentelemetry/sdk/trace/processor.h"
#include "opentelemetry/sdk/trace/provider.h"
#include "opentelemetry/sdk/trace/simple_processor_factory.h"
#include "opentelemetry/sdk/trace/tracer_context.h"
#include "opentelemetry/sdk/trace/tracer_context_factory.h"
#include "opentelemetry/sdk/trace/tracer_provider_factory.h"
#include "opentelemetry/trace/provider.h"

#include "opentelemetry/context/propagation/global_propagator.h"
#include "opentelemetry/context/propagation/text_map_propagator.h"
#include "opentelemetry/trace/propagation/http_trace_context.h"

#include <cstring>
#include <iostream>
#include <vector>
#include "opentelemetry/ext/http/client/http_client.h"
#include "opentelemetry/nostd/shared_ptr.h"
#include "opentelemetry/trace/provider.h"

namespace
{
Expand Down Expand Up @@ -75,7 +75,7 @@ void InitTracer()
std::shared_ptr<opentelemetry::trace::TracerProvider> provider =
opentelemetry::sdk::trace::TracerProviderFactory::Create(std::move(context));
// Set the global trace provider
opentelemetry::trace::Provider::SetTracerProvider(provider);
opentelemetry::sdk::trace::Provider::SetTracerProvider(provider);

// set global propagator
opentelemetry::context::propagation::GlobalTextMapPropagator::SetGlobalPropagator(
Expand All @@ -86,7 +86,7 @@ void InitTracer()
void CleanupTracer()
{
std::shared_ptr<opentelemetry::trace::TracerProvider> none;
opentelemetry::trace::Provider::SetTracerProvider(none);
opentelemetry::sdk::trace::Provider::SetTracerProvider(none);
}

opentelemetry::nostd::shared_ptr<opentelemetry::trace::Tracer> get_tracer(std::string tracer_name)
Expand Down
Loading
Loading