diff --git a/deps/opentelemetry-cpp/.bazelrc b/deps/opentelemetry-cpp/.bazelrc index 57cd0a2fa0c..9b87c5283a8 100644 --- a/deps/opentelemetry-cpp/.bazelrc +++ b/deps/opentelemetry-cpp/.bazelrc @@ -17,9 +17,9 @@ build --copt -DGRPC_BAZEL_BUILD build:windows --dynamic_mode=off # Set minimum supported C++ version -build:macos --host_cxxopt=-std=c++14 --cxxopt=-std=c++14 -build:linux --host_cxxopt=-std=c++14 --cxxopt=-std=c++14 -build:windows --host_cxxopt=/std:c++14 --cxxopt=/std:c++14 +build:macos --host_cxxopt=-std=c++17 --cxxopt=-std=c++17 +build:linux --host_cxxopt=-std=c++17 --cxxopt=-std=c++17 +build:windows --host_cxxopt=/std:c++17 --cxxopt=/std:c++17 # --config=asan : Address Sanitizer. common:asan --copt -DADDRESS_SANITIZER diff --git a/deps/opentelemetry-cpp/.bazelversion b/deps/opentelemetry-cpp/.bazelversion index 21c8c7b46b8..6d2890793d4 100644 --- a/deps/opentelemetry-cpp/.bazelversion +++ b/deps/opentelemetry-cpp/.bazelversion @@ -1 +1 @@ -7.1.1 +8.5.0 diff --git a/deps/opentelemetry-cpp/.bcr/README.md b/deps/opentelemetry-cpp/.bcr/README.md new file mode 100644 index 00000000000..3a67dfa7443 --- /dev/null +++ b/deps/opentelemetry-cpp/.bcr/README.md @@ -0,0 +1,58 @@ +# BCR Publishing Configuration + +This directory contains the template files required for publishing opentelemetry-cpp to the [Bazel Central Registry (BCR)](https://github.com/bazelbuild/bazel-central-registry). + +## Files + +### metadata.template.json +Contains the module metadata including homepage, maintainers, and repository information. This is used to create/update the BCR metadata for the module. + +### source.template.json +Defines the source archive location and format. Placeholders like `{OWNER}`, `{REPO}`, `{TAG}`, and `{VERSION}` are automatically replaced during publishing. + +### presubmit.yml +Defines the BCR presubmit tests that run when a new version is published. Currently configured to test on: +- Platforms: debian10, macos, ubuntu2004, windows +- Bazel versions: 7.x, 8.x, 9.* + +## Publishing Process + +The publish-to-bcr workflow (`.github/workflows/publish-to-bcr.yml`) automates publishing to BCR. + +### Prerequisites + +**Create a Personal Access Token (PAT)**: + - Create a Classic PAT with `workflow` and `repo` permissions + - Add it as a secret named `BCR_PUBLISH_TOKEN` in repository settings + +### How to Publish + +The workflow can be triggered in two ways: + +1. **Automatically**: When a new GitHub release is published +2. **Manually**: Via workflow dispatch in GitHub Actions UI + - Go to Actions → Publish to BCR → Run workflow + - Enter the tag name (e.g., `v1.24.0`) + +### What Happens + +When triggered, the workflow: +1. Generates a BCR entry using these templates +2. Pushes the entry to your BCR fork +3. Opens a pull request against the upstream BCR + +### Using a Fork Registry + +For development and testing, you can use a fork of the Bazel Central Registry: + +1. Fork https://github.com/bazelbuild/bazel-central-registry +2. Configure your fork URL in the workflow (modify the `publish-to-bcr.yml` file) +3. Test changes in your fork before submitting to the official BCR + +The configuration in this repository points to the **official** Bazel Central Registry at https://github.com/bazelbuild/bazel-central-registry. However, using a fork registry is recommended for testing and development to avoid polluting the official registry during experimentation. + +## References + +- [Publish to BCR Action](https://github.com/bazel-contrib/publish-to-bcr) +- [Bazel Central Registry](https://github.com/bazelbuild/bazel-central-registry) +- [BCR Module: opentelemetry-cpp](https://github.com/bazelbuild/bazel-central-registry/tree/main/modules/opentelemetry-cpp) diff --git a/deps/opentelemetry-cpp/.bcr/metadata.template.json b/deps/opentelemetry-cpp/.bcr/metadata.template.json new file mode 100644 index 00000000000..4db3fb88171 --- /dev/null +++ b/deps/opentelemetry-cpp/.bcr/metadata.template.json @@ -0,0 +1,22 @@ +{ + "homepage": "https://github.com/open-telemetry/opentelemetry-cpp", + "maintainers": [ + { + "name": "Keith Smiley", + "email": "keithbsmiley@gmail.com", + "github": "keith", + "github_user_id": 283886 + }, + { + "name": "Marc Alff", + "email": "marc.alff@oracle.com", + "github": "marcalff", + "github_user_id": 17238896 + } + ], + "repository": [ + "github:open-telemetry/opentelemetry-cpp" + ], + "versions": [], + "yanked_versions": {} +} diff --git a/deps/opentelemetry-cpp/.bcr/presubmit.yml b/deps/opentelemetry-cpp/.bcr/presubmit.yml new file mode 100644 index 00000000000..4bc27b5d144 --- /dev/null +++ b/deps/opentelemetry-cpp/.bcr/presubmit.yml @@ -0,0 +1,14 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 +matrix: + platform: ["debian10", "macos", "ubuntu2004", "windows"] + bazel: ["7.x", "8.x", "9.x"] +tasks: + verify_targets: + platform: ${{ platform }} + bazel: ${{ bazel }} + build_flags: + - '--cxxopt=-std=c++17' + - '--host_cxxopt=-std=c++17' + build_targets: + - '@opentelemetry-cpp//api' diff --git a/deps/opentelemetry-cpp/.bcr/source.template.json b/deps/opentelemetry-cpp/.bcr/source.template.json new file mode 100644 index 00000000000..94d3157d744 --- /dev/null +++ b/deps/opentelemetry-cpp/.bcr/source.template.json @@ -0,0 +1,5 @@ +{ + "integrity": "", + "strip_prefix": "opentelemetry-cpp-{VERSION}", + "url": "https://github.com/{OWNER}/{REPO}/archive/refs/tags/{TAG}.tar.gz" +} diff --git a/deps/opentelemetry-cpp/.clang-tidy b/deps/opentelemetry-cpp/.clang-tidy index db61b810c99..599a02fd88a 100644 --- a/deps/opentelemetry-cpp/.clang-tidy +++ b/deps/opentelemetry-cpp/.clang-tidy @@ -35,8 +35,7 @@ Checks: > -cppcoreguidelines-avoid-do-while, -cppcoreguidelines-avoid-c-arrays, -cppcoreguidelines-avoid-magic-numbers, - -cppcoreguidelines-init-variables, -cppcoreguidelines-macro-usage, -cppcoreguidelines-non-private-member-variables-in-classes, -cppcoreguidelines-avoid-non-const-global-variables, - -cppcoreguidelines-pro-* \ No newline at end of file + -cppcoreguidelines-pro-* diff --git a/deps/opentelemetry-cpp/.clomonitor.yml b/deps/opentelemetry-cpp/.clomonitor.yml new file mode 100644 index 00000000000..6b06698eab8 --- /dev/null +++ b/deps/opentelemetry-cpp/.clomonitor.yml @@ -0,0 +1,6 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 +# see https://github.com/cncf/clomonitor/blob/main/docs/checks.md#exemptions +exemptions: + - check: artifacthub_badge + reason: "Artifact Hub doesn't support c++ packages" diff --git a/deps/opentelemetry-cpp/.devcontainer/Dockerfile.dev b/deps/opentelemetry-cpp/.devcontainer/Dockerfile.dev index 60efed9723d..fec4e16c6a8 100644 --- a/deps/opentelemetry-cpp/.devcontainer/Dockerfile.dev +++ b/deps/opentelemetry-cpp/.devcontainer/Dockerfile.dev @@ -15,13 +15,18 @@ COPY ci /opt/ci RUN apt update && apt install -y wget \ ninja-build \ - llvm-dev \ - libclang-dev \ - clang-tidy \ + llvm-20-dev \ + libclang-20-dev \ + clang-tidy-20 \ shellcheck \ sudo \ cmake +RUN update-alternatives --install /usr/bin/clang-tidy clang-tidy /usr/bin/clang-tidy-20 200 && \ + update-alternatives --install /usr/bin/llvm-config llvm-config /usr/bin/llvm-config-20 200 && \ + update-alternatives --config clang-tidy && \ + update-alternatives --config llvm-config + RUN cd /opt/ci && bash setup_ci_environment.sh RUN cd /opt/ci && bash install_iwyu.sh diff --git a/deps/opentelemetry-cpp/.gitignore b/deps/opentelemetry-cpp/.gitignore index cafefd636dd..e7bab0eb083 100644 --- a/deps/opentelemetry-cpp/.gitignore +++ b/deps/opentelemetry-cpp/.gitignore @@ -80,3 +80,7 @@ functional/cert/server_cert_b.csr functional/cert/server_cert_b.pem functional/cert/server_cert_b-key.pem functional/cert/unreadable.pem + +# CodeQL build artifacts +_codeql_build_dir/ +_codeql_detected_source_root diff --git a/deps/opentelemetry-cpp/.iwyu.imp b/deps/opentelemetry-cpp/.iwyu.imp index 123e72f32da..e2ab0e3b4e6 100644 --- a/deps/opentelemetry-cpp/.iwyu.imp +++ b/deps/opentelemetry-cpp/.iwyu.imp @@ -11,6 +11,18 @@ { "include": ["", "private", "", "public"] }, { "include": ["", "private", "", "public"] }, + # Work around for ryml + { "include": ["", "private", "", "public"] }, + + { "include": ["", "private", "", "public"] }, + { "include": ["", "private", "", "public"] }, + { "include": ["", "private", "", "public"] }, + { "include": ["", "private", "", "public"] }, + { "include": ["", "private", "", "public"] }, + { "include": ["", "private", "", "public"] }, + { "include": ["", "private", "", "public"] }, + { "include": ["", "private", "", "public"] }, + # Local opentelemetry-cpp style # We prefer to include for simplicity diff --git a/deps/opentelemetry-cpp/.markdownlint.json b/deps/opentelemetry-cpp/.markdownlint.json index 48c2ae2a3f6..9c27af34b88 100644 --- a/deps/opentelemetry-cpp/.markdownlint.json +++ b/deps/opentelemetry-cpp/.markdownlint.json @@ -4,5 +4,9 @@ { "code_blocks": false, "tables": false + }, + "MD059": + { + "prohibited_texts": [] } } diff --git a/deps/opentelemetry-cpp/MODULE.bazel b/deps/opentelemetry-cpp/MODULE.bazel index d147305b137..9500ea5c271 100644 --- a/deps/opentelemetry-cpp/MODULE.bazel +++ b/deps/opentelemetry-cpp/MODULE.bazel @@ -3,7 +3,7 @@ module( name = "opentelemetry-cpp", - version = "1.23.0", + version = "1.25.0", compatibility_level = 0, repo_name = "io_opentelemetry_cpp", ) @@ -13,11 +13,14 @@ bazel_dep(name = "bazel_skylib", version = "1.7.1") bazel_dep(name = "curl", version = "8.8.0") bazel_dep(name = "grpc", version = "1.66.0.bcr.2", repo_name = "com_github_grpc_grpc") bazel_dep(name = "nlohmann_json", version = "3.12.0", repo_name = "github_nlohmann_json") -bazel_dep(name = "opentelemetry-proto", version = "1.7.0", repo_name = "com_github_opentelemetry_proto") +bazel_dep(name = "opentelemetry-proto", version = "1.8.0", repo_name = "com_github_opentelemetry_proto") bazel_dep(name = "opentracing-cpp", version = "1.6.0", repo_name = "com_github_opentracing") bazel_dep(name = "platforms", version = "0.0.11") bazel_dep(name = "prometheus-cpp", version = "1.3.0", repo_name = "com_github_jupp0r_prometheus_cpp") bazel_dep(name = "protobuf", version = "29.0", repo_name = "com_google_protobuf") +bazel_dep(name = "rapidyaml", version = "0.9.0") +bazel_dep(name = "rules_cc", version = "0.2.9") +bazel_dep(name = "rules_foreign_cc", version = "0.15.1") bazel_dep(name = "rules_proto", version = "7.0.2") bazel_dep(name = "zlib", version = "1.3.1.bcr.5") diff --git a/deps/opentelemetry-cpp/api/BUILD b/deps/opentelemetry-cpp/api/BUILD index fb31393569c..bfd3af60147 100644 --- a/deps/opentelemetry-cpp/api/BUILD +++ b/deps/opentelemetry-cpp/api/BUILD @@ -2,6 +2,7 @@ # SPDX-License-Identifier: Apache-2.0 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag", "int_flag", "string_flag") +load("@rules_cc//cc:cc_library.bzl", "cc_library") package(default_visibility = ["//visibility:public"]) diff --git a/deps/opentelemetry-cpp/api/include/opentelemetry/baggage/baggage.h b/deps/opentelemetry-cpp/api/include/opentelemetry/baggage/baggage.h index 6c799cda278..e3e08ff225c 100644 --- a/deps/opentelemetry-cpp/api/include/opentelemetry/baggage/baggage.h +++ b/deps/opentelemetry-cpp/api/include/opentelemetry/baggage/baggage.h @@ -274,8 +274,13 @@ class OPENTELEMETRY_EXPORT Baggage { ret.push_back(' '); } - else if (std::isalnum(str[i]) || str[i] == '-' || str[i] == '_' || str[i] == '.' || - str[i] == '~') + // See https://www.w3.org/TR/baggage/#definition + else if ((str[i] >= '!') /* 21 */ + && (str[i] <= '~') /* 7E */ + && (str[i] != '"') /* 22 */ + && (str[i] != ',') /* 2C */ + && (str[i] != ';') /* 3B */ + && (str[i] != '\\')) /* 5C */ { ret.push_back(str[i]); } diff --git a/deps/opentelemetry-cpp/api/include/opentelemetry/context/runtime_context.h b/deps/opentelemetry-cpp/api/include/opentelemetry/context/runtime_context.h index 606cd796908..0ef170571b5 100644 --- a/deps/opentelemetry-cpp/api/include/opentelemetry/context/runtime_context.h +++ b/deps/opentelemetry-cpp/api/include/opentelemetry/context/runtime_context.h @@ -26,11 +26,11 @@ class Token public: bool operator==(const Context &other) const noexcept { return context_ == other; } - ~Token() noexcept; + virtual ~Token() noexcept; -private: friend class RuntimeContextStorage; +protected: // A constructor that sets the token's Context object to the // one that was passed in. Token(const Context &context) : context_(context) {} @@ -241,6 +241,26 @@ class ThreadLocalContextStorage : public RuntimeContextStorage { friend class ThreadLocalContextStorage; + /** + * Limit the max stack depth. + * The stack will still work beyond this limit, + * counting push() and pop() properly, + * but will not record contexts. + * + * In practice, this should not affect instrumented applications, + * the limit is set to 1 million nested scopes. + * + * The whole reason for this limit to exist is to prevent + * compiler warnings like: + * error: argument 1 value ‘18446744073709551615’ + * exceeds maximum object size 9223372036854775807 + * [-Werror=alloc-size-larger-than=] + * on this line of code: + * Context *temp = new Context[new_capacity]; + * when compiling with gcc and optimizations (-flto). + */ + static constexpr size_t max_capacity_ = 1000000; + Stack() noexcept : size_(0), capacity_(0), base_(nullptr) {} // Pops the top Context off the stack. @@ -250,6 +270,11 @@ class ThreadLocalContextStorage : public RuntimeContextStorage { return; } + if (size_ > max_capacity_) + { + size_ -= 1; + return; + } // Store empty Context before decrementing `size`, to ensure // the shared_ptr object (if stored in prev context object ) are released. // The stack is not resized, and the unused memory would be reutilised @@ -278,6 +303,10 @@ class ThreadLocalContextStorage : public RuntimeContextStorage { return Context(); } + if (size_ > max_capacity_) + { + return Context(); + } return base_[size_ - 1]; } @@ -286,6 +315,10 @@ class ThreadLocalContextStorage : public RuntimeContextStorage void Push(const Context &context) noexcept { size_++; + if (size_ > max_capacity_) + { + return; + } if (size_ > capacity_) { Resize(size_ * 2); @@ -299,8 +332,14 @@ class ThreadLocalContextStorage : public RuntimeContextStorage size_t old_size = size_ - 1; if (new_capacity == 0) { + // First increase new_capacity = 2; } + if (new_capacity > max_capacity_) + { + // Last increase + new_capacity = max_capacity_; + } Context *temp = new Context[new_capacity]; if (base_ != nullptr) { diff --git a/deps/opentelemetry-cpp/api/include/opentelemetry/logs/event_logger.h b/deps/opentelemetry-cpp/api/include/opentelemetry/logs/event_logger.h index 929e97cc2c4..dbeffd2042e 100644 --- a/deps/opentelemetry-cpp/api/include/opentelemetry/logs/event_logger.h +++ b/deps/opentelemetry-cpp/api/include/opentelemetry/logs/event_logger.h @@ -15,6 +15,17 @@ OPENTELEMETRY_BEGIN_NAMESPACE namespace logs { #if OPENTELEMETRY_ABI_VERSION_NO < 2 +# if defined(_MSC_VER) +# pragma warning(push) +# pragma warning(disable : 4996) +# elif defined(__GNUC__) && !defined(__clang__) && !defined(__apple_build_version__) +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +# elif defined(__clang__) || defined(__apple_build_version__) +# pragma clang diagnostic push +# pragma clang diagnostic ignored "-Wdeprecated-declarations" +# endif + /** * Handles event log record creation. **/ @@ -77,6 +88,14 @@ class OPENTELEMETRY_DEPRECATED EventLogger void IgnoreTraitResult(ValueType &&...) {} }; + +# if defined(_MSC_VER) +# pragma warning(pop) +# elif defined(__GNUC__) && !defined(__clang__) && !defined(__apple_build_version__) +# pragma GCC diagnostic pop +# elif defined(__clang__) || defined(__apple_build_version__) +# pragma clang diagnostic pop +# endif #endif } // namespace logs OPENTELEMETRY_END_NAMESPACE diff --git a/deps/opentelemetry-cpp/api/include/opentelemetry/logs/event_logger_provider.h b/deps/opentelemetry-cpp/api/include/opentelemetry/logs/event_logger_provider.h index 9eea0ca23bf..cb3b05dc727 100644 --- a/deps/opentelemetry-cpp/api/include/opentelemetry/logs/event_logger_provider.h +++ b/deps/opentelemetry-cpp/api/include/opentelemetry/logs/event_logger_provider.h @@ -15,6 +15,17 @@ class EventLogger; class Logger; #if OPENTELEMETRY_ABI_VERSION_NO < 2 +# if defined(_MSC_VER) +# pragma warning(push) +# pragma warning(disable : 4996) +# elif defined(__GNUC__) && !defined(__clang__) && !defined(__apple_build_version__) +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +# elif defined(__clang__) || defined(__apple_build_version__) +# pragma clang diagnostic push +# pragma clang diagnostic ignored "-Wdeprecated-declarations" +# endif + /** * Creates new EventLogger instances. */ @@ -32,6 +43,14 @@ class OPENTELEMETRY_DEPRECATED EventLoggerProvider nostd::shared_ptr delegate_logger, nostd::string_view event_domain) noexcept = 0; }; + +# if defined(_MSC_VER) +# pragma warning(pop) +# elif defined(__GNUC__) && !defined(__clang__) && !defined(__apple_build_version__) +# pragma GCC diagnostic pop +# elif defined(__clang__) || defined(__apple_build_version__) +# pragma clang diagnostic pop +# endif #endif } // namespace logs OPENTELEMETRY_END_NAMESPACE diff --git a/deps/opentelemetry-cpp/api/include/opentelemetry/logs/noop.h b/deps/opentelemetry-cpp/api/include/opentelemetry/logs/noop.h index 5e7654ae750..73bf1e57f9b 100644 --- a/deps/opentelemetry-cpp/api/include/opentelemetry/logs/noop.h +++ b/deps/opentelemetry-cpp/api/include/opentelemetry/logs/noop.h @@ -91,10 +91,22 @@ class NoopLoggerProvider final : public LoggerProvider }; #if OPENTELEMETRY_ABI_VERSION_NO < 2 +# if defined(_MSC_VER) +# pragma warning(push) +# pragma warning(disable : 4996) +# elif defined(__GNUC__) && !defined(__clang__) && !defined(__apple_build_version__) +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +# elif defined(__clang__) || defined(__apple_build_version__) +# pragma clang diagnostic push +# pragma clang diagnostic ignored "-Wdeprecated-declarations" +# endif + class NoopEventLogger final : public EventLogger { public: NoopEventLogger() : logger_{nostd::shared_ptr(new NoopLogger())} {} + ~NoopEventLogger() override = default; const nostd::string_view GetName() noexcept override { return "noop event logger"; } @@ -112,27 +124,9 @@ class NoopEventLogger final : public EventLogger class NoopEventLoggerProvider final : public EventLoggerProvider { public: -# if defined(_MSC_VER) -# pragma warning(push) -# pragma warning(disable : 4996) -# elif defined(__GNUC__) && !defined(__clang__) && !defined(__apple_build_version__) -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wdeprecated-declarations" -# elif defined(__clang__) || defined(__apple_build_version__) -# pragma clang diagnostic push -# pragma clang diagnostic ignored "-Wdeprecated-declarations" -# endif - NoopEventLoggerProvider() : event_logger_{nostd::shared_ptr(new NoopEventLogger())} {} - -# if defined(_MSC_VER) -# pragma warning(pop) -# elif defined(__GNUC__) && !defined(__clang__) && !defined(__apple_build_version__) -# pragma GCC diagnostic pop -# elif defined(__clang__) || defined(__apple_build_version__) -# pragma clang diagnostic pop -# endif + ~NoopEventLoggerProvider() override = default; nostd::shared_ptr CreateEventLogger( nostd::shared_ptr /*delegate_logger*/, @@ -144,6 +138,14 @@ class NoopEventLoggerProvider final : public EventLoggerProvider private: nostd::shared_ptr event_logger_; }; + +# if defined(_MSC_VER) +# pragma warning(pop) +# elif defined(__GNUC__) && !defined(__clang__) && !defined(__apple_build_version__) +# pragma GCC diagnostic pop +# elif defined(__clang__) || defined(__apple_build_version__) +# pragma clang diagnostic pop +# endif #endif } // namespace logs diff --git a/deps/opentelemetry-cpp/api/include/opentelemetry/logs/provider.h b/deps/opentelemetry-cpp/api/include/opentelemetry/logs/provider.h index 58f668e0419..83d2e765de5 100644 --- a/deps/opentelemetry-cpp/api/include/opentelemetry/logs/provider.h +++ b/deps/opentelemetry-cpp/api/include/opentelemetry/logs/provider.h @@ -48,6 +48,16 @@ class OPENTELEMETRY_EXPORT Provider } #if OPENTELEMETRY_ABI_VERSION_NO < 2 +# if defined(_MSC_VER) +# pragma warning(push) +# pragma warning(disable : 4996) +# elif defined(__GNUC__) && !defined(__clang__) && !defined(__apple_build_version__) +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +# elif defined(__clang__) || defined(__apple_build_version__) +# pragma clang diagnostic push +# pragma clang diagnostic ignored "-Wdeprecated-declarations" +# endif /** * Returns the singleton EventLoggerProvider. * @@ -70,6 +80,13 @@ class OPENTELEMETRY_EXPORT Provider std::lock_guard guard(GetLock()); GetEventProvider() = tp; } +# if defined(_MSC_VER) +# pragma warning(pop) +# elif defined(__GNUC__) && !defined(__clang__) && !defined(__apple_build_version__) +# pragma GCC diagnostic pop +# elif defined(__clang__) || defined(__apple_build_version__) +# pragma clang diagnostic pop +# endif #endif private: @@ -80,10 +97,6 @@ class OPENTELEMETRY_EXPORT Provider } #if OPENTELEMETRY_ABI_VERSION_NO < 2 - OPENTELEMETRY_DEPRECATED - OPENTELEMETRY_API_SINGLETON static nostd::shared_ptr & - GetEventProvider() noexcept - { # if defined(_MSC_VER) # pragma warning(push) # pragma warning(disable : 4996) @@ -95,8 +108,13 @@ class OPENTELEMETRY_EXPORT Provider # pragma clang diagnostic ignored "-Wdeprecated-declarations" # endif + OPENTELEMETRY_DEPRECATED + OPENTELEMETRY_API_SINGLETON static nostd::shared_ptr & + GetEventProvider() noexcept + { static nostd::shared_ptr provider(new NoopEventLoggerProvider); return provider; + } # if defined(_MSC_VER) # pragma warning(pop) @@ -105,7 +123,6 @@ class OPENTELEMETRY_EXPORT Provider # elif defined(__clang__) || defined(__apple_build_version__) # pragma clang diagnostic pop # endif - } #endif OPENTELEMETRY_API_SINGLETON static common::SpinLockMutex &GetLock() noexcept diff --git a/deps/opentelemetry-cpp/api/include/opentelemetry/metrics/meter.h b/deps/opentelemetry-cpp/api/include/opentelemetry/metrics/meter.h index 59cfb878226..390bf006e65 100644 --- a/deps/opentelemetry-cpp/api/include/opentelemetry/metrics/meter.h +++ b/deps/opentelemetry-cpp/api/include/opentelemetry/metrics/meter.h @@ -3,7 +3,10 @@ #pragma once +#include + #include "opentelemetry/nostd/shared_ptr.h" +#include "opentelemetry/nostd/span.h" #include "opentelemetry/nostd/string_view.h" #include "opentelemetry/nostd/unique_ptr.h" #include "opentelemetry/version.h" @@ -25,6 +28,8 @@ template class Gauge; class ObservableInstrument; +class MultiObserverResult; +using MultiObservableCallbackPtr = void (*)(MultiObserverResult &, void *); /** * Handles instrument creation and provides a facility for batch recording. @@ -169,6 +174,32 @@ class Meter nostd::string_view name, nostd::string_view description = "", nostd::string_view unit = "") noexcept = 0; + +#if OPENTELEMETRY_ABI_VERSION_NO >= 2 + + /** + * Registers a callback to be invoked when metrics are collected by this meter. The callback will + * be passed a MultiObserverResult which it can use to make observations for any or all of the + * instruments provided in this registration. Any measurements recorded for instruments _not_ in + * the initial RegisterCallback call will be discarded. + * + * @param callback the callback to be invoked. + * @param state the state to be passed to the callback. + * @param instruments the instruments to be observed. + * @return a unique identifier for the registered callback, which can be used to unregister the + * callback in DeregisterCallback. + */ + virtual uintptr_t RegisterCallback(MultiObservableCallbackPtr callback, + void *state, + nostd::span instruments) noexcept = 0; + + /** + * Unregisters a callback previously registered with RegisterCallback. + * + * @param callback_id the unique identifier returned by RegisterCallback. + */ + virtual void DeregisterCallback(uintptr_t callback_id) noexcept = 0; +#endif }; } // namespace metrics OPENTELEMETRY_END_NAMESPACE diff --git a/deps/opentelemetry-cpp/api/include/opentelemetry/metrics/multi_observer_result.h b/deps/opentelemetry-cpp/api/include/opentelemetry/metrics/multi_observer_result.h new file mode 100644 index 00000000000..e3c62562259 --- /dev/null +++ b/deps/opentelemetry-cpp/api/include/opentelemetry/metrics/multi_observer_result.h @@ -0,0 +1,57 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#pragma once + +#include + +#include "opentelemetry/metrics/async_instruments.h" +#include "opentelemetry/metrics/observer_result.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace metrics +{ + +class MultiObserverResult +{ + +public: + virtual ~MultiObserverResult() = default; + + /** + * Obtain an ObserverResultT for the given instrument, that can be used to record + * a measurement on said instrument from a multi-observer callback registered with + * Meter::RegisterCallback. The instrument _must_ have been included in the original + * call to Meter::RegisterCallback; any data points set on other instruments will be + * discarded. + * + * @param instrument The instrument for which to obtain an ObserverResult. + * @return An ObserverResultT for the given instrument. + */ + template + ObserverResultT &ForInstrument(const ObservableInstrument *instrument) = delete; + +protected: + // You can't have a virtual template, and you can't overload on return type, so we need to + // enumerate the options for the observer result type as separate methods to override. + virtual ObserverResultT &ForInstrumentDouble(const ObservableInstrument *instrument) = 0; + virtual ObserverResultT &ForInstrumentInt64(const ObservableInstrument *instrument) = 0; +}; + +template <> +inline ObserverResultT &MultiObserverResult::ForInstrument( + const ObservableInstrument *instrument) +{ + return ForInstrumentDouble(instrument); +} + +template <> +inline ObserverResultT &MultiObserverResult::ForInstrument( + const ObservableInstrument *instrument) +{ + return ForInstrumentInt64(instrument); +} + +} // namespace metrics +OPENTELEMETRY_END_NAMESPACE diff --git a/deps/opentelemetry-cpp/api/include/opentelemetry/metrics/noop.h b/deps/opentelemetry-cpp/api/include/opentelemetry/metrics/noop.h index 1d508b93877..d472f47c0f1 100644 --- a/deps/opentelemetry-cpp/api/include/opentelemetry/metrics/noop.h +++ b/deps/opentelemetry-cpp/api/include/opentelemetry/metrics/noop.h @@ -229,6 +229,18 @@ class NoopMeter final : public Meter return nostd::shared_ptr( new NoopObservableInstrument(name, description, unit)); } + +#if OPENTELEMETRY_ABI_VERSION_NO >= 2 + uintptr_t RegisterCallback( + MultiObservableCallbackPtr /* callback */, + void * /* state */, + nostd::span /* instruments */) noexcept override + { + return 0; + } + + void DeregisterCallback(uintptr_t /* callback_id */) noexcept override {} +#endif }; /** diff --git a/deps/opentelemetry-cpp/api/include/opentelemetry/nostd/internal/absl/types/internal/variant.h b/deps/opentelemetry-cpp/api/include/opentelemetry/nostd/internal/absl/types/internal/variant.h index 43e7285b234..4436b532d3d 100644 --- a/deps/opentelemetry-cpp/api/include/opentelemetry/nostd/internal/absl/types/internal/variant.h +++ b/deps/opentelemetry-cpp/api/include/opentelemetry/nostd/internal/absl/types/internal/variant.h @@ -45,7 +45,7 @@ OTABSL_NAMESPACE_BEGIN template class variant; -OTABSL_INTERNAL_INLINE_CONSTEXPR(size_t, variant_npos, -1); +OTABSL_INTERNAL_INLINE_CONSTEXPR(size_t, variant_npos, static_cast(-1)); template struct variant_size; diff --git a/deps/opentelemetry-cpp/api/include/opentelemetry/nostd/shared_ptr.h b/deps/opentelemetry-cpp/api/include/opentelemetry/nostd/shared_ptr.h index 681c4eb377b..88fb07ad3ff 100644 --- a/deps/opentelemetry-cpp/api/include/opentelemetry/nostd/shared_ptr.h +++ b/deps/opentelemetry-cpp/api/include/opentelemetry/nostd/shared_ptr.h @@ -119,6 +119,10 @@ class shared_ptr shared_ptr &operator=(shared_ptr &&other) noexcept { + if (this == &other) + { + return *this; + } wrapper().~shared_ptr_wrapper(); other.wrapper().MoveTo(buffer_); return *this; @@ -132,6 +136,10 @@ class shared_ptr shared_ptr &operator=(const shared_ptr &other) noexcept { + if (this == &other) + { + return *this; + } wrapper().~shared_ptr_wrapper(); other.wrapper().CopyTo(buffer_); return *this; diff --git a/deps/opentelemetry-cpp/api/include/opentelemetry/nostd/string_view.h b/deps/opentelemetry-cpp/api/include/opentelemetry/nostd/string_view.h index f0e5bd9e2ac..a0c80814735 100644 --- a/deps/opentelemetry-cpp/api/include/opentelemetry/nostd/string_view.h +++ b/deps/opentelemetry-cpp/api/include/opentelemetry/nostd/string_view.h @@ -124,7 +124,7 @@ class string_view auto found = Traits::find(data() + pos, length() - pos, ch); if (found) { - res = found - data(); + res = static_cast(found - data()); } } return res; diff --git a/deps/opentelemetry-cpp/api/include/opentelemetry/nostd/variant.h b/deps/opentelemetry-cpp/api/include/opentelemetry/nostd/variant.h index 4abac7766a5..d465f1ad412 100644 --- a/deps/opentelemetry-cpp/api/include/opentelemetry/nostd/variant.h +++ b/deps/opentelemetry-cpp/api/include/opentelemetry/nostd/variant.h @@ -27,7 +27,7 @@ namespace nostd class bad_variant_access : public std::exception { public: - virtual const char *what() const noexcept override { return "bad_variant_access"; } + const char *what() const noexcept override { return "bad_variant_access"; } }; [[noreturn]] inline void throw_bad_variant_access() diff --git a/deps/opentelemetry-cpp/api/include/opentelemetry/plugin/detail/dynamic_load_windows.h b/deps/opentelemetry-cpp/api/include/opentelemetry/plugin/detail/dynamic_load_windows.h index 5ed2833756b..7f4365e3c82 100644 --- a/deps/opentelemetry-cpp/api/include/opentelemetry/plugin/detail/dynamic_load_windows.h +++ b/deps/opentelemetry-cpp/api/include/opentelemetry/plugin/detail/dynamic_load_windows.h @@ -12,10 +12,10 @@ #include "opentelemetry/plugin/hook.h" #include "opentelemetry/version.h" -#include +#include -#include #include +#include OPENTELEMETRY_BEGIN_NAMESPACE namespace plugin diff --git a/deps/opentelemetry-cpp/api/include/opentelemetry/semconv/db_attributes.h b/deps/opentelemetry-cpp/api/include/opentelemetry/semconv/db_attributes.h index fa77366619b..67abc8a669d 100644 --- a/deps/opentelemetry-cpp/api/include/opentelemetry/semconv/db_attributes.h +++ b/deps/opentelemetry-cpp/api/include/opentelemetry/semconv/db_attributes.h @@ -84,7 +84,7 @@ static constexpr const char *kDbOperationName = "db.operation.name"; Summary may be available to the instrumentation through instrumentation hooks or other means. If it is not available, instrumentations that support query parsing SHOULD generate a summary following - Generating query + Generating query summary section. */ static constexpr const char *kDbQuerySummary = "db.query.summary"; @@ -92,11 +92,10 @@ static constexpr const char *kDbQuerySummary = "db.query.summary"; /** The database query being executed.

- For sanitization see Sanitization of @code - db.query.text @endcode. For batch operations, if the individual operations are known to have - the same query text then that query text SHOULD be used, otherwise all of the individual query - texts SHOULD be concatenated with separator @code ; @endcode or some other database system + For sanitization see Sanitization + of @code db.query.text @endcode. For batch operations, if the individual operations are known + to have the same query text then that query text SHOULD be used, otherwise all of the individual + query texts SHOULD be concatenated with separator @code ; @endcode or some other database system specific separator if more applicable. Parameterized query text SHOULD NOT be sanitized. Even though parameterized query text can potentially have sensitive data, by using a parameterized query the user is giving a strong signal that any sensitive data will be passed as parameter diff --git a/deps/opentelemetry-cpp/api/include/opentelemetry/semconv/error_attributes.h b/deps/opentelemetry-cpp/api/include/opentelemetry/semconv/error_attributes.h index e0ef3c925ed..427a515347a 100644 --- a/deps/opentelemetry-cpp/api/include/opentelemetry/semconv/error_attributes.h +++ b/deps/opentelemetry-cpp/api/include/opentelemetry/semconv/error_attributes.h @@ -35,7 +35,7 @@ namespace error additional filters are applied.

If the operation has completed successfully, instrumentations SHOULD NOT set @code error.type - @endcode.

If a specific domain defines its own set of error identifiers (such as HTTP or gRPC + @endcode.

If a specific domain defines its own set of error identifiers (such as HTTP or RPC status codes), it's RECOMMENDED to: