From 223f3dbc3fb226a77091aba339c2df6c0538b6fc Mon Sep 17 00:00:00 2001 From: Ryan Northey Date: Sun, 7 May 2023 21:50:46 +0100 Subject: [PATCH] deps: Remove opentracing Signed-off-by: Ryan Northey --- api/envoy/config/trace/v3/dynamic_ot.proto | 2 + bazel/external/BUILD | 16 - bazel/io_opentracing_cpp.patch | 59 --- bazel/repositories.bzl | 14 - bazel/repository_locations.bzl | 18 - docs/root/start/sandboxes/index.rst | 1 - .../start/sandboxes/jaeger_native_tracing.rst | 121 ------ docs/root/start/sandboxes/jaeger_tracing.rst | 3 - docs/v2_mapping.json | 1 - examples/jaeger-native-tracing/README.md | 2 - .../jaeger-native-tracing/docker-compose.yaml | 42 -- examples/jaeger-native-tracing/envoy.yaml | 69 ---- .../install-jaeger-plugin.sh | 3 - .../service1-envoy-jaeger.yaml | 105 ----- .../service2-envoy-jaeger.yaml | 64 --- examples/jaeger-native-tracing/verify.sh | 19 - source/extensions/extensions_build_config.bzl | 1 - source/extensions/extensions_metadata.yaml | 7 - source/extensions/tracers/common/ot/BUILD | 32 -- .../common/ot/opentracing_driver_impl.cc | 216 ---------- .../common/ot/opentracing_driver_impl.h | 93 ----- source/extensions/tracers/dynamic_ot/BUILD | 37 -- .../extensions/tracers/dynamic_ot/config.cc | 40 -- source/extensions/tracers/dynamic_ot/config.h | 31 -- .../dynamic_opentracing_driver_impl.cc | 42 -- .../dynamic_opentracing_driver_impl.h | 44 -- test/extensions/tracers/common/ot/BUILD | 30 -- .../common/ot/opentracing_driver_impl_test.cc | 377 ------------------ test/extensions/tracers/dynamic_ot/BUILD | 52 --- .../tracers/dynamic_ot/config_test.cc | 60 --- .../dynamic_opentracing_driver_impl_test.cc | 102 ----- 31 files changed, 2 insertions(+), 1701 deletions(-) delete mode 100644 bazel/io_opentracing_cpp.patch delete mode 100644 docs/root/start/sandboxes/jaeger_native_tracing.rst delete mode 100644 examples/jaeger-native-tracing/README.md delete mode 100644 examples/jaeger-native-tracing/docker-compose.yaml delete mode 100644 examples/jaeger-native-tracing/envoy.yaml delete mode 100755 examples/jaeger-native-tracing/install-jaeger-plugin.sh delete mode 100644 examples/jaeger-native-tracing/service1-envoy-jaeger.yaml delete mode 100644 examples/jaeger-native-tracing/service2-envoy-jaeger.yaml delete mode 100755 examples/jaeger-native-tracing/verify.sh delete mode 100644 source/extensions/tracers/common/ot/BUILD delete mode 100644 source/extensions/tracers/common/ot/opentracing_driver_impl.cc delete mode 100644 source/extensions/tracers/common/ot/opentracing_driver_impl.h delete mode 100644 source/extensions/tracers/dynamic_ot/BUILD delete mode 100644 source/extensions/tracers/dynamic_ot/config.cc delete mode 100644 source/extensions/tracers/dynamic_ot/config.h delete mode 100644 source/extensions/tracers/dynamic_ot/dynamic_opentracing_driver_impl.cc delete mode 100644 source/extensions/tracers/dynamic_ot/dynamic_opentracing_driver_impl.h delete mode 100644 test/extensions/tracers/common/ot/BUILD delete mode 100644 test/extensions/tracers/common/ot/opentracing_driver_impl_test.cc delete mode 100644 test/extensions/tracers/dynamic_ot/BUILD delete mode 100644 test/extensions/tracers/dynamic_ot/config_test.cc delete mode 100644 test/extensions/tracers/dynamic_ot/dynamic_opentracing_driver_impl_test.cc diff --git a/api/envoy/config/trace/v3/dynamic_ot.proto b/api/envoy/config/trace/v3/dynamic_ot.proto index 954c4a422abf..03af384cf25b 100644 --- a/api/envoy/config/trace/v3/dynamic_ot.proto +++ b/api/envoy/config/trace/v3/dynamic_ot.proto @@ -19,6 +19,8 @@ option (udpa.annotations.file_status).package_version_status = ACTIVE; // [#protodoc-title: Dynamically loadable OpenTracing tracer] +// [#not-implemented-hide:] +// // DynamicOtConfig is used to dynamically load a tracer from a shared library // that implements the `OpenTracing dynamic loading API // `_. diff --git a/bazel/external/BUILD b/bazel/external/BUILD index ac145dcdfd17..d8fa82e54a64 100644 --- a/bazel/external/BUILD +++ b/bazel/external/BUILD @@ -2,22 +2,6 @@ licenses(["notice"]) # Apache 2 exports_files(["boringssl_fips.genrule_cmd"]) -# Use a wrapper cc_library with an empty source source file to force -# compilation of other cc_library targets that only list *.a sources. -cc_library( - name = "all_external", - srcs = [":empty.cc"], - defines = ["OPENTRACING_STATIC"], - # TODO: external/io_opentracing_cpp/BUILD.bazel:19:1: Executing genrule - # @io_opentracing_cpp//:generate_version_h failed - needs porting - tags = ["skip_on_windows"], - deps = [ - "@com_github_datadog_dd_trace_cpp//:dd_trace_cpp", - "@com_google_googletest//:gtest", - "@io_opentracing_cpp//:opentracing", - ], -) - genrule( name = "empty_cc", outs = ["empty.cc"], diff --git a/bazel/io_opentracing_cpp.patch b/bazel/io_opentracing_cpp.patch deleted file mode 100644 index a0760ee1e86c..000000000000 --- a/bazel/io_opentracing_cpp.patch +++ /dev/null @@ -1,59 +0,0 @@ -diff --git a/mocktracer/BUILD b/mocktracer/BUILD -index 3b22bab..d425e2e 100644 ---- a/mocktracer/BUILD -+++ b/mocktracer/BUILD -@@ -7,11 +7,13 @@ cc_library( - deps = [ - "//:opentracing", - ], -+ alwayslink = 1, - ) - - cc_binary( - name = "libmocktracer_plugin.so", - linkshared = 1, -+ linkstatic = 1, - visibility = ["//visibility:public"], - deps = [ - "//mocktracer:mocktracer" -diff --git a/src/dynamic_load_unix.cpp b/src/dynamic_load_unix.cpp -index 17e08fd..7e8ac02 100644 ---- a/src/dynamic_load_unix.cpp -+++ b/src/dynamic_load_unix.cpp -@@ -35,7 +35,13 @@ DynamicallyLoadTracingLibrary(const char* shared_library, - std::string& error_message) noexcept try { - dlerror(); // Clear any existing error. - -- const auto handle = dlopen(shared_library, RTLD_NOW | RTLD_LOCAL); -+ const auto handle = dlopen(shared_library, RTLD_NOW | RTLD_LOCAL -+#if defined(__has_feature) -+#if __has_feature(address_sanitizer) -+ | RTLD_NODELETE -+#endif -+#endif -+ ); - if (handle == nullptr) { - error_message = dlerror(); - return make_unexpected(dynamic_load_failure_error); -# commit 3a6f049c123a1906c7381e824292c18fd8698293 -# Author: Christian Neumüller -# Date: Wed Feb 27 01:48:17 2019 +0100 -# -# Fix MSVC compiler flags. (#104) -# -# * All debug specific flags would be replaced by release specific on MSVC. -# * The OPENTRACING_STATIC flag would be missing from OpenTracingConfig.cmake when linking against OpenTracing::opentracing-static -# -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 1721fb3..3873b3a 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -52,7 +52,7 @@ if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") - elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra") - elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") -- set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_RELEASE} -D_SCL_SECURE_NO_WARNINGS") -+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_SCL_SECURE_NO_WARNINGS") - endif() - - # ============================================================================== diff --git a/bazel/repositories.bzl b/bazel/repositories.bzl index 1d8cbb9f33b7..43969c7e85cb 100644 --- a/bazel/repositories.bzl +++ b/bazel/repositories.bzl @@ -11,7 +11,6 @@ WINDOWS_SKIP_TARGETS = [ "envoy.filters.http.file_system_buffer", "envoy.filters.http.language", "envoy.filters.http.sxg", - "envoy.tracers.dynamic_ot", "envoy.tracers.datadog", "envoy.tracers.opencensus", ] @@ -280,7 +279,6 @@ def envoy_dependencies(skip_targets = []): _com_github_google_quiche() _com_googlesource_googleurl() _io_hyperscan() - _io_opentracing_cpp() _net_colm_open_source_colm() _net_colm_open_source_ragel() _net_zlib() @@ -636,18 +634,6 @@ def _io_hyperscan(): patches = ["@envoy//bazel/foreign_cc:hyperscan.patch"], ) -def _io_opentracing_cpp(): - external_http_archive( - name = "io_opentracing_cpp", - patch_args = ["-p1"], - # Workaround for LSAN false positive in https://github.com/envoyproxy/envoy/issues/7647 - patches = ["@envoy//bazel:io_opentracing_cpp.patch"], - ) - native.bind( - name = "opentracing", - actual = "@io_opentracing_cpp//:opentracing", - ) - def _com_github_datadog_dd_trace_cpp(): external_http_archive("com_github_datadog_dd_trace_cpp") native.bind( diff --git a/bazel/repository_locations.bzl b/bazel/repository_locations.bzl index 8e00f134b23d..6188281479fb 100644 --- a/bazel/repository_locations.bzl +++ b/bazel/repository_locations.bzl @@ -472,24 +472,6 @@ REPOSITORY_LOCATIONS_SPEC = dict( license = "BSD-3-Clause", license_url = "https://github.com/intel/hyperscan/blob/{version}/LICENSE", ), - io_opentracing_cpp = dict( - project_name = "OpenTracing", - project_desc = "Vendor-neutral APIs and instrumentation for distributed tracing", - project_url = "https://opentracing.io", - version = "1.5.1", - sha256 = "015c4187f7a6426a2b5196f0ccd982aa87f010cf61f507ae3ce5c90523f92301", - strip_prefix = "opentracing-cpp-{version}", - urls = ["https://github.com/opentracing/opentracing-cpp/archive/v{version}.tar.gz"], - use_category = ["observability_ext"], - extensions = [ - "envoy.tracers.datadog", - "envoy.tracers.dynamic_ot", - ], - release_date = "2019-01-16", - cpe = "N/A", - license = "Apache-2.0", - license_url = "https://github.com/opentracing/opentracing-cpp/blob/v{version}/LICENSE", - ), skywalking_data_collect_protocol = dict( project_name = "skywalking-data-collect-protocol", project_desc = "Data Collect Protocols of Apache SkyWalking", diff --git a/docs/root/start/sandboxes/index.rst b/docs/root/start/sandboxes/index.rst index d2427c7ffd59..de5bbbc61756 100644 --- a/docs/root/start/sandboxes/index.rst +++ b/docs/root/start/sandboxes/index.rst @@ -58,7 +58,6 @@ The following sandboxes are available: golang grpc_bridge gzip - jaeger_native_tracing jaeger_tracing kafka load_reporting_service diff --git a/docs/root/start/sandboxes/jaeger_native_tracing.rst b/docs/root/start/sandboxes/jaeger_native_tracing.rst deleted file mode 100644 index 5b1295ffba6c..000000000000 --- a/docs/root/start/sandboxes/jaeger_native_tracing.rst +++ /dev/null @@ -1,121 +0,0 @@ -.. _install_sandboxes_jaeger_native_tracing: - -Jaeger native tracing -===================== - -.. sidebar:: Requirements - - .. include:: _include/docker-env-setup-link.rst - - :ref:`curl ` - Used to make ``HTTP`` requests. - -.. sidebar:: Compatibility - - The jaeger native tracing sandbox uses a binary built for ``x86_64``, and will therefore - only work on that architecture. - -The Jaeger tracing sandbox demonstrates Envoy's :ref:`request tracing ` -capabilities using `Jaeger `_ as the tracing provider and Jaeger's native -`C++ client `_ as a plugin. Using Jaeger with its -native client instead of with Envoy's builtin Zipkin client has the following advantages: - -- Trace propagation will work with the other services using Jaeger without needing to make - configuration `changes `_. -- A variety of different `sampling strategies `_ - can be used, including probabilistic or remote where sampling can be centrally controlled from Jaeger's backend. -- Spans are sent to the collector in a more efficient binary encoding. - -This sandbox is very similar to the front proxy architecture described above, with one difference: -service1 makes an API call to service2 before returning a response. -The three containers will be deployed inside a virtual network called ``envoymesh``. - -All incoming requests are routed via the front Envoy, which is acting as a reverse proxy -sitting on the edge of the ``envoymesh`` network. Port ``8000`` is exposed -by docker compose (see :download:`docker-compose.yaml <_include/jaeger-native-tracing/docker-compose.yaml>`). Notice that -all Envoys are configured to collect request traces (e.g., http_connection_manager/config/tracing setup in -:download:`envoy.yaml <_include/jaeger-native-tracing/envoy.yaml>`) and setup to propagate the spans generated -by the Jaeger tracer to a Jaeger cluster (trace driver setup -in :download:`envoy.yaml <_include/jaeger-native-tracing/envoy.yaml>`). - -Before routing a request to the appropriate service Envoy or the application, Envoy will take -care of generating the appropriate spans for tracing (parent/child context spans). -At a high-level, each span records the latency of upstream API calls as well as information -needed to correlate the span with other related spans (e.g., the trace ID). - -One of the most important benefits of tracing from Envoy is that it will take care of -propagating the traces to the Jaeger service cluster. However, in order to fully take advantage -of tracing, the application has to propagate trace headers that Envoy generates, while making -calls to other services. In the sandbox we have provided, the simple ``aiohttp`` app -(see trace function in :download:`examples/shared/python/tracing/service.py <_include/shared/python/tracing/service.py>`) acting as service1 propagates -the trace headers while making an outbound call to service2. - -Step 3: Build the sandbox -************************* - -To build this sandbox example, and start the example apps run the following commands: - -.. code-block:: console - - $ pwd - envoy/examples/jaeger-native-tracing - $ docker compose pull - $ docker compose up --build -d - $ docker compose ps - - Name Command State Ports - ------------------------------------------------------------------------------------------------------------------------------------------------------------------- - jaeger-native-tracing_front-envoy_1 /start-front.sh Up 10000/tcp, 0.0.0.0:8000->8000/tcp - jaeger-native-tracing_jaeger_1 /go/bin/all-in-one-linux - ... Up 14250/tcp, 14268/tcp, 0.0.0.0:16686->16686/tcp, 5775/udp, 5778/tcp, 6831/udp, 6832/udp - jaeger-native-tracing_service1_1 /start-service.sh Up 10000/tcp - jaeger-native-tracing_service2_1 /start-service.sh Up 10000/tcp - -Step 4: Generate some load -************************** - -You can now send a request to service1 via the front-envoy as follows: - -.. code-block:: console - - $ curl -v localhost:8000/trace/1 - * Trying 192.168.99.100... - * Connected to 192.168.99.100 (192.168.99.100) port 8000 (#0) - > GET /trace/1 HTTP/1.1 - > Host: 192.168.99.100:8000 - > User-Agent: curl/7.54.0 - > Accept: */* - > - < HTTP/1.1 200 OK - < content-type: text/html; charset=utf-8 - < content-length: 89 - < x-envoy-upstream-service-time: 9 - < server: envoy - < date: Fri, 26 Aug 2018 19:39:19 GMT - < - Hello from behind Envoy (service 1)! hostname: f26027f1ce28 resolvedhostname: 172.19.0.6 - * Connection #0 to host 192.168.99.100 left intact - -Step 5: View the traces in Jaeger UI -************************************ - -Point your browser to http://localhost:16686 . You should see the Jaeger dashboard. -Set the service to "front-proxy" and hit 'Find Traces'. You should see traces from the front-proxy. -Click on a trace to explore the path taken by the request from front-proxy to service1 -to service2, as well as the latency incurred at each hop. - -.. seealso:: - - :ref:`Request tracing ` - Learn more about using Envoy's request tracing. - - `Jaeger `_ - Jaeger tracing website. - - `Jaeger C++ client `_ - The Jaeger C++ cient. - - `Jaeger Go client `_ - The Jaeger Go client. - - `Jaeger sampling strategies `_ - More information about Jaeger sampling strategies. diff --git a/docs/root/start/sandboxes/jaeger_tracing.rst b/docs/root/start/sandboxes/jaeger_tracing.rst index f9ac3bc2a6b5..83c5bbf3a621 100644 --- a/docs/root/start/sandboxes/jaeger_tracing.rst +++ b/docs/root/start/sandboxes/jaeger_tracing.rst @@ -94,8 +94,5 @@ to service2, as well as the latency incurred at each hop. :ref:`Request tracing ` Learn more about using Envoy's request tracing. - :ref:`Jaeger native tracing sandbox ` - An example of using Jaeger natively with Envoy. - `Jaeger `_ Jaeger tracing website. diff --git a/docs/v2_mapping.json b/docs/v2_mapping.json index 4e9b014276d0..d0d6e81b2759 100644 --- a/docs/v2_mapping.json +++ b/docs/v2_mapping.json @@ -118,7 +118,6 @@ "envoy/extensions/retry/host/omit_host_metadata/v3/omit_host_metadata_config.proto": "envoy/config/retry/omit_host_metadata/v2/omit_host_metadata_config.proto", "envoy/extensions/retry/host/previous_hosts/v3/previous_hosts.proto": "envoy/config/retry/previous_hosts/v2/previous_hosts.proto", "envoy/config/trace/v3/datadog.proto": "envoy/config/trace/v2/datadog.proto", - "envoy/config/trace/v3/dynamic_ot.proto": "envoy/config/trace/v2/dynamic_ot.proto", "envoy/config/trace/v3/http_tracer.proto": "envoy/config/trace/v2/http_tracer.proto", "envoy/config/trace/v3/lightstep.proto": "envoy/config/trace/v2/lightstep.proto", "envoy/config/trace/v3/opencensus.proto": "envoy/config/trace/v2/opencensus.proto", diff --git a/examples/jaeger-native-tracing/README.md b/examples/jaeger-native-tracing/README.md deleted file mode 100644 index e21ecf00ca08..000000000000 --- a/examples/jaeger-native-tracing/README.md +++ /dev/null @@ -1,2 +0,0 @@ -To learn about this sandbox and for instructions on how to run it please head over -to the [envoy docs](https://www.envoyproxy.io/docs/envoy/latest/start/sandboxes/jaeger_native_tracing) diff --git a/examples/jaeger-native-tracing/docker-compose.yaml b/examples/jaeger-native-tracing/docker-compose.yaml deleted file mode 100644 index b317573cff30..000000000000 --- a/examples/jaeger-native-tracing/docker-compose.yaml +++ /dev/null @@ -1,42 +0,0 @@ -services: - - # jaeger - front-envoy: - build: - dockerfile: ../shared/envoy/Dockerfile - target: envoy-jaeger-native - depends_on: - service1: - condition: service_healthy - service2: - condition: service_healthy - jaeger: - condition: service_healthy - ports: - - "${PORT_PROXY:-10000}:8000" - - service1: - build: - context: ../shared/python - target: aiohttp-jaeger-service - volumes: - - ./service1-envoy-jaeger.yaml:/etc/service-envoy.yaml - environment: - - SERVICE_NAME=1 - - service2: - build: - context: ../shared/python - target: aiohttp-jaeger-service - volumes: - - ./service2-envoy-jaeger.yaml:/etc/service-envoy.yaml - environment: - - SERVICE_NAME=2 - - jaeger: - build: - dockerfile: ../shared/jaeger/Dockerfile - environment: - - COLLECTOR_ZIPKIN_HOST_PORT=9411 - ports: - - "${PORT_UI:-10000}:16686" diff --git a/examples/jaeger-native-tracing/envoy.yaml b/examples/jaeger-native-tracing/envoy.yaml deleted file mode 100644 index 3ee3d6944ebe..000000000000 --- a/examples/jaeger-native-tracing/envoy.yaml +++ /dev/null @@ -1,69 +0,0 @@ -node: - cluster: front-proxy - -static_resources: - listeners: - - address: - socket_address: - address: 0.0.0.0 - port_value: 8000 - traffic_direction: OUTBOUND - filter_chains: - - filters: - - name: envoy.filters.network.http_connection_manager - typed_config: - "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager - generate_request_id: true - tracing: - provider: - name: envoy.tracers.dynamic_ot - typed_config: - "@type": type.googleapis.com/envoy.config.trace.v3.DynamicOtConfig - library: /usr/local/lib/libjaegertracing_plugin.so - config: - service_name: front-proxy - sampler: - type: const - param: 1 - reporter: - localAgentHostPort: jaeger:6831 - headers: - jaegerDebugHeader: jaeger-debug-id - jaegerBaggageHeader: jaeger-baggage - traceBaggageHeaderPrefix: uberctx- - baggage_restrictions: - denyBaggageOnInitializationFailure: false - hostPort: "" - codec_type: auto - stat_prefix: ingress_http - route_config: - name: local_route - virtual_hosts: - - name: backend - domains: - - "*" - routes: - - match: - prefix: "/" - route: - cluster: service1 - decorator: - operation: checkAvailability - http_filters: - - name: envoy.filters.http.router - typed_config: - "@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router - use_remote_address: true - clusters: - - name: service1 - type: strict_dns - lb_policy: round_robin - load_assignment: - cluster_name: service1 - endpoints: - - lb_endpoints: - - endpoint: - address: - socket_address: - address: service1 - port_value: 8000 diff --git a/examples/jaeger-native-tracing/install-jaeger-plugin.sh b/examples/jaeger-native-tracing/install-jaeger-plugin.sh deleted file mode 100755 index 74576be5247e..000000000000 --- a/examples/jaeger-native-tracing/install-jaeger-plugin.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env bash -JAEGER_VERSION=v0.4.2 -curl -Lo /usr/local/lib/libjaegertracing_plugin.so https://github.com/jaegertracing/jaeger-client-cpp/releases/download/$JAEGER_VERSION/libjaegertracing_plugin.linux_amd64.so diff --git a/examples/jaeger-native-tracing/service1-envoy-jaeger.yaml b/examples/jaeger-native-tracing/service1-envoy-jaeger.yaml deleted file mode 100644 index 2c619d649849..000000000000 --- a/examples/jaeger-native-tracing/service1-envoy-jaeger.yaml +++ /dev/null @@ -1,105 +0,0 @@ -static_resources: - listeners: - - address: - socket_address: - address: 0.0.0.0 - port_value: 8000 - traffic_direction: INBOUND - filter_chains: - - filters: - - name: envoy.filters.network.http_connection_manager - typed_config: - "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager - codec_type: auto - stat_prefix: ingress_http - route_config: - name: service1_route - virtual_hosts: - - name: service1 - domains: - - "*" - routes: - - match: - prefix: "/" - route: - cluster: local_service - decorator: - operation: checkAvailability - http_filters: - - name: envoy.filters.http.router - typed_config: - "@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router - - address: - socket_address: - address: 0.0.0.0 - port_value: 9000 - traffic_direction: OUTBOUND - filter_chains: - - filters: - - name: envoy.filters.network.http_connection_manager - typed_config: - "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager - tracing: - provider: - name: envoy.tracers.dynamic_ot - typed_config: - "@type": type.googleapis.com/envoy.config.trace.v3.DynamicOtConfig - library: /usr/local/lib/libjaegertracing_plugin.so - config: - service_name: service1 - sampler: - type: const - param: 1 - reporter: - localAgentHostPort: jaeger:6831 - headers: - jaegerDebugHeader: jaeger-debug-id - jaegerBaggageHeader: jaeger-baggage - traceBaggageHeaderPrefix: uberctx- - baggage_restrictions: - denyBaggageOnInitializationFailure: false - hostPort: "" - codec_type: auto - stat_prefix: egress_http - route_config: - name: service2_route - virtual_hosts: - - name: service2 - domains: - - "*" - routes: - - match: - prefix: "/trace/2" - route: - cluster: service2 - decorator: - operation: checkStock - http_filters: - - name: envoy.filters.http.router - typed_config: - "@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router - clusters: - - name: local_service - type: strict_dns - lb_policy: round_robin - load_assignment: - cluster_name: local_service - endpoints: - - lb_endpoints: - - endpoint: - address: - socket_address: - address: 127.0.0.1 - port_value: 8080 - - name: service2 - type: strict_dns - lb_policy: round_robin - load_assignment: - cluster_name: service2 - endpoints: - - lb_endpoints: - - endpoint: - address: - socket_address: - address: service2 - port_value: 8000 diff --git a/examples/jaeger-native-tracing/service2-envoy-jaeger.yaml b/examples/jaeger-native-tracing/service2-envoy-jaeger.yaml deleted file mode 100644 index d0640d85e558..000000000000 --- a/examples/jaeger-native-tracing/service2-envoy-jaeger.yaml +++ /dev/null @@ -1,64 +0,0 @@ -static_resources: - listeners: - - address: - socket_address: - address: 0.0.0.0 - port_value: 8000 - traffic_direction: INBOUND - filter_chains: - - filters: - - name: envoy.filters.network.http_connection_manager - typed_config: - "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager - tracing: - provider: - name: envoy.tracers.dynamic_ot - typed_config: - "@type": type.googleapis.com/envoy.config.trace.v3.DynamicOtConfig - library: /usr/local/lib/libjaegertracing_plugin.so - config: - service_name: service2 - sampler: - type: const - param: 1 - reporter: - localAgentHostPort: jaeger:6831 - headers: - jaegerDebugHeader: jaeger-debug-id - jaegerBaggageHeader: jaeger-baggage - traceBaggageHeaderPrefix: uberctx- - baggage_restrictions: - denyBaggageOnInitializationFailure: false - hostPort: "" - codec_type: auto - stat_prefix: ingress_http - route_config: - name: local_route - virtual_hosts: - - name: service2 - domains: - - "*" - routes: - - match: - prefix: "/" - route: - cluster: local_service - decorator: - operation: checkStock - http_filters: - - name: envoy.filters.http.router - typed_config: - "@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router - clusters: - - name: local_service - type: strict_dns - lb_policy: round_robin - load_assignment: - cluster_name: local_service - endpoints: - - lb_endpoints: - - endpoint: - address: - socket_address: - address: 127.0.0.1 - port_value: 8080 diff --git a/examples/jaeger-native-tracing/verify.sh b/examples/jaeger-native-tracing/verify.sh deleted file mode 100755 index 85f4e59e6946..000000000000 --- a/examples/jaeger-native-tracing/verify.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -e - -export NAME=jaeger-native -export PORT_PROXY="${JAEGER_NATIVE_PORT_PROXY:-11000}" -export PORT_UI="${JAEGER_NATIVE_PORT_UI:-11001}" - -# shellcheck source=examples/verify-common.sh -. "$(dirname "${BASH_SOURCE[0]}")/../verify-common.sh" - - -run_log "Test services" -responds_with \ - Hello \ - "http://localhost:${PORT_PROXY}/trace/1" - -run_log "Test Jaeger UI" -responds_with \ - "" \ - "http://localhost:${PORT_UI}" diff --git a/source/extensions/extensions_build_config.bzl b/source/extensions/extensions_build_config.bzl index 6655438230f0..4adc77b70549 100644 --- a/source/extensions/extensions_build_config.bzl +++ b/source/extensions/extensions_build_config.bzl @@ -232,7 +232,6 @@ EXTENSIONS = { # Tracers # - "envoy.tracers.dynamic_ot": "//source/extensions/tracers/dynamic_ot:config", "envoy.tracers.datadog": "//source/extensions/tracers/datadog:config", "envoy.tracers.zipkin": "//source/extensions/tracers/zipkin:config", "envoy.tracers.opencensus": "//source/extensions/tracers/opencensus:config", diff --git a/source/extensions/extensions_metadata.yaml b/source/extensions/extensions_metadata.yaml index 3da991ca9960..d79e40b6fe7f 100644 --- a/source/extensions/extensions_metadata.yaml +++ b/source/extensions/extensions_metadata.yaml @@ -1066,13 +1066,6 @@ envoy.tracers.datadog: status: stable type_urls: - envoy.config.trace.v3.DatadogConfig -envoy.tracers.dynamic_ot: - categories: - - envoy.tracers - security_posture: robust_to_untrusted_downstream - status: stable - type_urls: - - envoy.config.trace.v3.DynamicOtConfig envoy.tracers.opencensus: categories: - envoy.tracers diff --git a/source/extensions/tracers/common/ot/BUILD b/source/extensions/tracers/common/ot/BUILD deleted file mode 100644 index c07fd828a0d7..000000000000 --- a/source/extensions/tracers/common/ot/BUILD +++ /dev/null @@ -1,32 +0,0 @@ -load( - "//bazel:envoy_build_system.bzl", - "envoy_cc_library", - "envoy_extension_package", -) - -licenses(["notice"]) # Apache 2 - -envoy_extension_package() - -envoy_cc_library( - name = "opentracing_driver_lib", - srcs = [ - "opentracing_driver_impl.cc", - ], - hdrs = [ - "opentracing_driver_impl.h", - ], - external_deps = ["opentracing"], - deps = [ - "//envoy/runtime:runtime_interface", - "//envoy/thread_local:thread_local_interface", - "//envoy/tracing:trace_driver_interface", - "//envoy/upstream:cluster_manager_interface", - "//source/common/common:base64_lib", - "//source/common/common:empty_string", - "//source/common/http:header_map_lib", - "//source/common/json:json_loader_lib", - "//source/common/tracing:common_values_lib", - "//source/common/tracing:null_span_lib", - ], -) diff --git a/source/extensions/tracers/common/ot/opentracing_driver_impl.cc b/source/extensions/tracers/common/ot/opentracing_driver_impl.cc deleted file mode 100644 index 387be89f9d2b..000000000000 --- a/source/extensions/tracers/common/ot/opentracing_driver_impl.cc +++ /dev/null @@ -1,216 +0,0 @@ -#include "source/extensions/tracers/common/ot/opentracing_driver_impl.h" - -#include - -#include "envoy/stats/scope.h" - -#include "source/common/common/assert.h" -#include "source/common/common/base64.h" -#include "source/common/common/utility.h" -#include "source/common/http/header_map_impl.h" -#include "source/common/tracing/common_values.h" -#include "source/common/tracing/null_span_impl.h" - -namespace Envoy { -namespace Extensions { -namespace Tracers { -namespace Common { -namespace Ot { - -Http::RegisterCustomInlineHeader - ot_span_context_handle(Http::CustomHeaders::get().OtSpanContext); - -namespace { - -/** - * TODO(wbpcode): Use opentracing::TextMapWriter to replace opentracing::HTTPHeadersWriter. - */ -class OpenTracingHeadersWriter : public opentracing::HTTPHeadersWriter { -public: - explicit OpenTracingHeadersWriter(Tracing::TraceContext& trace_context) - : trace_context_(trace_context) {} - - // opentracing::HTTPHeadersWriter - opentracing::expected Set(opentracing::string_view key, - opentracing::string_view value) const override { - Http::LowerCaseString lowercase_key{{key.data(), key.size()}}; - trace_context_.setByKey(lowercase_key, {value.data(), value.size()}); - return {}; - } - -private: - Tracing::TraceContext& trace_context_; -}; - -/** - * TODO(wbpcode): Use opentracing::TextMapReader to replace opentracing::HTTPHeadersReader. - */ -class OpenTracingHeadersReader : public opentracing::HTTPHeadersReader { -public: - explicit OpenTracingHeadersReader(const Tracing::TraceContext& trace_context) - : trace_context_(trace_context) {} - - using OpenTracingCb = std::function(opentracing::string_view, - opentracing::string_view)>; - - // opentracing::HTTPHeadersReader - opentracing::expected - LookupKey(opentracing::string_view key) const override { - Http::LowerCaseString lowercase_key{{key.data(), key.size()}}; - const auto entry = trace_context_.getByKey(lowercase_key); - if (entry.has_value()) { - return opentracing::string_view{entry.value().data(), entry.value().length()}; - } else { - return opentracing::make_unexpected(opentracing::key_not_found_error); - } - } - - opentracing::expected ForeachKey(OpenTracingCb f) const override { - trace_context_.forEach([cb = std::move(f)](absl::string_view key, absl::string_view val) { - opentracing::string_view opentracing_key{key.data(), key.length()}; - opentracing::string_view opentracing_val{val.data(), val.length()}; - return static_cast(cb(opentracing_key, opentracing_val)); - }); - return {}; - } - -private: - const Tracing::TraceContext& trace_context_; -}; -} // namespace - -OpenTracingSpan::OpenTracingSpan(OpenTracingDriver& driver, - std::unique_ptr&& span) - : driver_{driver}, span_(std::move(span)) {} - -void OpenTracingSpan::finishSpan() { span_->FinishWithOptions(finish_options_); } - -void OpenTracingSpan::setOperation(absl::string_view operation) { - span_->SetOperationName({operation.data(), operation.length()}); -} - -void OpenTracingSpan::setTag(absl::string_view name, absl::string_view value) { - span_->SetTag({name.data(), name.length()}, - opentracing::v2::string_view{value.data(), value.length()}); -} - -void OpenTracingSpan::log(SystemTime timestamp, const std::string& event) { - opentracing::LogRecord record{timestamp, {{Tracing::Logs::get().EventKey, event}}}; - finish_options_.log_records.emplace_back(std::move(record)); -} - -void OpenTracingSpan::setBaggage(absl::string_view key, absl::string_view value) { - span_->SetBaggageItem({key.data(), key.length()}, {value.data(), value.length()}); -} - -std::string OpenTracingSpan::getBaggage(absl::string_view key) { - return span_->BaggageItem({key.data(), key.length()}); -} - -void OpenTracingSpan::injectContext(Tracing::TraceContext& trace_context, - const Upstream::HostDescriptionConstSharedPtr&) { - if (driver_.propagationMode() == OpenTracingDriver::PropagationMode::SingleHeader) { - // Inject the span context using Envoy's single-header format. - std::ostringstream oss; - const opentracing::expected was_successful = - span_->tracer().Inject(span_->context(), oss); - if (!was_successful) { - ENVOY_LOG(debug, "Failed to inject span context: {}", was_successful.error().message()); - driver_.tracerStats().span_context_injection_error_.inc(); - return; - } - const std::string current_span_context = oss.str(); - trace_context.setByReferenceKey( - Http::CustomHeaders::get().OtSpanContext, - Base64::encode(current_span_context.c_str(), current_span_context.length())); - } else { - // Inject the context using the tracer's standard header format. - const OpenTracingHeadersWriter writer{trace_context}; - const opentracing::expected was_successful = - span_->tracer().Inject(span_->context(), writer); - if (!was_successful) { - ENVOY_LOG(debug, "Failed to inject span context: {}", was_successful.error().message()); - driver_.tracerStats().span_context_injection_error_.inc(); - return; - } - } -} - -void OpenTracingSpan::setSampled(bool sampled) { - span_->SetTag(opentracing::ext::sampling_priority, sampled ? 1 : 0); -} - -Tracing::SpanPtr OpenTracingSpan::spawnChild(const Tracing::Config&, const std::string& name, - SystemTime start_time) { - std::unique_ptr ot_span = span_->tracer().StartSpan( - name, {opentracing::ChildOf(&span_->context()), opentracing::StartTimestamp(start_time)}); - RELEASE_ASSERT(ot_span != nullptr, ""); - return Tracing::SpanPtr{new OpenTracingSpan{driver_, std::move(ot_span)}}; -} - -OpenTracingDriver::OpenTracingDriver(Stats::Scope& scope) - : tracer_stats_{OPENTRACING_TRACER_STATS(POOL_COUNTER_PREFIX(scope, "tracing.opentracing."))} {} - -Tracing::SpanPtr OpenTracingDriver::startSpan(const Tracing::Config& config, - Tracing::TraceContext& trace_context, - const StreamInfo::StreamInfo& stream_info, - const std::string& operation_name, - const Tracing::Decision tracing_decision) { - const PropagationMode propagation_mode = this->propagationMode(); - const opentracing::Tracer& tracer = this->tracer(); - std::unique_ptr active_span; - std::unique_ptr parent_span_ctx; - - const auto entry = trace_context.getByKey(Http::CustomHeaders::get().OtSpanContext); - if (propagation_mode == PropagationMode::SingleHeader && entry.has_value()) { - opentracing::expected> parent_span_ctx_maybe; - std::string parent_context = Base64::decode(std::string(entry.value())); - - if (!parent_context.empty()) { - InputConstMemoryStream istream{parent_context.data(), parent_context.size()}; - parent_span_ctx_maybe = tracer.Extract(istream); - } else { - parent_span_ctx_maybe = - opentracing::make_unexpected(opentracing::span_context_corrupted_error); - } - - if (parent_span_ctx_maybe) { - parent_span_ctx = std::move(*parent_span_ctx_maybe); - } else { - ENVOY_LOG(debug, "Failed to extract span context: {}", - parent_span_ctx_maybe.error().message()); - tracerStats().span_context_extraction_error_.inc(); - } - } else if (propagation_mode == PropagationMode::TracerNative) { - const OpenTracingHeadersReader reader{trace_context}; - opentracing::expected> parent_span_ctx_maybe = - tracer.Extract(reader); - if (parent_span_ctx_maybe) { - parent_span_ctx = std::move(*parent_span_ctx_maybe); - } else { - ENVOY_LOG(debug, "Failed to extract span context: {}", - parent_span_ctx_maybe.error().message()); - tracerStats().span_context_extraction_error_.inc(); - } - } - opentracing::StartSpanOptions options; - options.references.emplace_back(opentracing::SpanReferenceType::ChildOfRef, - parent_span_ctx.get()); - options.start_system_timestamp = stream_info.startTime(); - if (!tracing_decision.traced) { - options.tags.emplace_back(opentracing::ext::sampling_priority, 0); - } - active_span = tracer.StartSpanWithOptions(operation_name, options); - RELEASE_ASSERT(active_span != nullptr, ""); - active_span->SetTag(opentracing::ext::span_kind, - config.operationName() == Tracing::OperationName::Egress - ? opentracing::ext::span_kind_rpc_client - : opentracing::ext::span_kind_rpc_server); - return Tracing::SpanPtr{new OpenTracingSpan{*this, std::move(active_span)}}; -} - -} // namespace Ot -} // namespace Common -} // namespace Tracers -} // namespace Extensions -} // namespace Envoy diff --git a/source/extensions/tracers/common/ot/opentracing_driver_impl.h b/source/extensions/tracers/common/ot/opentracing_driver_impl.h deleted file mode 100644 index 94c58b44cf4f..000000000000 --- a/source/extensions/tracers/common/ot/opentracing_driver_impl.h +++ /dev/null @@ -1,93 +0,0 @@ -#pragma once - -#include - -#include "envoy/stats/scope.h" -#include "envoy/tracing/trace_driver.h" - -#include "source/common/common/empty_string.h" -#include "source/common/common/logger.h" -#include "source/common/singleton/const_singleton.h" - -#include "opentracing/ext/tags.h" -#include "opentracing/tracer.h" - -namespace Envoy { -namespace Extensions { -namespace Tracers { -namespace Common { -namespace Ot { - -#define OPENTRACING_TRACER_STATS(COUNTER) \ - COUNTER(span_context_extraction_error) \ - COUNTER(span_context_injection_error) - -struct OpenTracingTracerStats { - OPENTRACING_TRACER_STATS(GENERATE_COUNTER_STRUCT) -}; - -class OpenTracingDriver; - -class OpenTracingSpan : public Tracing::Span, Logger::Loggable { -public: - OpenTracingSpan(OpenTracingDriver& driver, std::unique_ptr&& span); - - // Tracing::Span - void finishSpan() override; - void setOperation(absl::string_view operation) override; - void setTag(absl::string_view name, const absl::string_view) override; - void log(SystemTime timestamp, const std::string& event) override; - void injectContext(Tracing::TraceContext& trace_context, - const Upstream::HostDescriptionConstSharedPtr&) override; - Tracing::SpanPtr spawnChild(const Tracing::Config& config, const std::string& name, - SystemTime start_time) override; - void setSampled(bool) override; - std::string getBaggage(absl::string_view key) override; - void setBaggage(absl::string_view key, absl::string_view value) override; - - // TODO: This method is unimplemented for OpenTracing. - std::string getTraceIdAsHex() const override { return EMPTY_STRING; }; - -private: - OpenTracingDriver& driver_; - opentracing::FinishSpanOptions finish_options_; - std::unique_ptr span_; -}; - -/** - * This driver can be used by tracing libraries implementing the OpenTracing API (see - * https://github.com/opentracing/opentracing-cpp) to hook into Envoy's tracing functionality with a - * minimal amount of effort. Libraries need only provide an opentracing::Tracer implementation; the - * rest of span creation is taken care of by this class. - */ -class OpenTracingDriver : public Tracing::Driver, protected Logger::Loggable { -public: - explicit OpenTracingDriver(Stats::Scope& scope); - - // Tracing::Driver - Tracing::SpanPtr startSpan(const Tracing::Config& config, Tracing::TraceContext& trace_context, - const StreamInfo::StreamInfo& stream_info, - const std::string& operation_name, - const Tracing::Decision tracing_decision) override; - - virtual opentracing::Tracer& tracer() PURE; - - enum class PropagationMode { SingleHeader, TracerNative }; - - /** - * Controls how span context is propagated in HTTP headers. PropagationMode::SingleHeader will - * propagate span context as a single header within the inline header HeaderMap::OtSpanContext; - * otherwise, span context will be propagated using the native format of the tracing library. - */ - virtual PropagationMode propagationMode() const { return PropagationMode::SingleHeader; } - - OpenTracingTracerStats& tracerStats() { return tracer_stats_; } - -private: - OpenTracingTracerStats tracer_stats_; -}; -} // namespace Ot -} // namespace Common -} // namespace Tracers -} // namespace Extensions -} // namespace Envoy diff --git a/source/extensions/tracers/dynamic_ot/BUILD b/source/extensions/tracers/dynamic_ot/BUILD deleted file mode 100644 index 8a3bb1937ed3..000000000000 --- a/source/extensions/tracers/dynamic_ot/BUILD +++ /dev/null @@ -1,37 +0,0 @@ -load( - "//bazel:envoy_build_system.bzl", - "envoy_cc_extension", - "envoy_cc_library", - "envoy_extension_package", -) - -licenses(["notice"]) # Apache 2 - -# Trace driver for dynamically loadable C++ OpenTracing drivers (http://opentracing.io/). - -envoy_extension_package() - -envoy_cc_library( - name = "dynamic_opentracing_driver_lib", - srcs = [ - "dynamic_opentracing_driver_impl.cc", - ], - hdrs = [ - "dynamic_opentracing_driver_impl.h", - ], - deps = [ - "//source/common/tracing:http_tracer_lib", - "//source/extensions/tracers/common/ot:opentracing_driver_lib", - ], -) - -envoy_cc_extension( - name = "config", - srcs = ["config.cc"], - hdrs = ["config.h"], - deps = [ - ":dynamic_opentracing_driver_lib", - "//source/extensions/tracers/common:factory_base_lib", - "@envoy_api//envoy/config/trace/v3:pkg_cc_proto", - ], -) diff --git a/source/extensions/tracers/dynamic_ot/config.cc b/source/extensions/tracers/dynamic_ot/config.cc deleted file mode 100644 index 9baa08e4d6a8..000000000000 --- a/source/extensions/tracers/dynamic_ot/config.cc +++ /dev/null @@ -1,40 +0,0 @@ -#include "source/extensions/tracers/dynamic_ot/config.h" - -#include "envoy/config/trace/v3/dynamic_ot.pb.h" -#include "envoy/config/trace/v3/dynamic_ot.pb.validate.h" -#include "envoy/registry/registry.h" - -#include "source/common/common/utility.h" -#include "source/extensions/tracers/dynamic_ot/dynamic_opentracing_driver_impl.h" - -namespace Envoy { -namespace Extensions { -namespace Tracers { -namespace DynamicOt { - -DynamicOpenTracingTracerFactory::DynamicOpenTracingTracerFactory() - : FactoryBase("envoy.tracers.dynamic_ot") {} - -Tracing::DriverSharedPtr DynamicOpenTracingTracerFactory::createTracerDriverTyped( - const envoy::config::trace::v3::DynamicOtConfig& proto_config, - Server::Configuration::TracerFactoryContext& context) { - const std::string& library = proto_config.library(); - const ProtobufWkt::Struct& config_struct = proto_config.config(); - ProtobufUtil::StatusOr json_or_error = - MessageUtil::getJsonStringFromMessage(config_struct); - ENVOY_BUG(json_or_error.ok(), "Failed to parse json"); - const std::string config = json_or_error.ok() ? json_or_error.value() : ""; - return std::make_shared(context.serverFactoryContext().scope(), library, - config); -} - -/** - * Static registration for the dynamic opentracing tracer. @see RegisterFactory. - */ -LEGACY_REGISTER_FACTORY(DynamicOpenTracingTracerFactory, Server::Configuration::TracerFactory, - "envoy.dynamic.ot"); - -} // namespace DynamicOt -} // namespace Tracers -} // namespace Extensions -} // namespace Envoy diff --git a/source/extensions/tracers/dynamic_ot/config.h b/source/extensions/tracers/dynamic_ot/config.h deleted file mode 100644 index 61be3be55c27..000000000000 --- a/source/extensions/tracers/dynamic_ot/config.h +++ /dev/null @@ -1,31 +0,0 @@ -#pragma once - -#include "envoy/config/trace/v3/dynamic_ot.pb.h" -#include "envoy/config/trace/v3/dynamic_ot.pb.validate.h" - -#include "source/extensions/tracers/common/factory_base.h" - -namespace Envoy { -namespace Extensions { -namespace Tracers { -namespace DynamicOt { - -/** - * Config registration for the dynamic opentracing tracer. @see TracerFactory. - */ -class DynamicOpenTracingTracerFactory - : public Common::FactoryBase { -public: - DynamicOpenTracingTracerFactory(); - -private: - // FactoryBase - Tracing::DriverSharedPtr - createTracerDriverTyped(const envoy::config::trace::v3::DynamicOtConfig& configuration, - Server::Configuration::TracerFactoryContext& context) override; -}; - -} // namespace DynamicOt -} // namespace Tracers -} // namespace Extensions -} // namespace Envoy diff --git a/source/extensions/tracers/dynamic_ot/dynamic_opentracing_driver_impl.cc b/source/extensions/tracers/dynamic_ot/dynamic_opentracing_driver_impl.cc deleted file mode 100644 index 583fbfd6bb6f..000000000000 --- a/source/extensions/tracers/dynamic_ot/dynamic_opentracing_driver_impl.cc +++ /dev/null @@ -1,42 +0,0 @@ -#include "source/extensions/tracers/dynamic_ot/dynamic_opentracing_driver_impl.h" - -#include "source/common/common/assert.h" - -namespace Envoy { -namespace Extensions { -namespace Tracers { -namespace DynamicOt { - -DynamicOpenTracingDriver::DynamicOpenTracingDriver(Stats::Scope& scope, const std::string& library, - const std::string& tracer_config) - : OpenTracingDriver{scope} { - std::string error_message; - opentracing::expected library_handle_maybe = - opentracing::DynamicallyLoadTracingLibrary(library.c_str(), error_message); - if (!library_handle_maybe) { - throw EnvoyException{formatErrorMessage(library_handle_maybe.error(), error_message)}; - } - library_handle_ = std::move(*library_handle_maybe); - - opentracing::expected> tracer_maybe = - library_handle_.tracer_factory().MakeTracer(tracer_config.c_str(), error_message); - if (!tracer_maybe) { - throw EnvoyException{formatErrorMessage(tracer_maybe.error(), error_message)}; - } - tracer_ = std::move(*tracer_maybe); - RELEASE_ASSERT(tracer_ != nullptr, ""); -} - -std::string DynamicOpenTracingDriver::formatErrorMessage(std::error_code error_code, - const std::string& error_message) { - if (error_message.empty()) { - return absl::StrCat("", error_code.message()); - } else { - return fmt::format("{}: {}", error_code.message(), error_message); - } -} - -} // namespace DynamicOt -} // namespace Tracers -} // namespace Extensions -} // namespace Envoy diff --git a/source/extensions/tracers/dynamic_ot/dynamic_opentracing_driver_impl.h b/source/extensions/tracers/dynamic_ot/dynamic_opentracing_driver_impl.h deleted file mode 100644 index 712283919b36..000000000000 --- a/source/extensions/tracers/dynamic_ot/dynamic_opentracing_driver_impl.h +++ /dev/null @@ -1,44 +0,0 @@ -#pragma once - -#include "envoy/runtime/runtime.h" -#include "envoy/thread_local/thread_local.h" -#include "envoy/upstream/cluster_manager.h" - -#include "source/extensions/tracers/common/ot/opentracing_driver_impl.h" - -#include "opentracing/dynamic_load.h" - -namespace Envoy { -namespace Extensions { -namespace Tracers { -namespace DynamicOt { - -/** - * This driver provides support for dynamically loading tracing libraries into Envoy that provide an - * implementation of the OpenTracing API (see https://github.com/opentracing/opentracing-cpp). - * TODO(rnburn): Add an example showing how to use a tracer library with this driver. - */ -class DynamicOpenTracingDriver : public Common::Ot::OpenTracingDriver { -public: - DynamicOpenTracingDriver(Stats::Scope& scope, const std::string& library, - const std::string& tracer_config); - - static std::string formatErrorMessage(std::error_code error_code, - const std::string& error_message); - - // Tracer::OpenTracingDriver - opentracing::Tracer& tracer() override { return *tracer_; } - - PropagationMode propagationMode() const override { - return OpenTracingDriver::PropagationMode::TracerNative; - } - -private: - opentracing::DynamicTracingLibraryHandle library_handle_; - std::shared_ptr tracer_; -}; - -} // namespace DynamicOt -} // namespace Tracers -} // namespace Extensions -} // namespace Envoy diff --git a/test/extensions/tracers/common/ot/BUILD b/test/extensions/tracers/common/ot/BUILD deleted file mode 100644 index e27a825efa2a..000000000000 --- a/test/extensions/tracers/common/ot/BUILD +++ /dev/null @@ -1,30 +0,0 @@ -load( - "//bazel:envoy_build_system.bzl", - "envoy_package", -) -load( - "//test/extensions:extensions_build_system.bzl", - "envoy_extension_cc_test", -) - -licenses(["notice"]) # Apache 2 - -envoy_package() - -envoy_extension_cc_test( - name = "opentracing_driver_impl_test", - srcs = [ - "opentracing_driver_impl_test.cc", - ], - extension_names = ["envoy.tracers.dynamic_ot"], - # TODO(wrowe): envoy_extension_ rules don't currently exclude windows extensions - tags = ["skip_on_windows"], - deps = [ - "//source/extensions/tracers/dynamic_ot:dynamic_opentracing_driver_lib", - "//test/mocks/http:http_mocks", - "//test/mocks/stats:stats_mocks", - "//test/mocks/stream_info:stream_info_mocks", - "//test/mocks/tracing:tracing_mocks", - "@io_opentracing_cpp//mocktracer", - ], -) diff --git a/test/extensions/tracers/common/ot/opentracing_driver_impl_test.cc b/test/extensions/tracers/common/ot/opentracing_driver_impl_test.cc deleted file mode 100644 index 07bd22ec9955..000000000000 --- a/test/extensions/tracers/common/ot/opentracing_driver_impl_test.cc +++ /dev/null @@ -1,377 +0,0 @@ -#include -#include -#include - -#include "source/extensions/tracers/common/ot/opentracing_driver_impl.h" - -#include "test/mocks/http/mocks.h" -#include "test/mocks/stats/mocks.h" -#include "test/mocks/stream_info/mocks.h" -#include "test/mocks/tracing/mocks.h" - -#include "gmock/gmock.h" -#include "gtest/gtest.h" -#include "opentracing/mocktracer/in_memory_recorder.h" -#include "opentracing/mocktracer/tracer.h" - -namespace Envoy { -namespace Extensions { -namespace Tracers { -namespace Common { -namespace Ot { -namespace { - -class NullSpanContext : public opentracing::SpanContext { -public: - void ForeachBaggageItem( - std::function) const override { - // not implemented - } - - virtual std::unique_ptr clone() const noexcept { - return std::make_unique(*this); - } -}; - -class NullSpan : public opentracing::Span { -public: - explicit NullSpan(const opentracing::Tracer& tracer) : tracer_(tracer) {} - - void FinishWithOptions(const opentracing::FinishSpanOptions&) noexcept override { - // not implemented - } - - void SetOperationName(opentracing::string_view /*name*/) noexcept override { - // not implemented - } - - void SetTag(opentracing::string_view /*key*/, - const opentracing::Value& /*value*/) noexcept override { - // not implemented - } - - void SetBaggageItem(opentracing::string_view /*key*/, - opentracing::string_view /*value*/) noexcept override { - // not implemented - } - - std::string BaggageItem(opentracing::string_view /*key*/) const noexcept override { - return ""; // not implemented - } - - void Log(std::initializer_list< - std::pair> /*fields*/) noexcept override { - // not implemented - } - - const opentracing::SpanContext& context() const noexcept override { - static NullSpanContext context; - return context; - } - - const opentracing::Tracer& tracer() const noexcept override { return tracer_; } - - const opentracing::Tracer& tracer_; -}; - -class ContextIteratingTracer : public opentracing::Tracer { -public: - explicit ContextIteratingTracer( - std::vector>& extracted_headers_destination) - : extracted_headers_(&extracted_headers_destination) {} - - std::unique_ptr - StartSpanWithOptions(opentracing::string_view /*operation_name*/, - const opentracing::StartSpanOptions&) const noexcept override { - return std::make_unique(*this); - } - - opentracing::expected Inject(const opentracing::SpanContext&, - std::ostream& /*writer*/) const override { - return {}; // not implemented - } - - opentracing::expected Inject(const opentracing::SpanContext&, - const opentracing::TextMapWriter&) const override { - return {}; // not implemented - } - - opentracing::expected Inject(const opentracing::SpanContext&, - const opentracing::HTTPHeadersWriter&) const override { - return {}; // not implemented - } - - opentracing::expected - Inject(const opentracing::SpanContext& sc, - const opentracing::CustomCarrierWriter& writer) const override { - return opentracing::Tracer::Inject(sc, writer); - } - - opentracing::expected> - Extract(std::istream& /*reader*/) const override { - return std::unique_ptr(); // not implemented - } - - opentracing::expected> - Extract(const opentracing::TextMapReader&) const override { - return std::unique_ptr(); // not implemented - } - - opentracing::expected> - Extract(const opentracing::HTTPHeadersReader& reader) const override { - reader.ForeachKey([this](opentracing::string_view key, - opentracing::string_view value) -> opentracing::expected { - extracted_headers_->emplace_back(key, value); - return {}; - }); - - return std::unique_ptr(); - } - - opentracing::expected> - Extract(const opentracing::CustomCarrierReader& reader) const override { - return opentracing::Tracer::Extract(reader); - } - - std::vector>* extracted_headers_; -}; - -class TestDriver : public OpenTracingDriver { -public: - TestDriver(OpenTracingDriver::PropagationMode propagation_mode, - const opentracing::mocktracer::PropagationOptions& propagation_options, - Stats::Scope& scope) - : OpenTracingDriver{scope}, propagation_mode_{propagation_mode} { - opentracing::mocktracer::MockTracerOptions options; - auto recorder = new opentracing::mocktracer::InMemoryRecorder{}; - recorder_ = recorder; - options.recorder.reset(recorder); - options.propagation_options = propagation_options; - tracer_ = std::make_shared(std::move(options)); - } - - TestDriver(const std::shared_ptr& tracer, Stats::Scope& scope) - : OpenTracingDriver{scope}, - propagation_mode_{PropagationMode::TracerNative}, recorder_{nullptr}, tracer_{tracer} {} - - const opentracing::mocktracer::InMemoryRecorder& recorder() const { return *recorder_; } - - // OpenTracingDriver - opentracing::Tracer& tracer() override { return *tracer_; } - - PropagationMode propagationMode() const override { return propagation_mode_; } - -private: - const OpenTracingDriver::PropagationMode propagation_mode_; - const opentracing::mocktracer::InMemoryRecorder* recorder_; - std::shared_ptr tracer_; -}; - -class OpenTracingDriverTest : public testing::Test { -public: - void - setupValidDriver(OpenTracingDriver::PropagationMode propagation_mode = - OpenTracingDriver::PropagationMode::SingleHeader, - const opentracing::mocktracer::PropagationOptions& propagation_options = {}) { - driver_ = - std::make_unique(propagation_mode, propagation_options, *stats_.rootScope()); - } - - void setupValidDriver(std::vector>& headers_destination) { - auto tracer = std::make_shared(headers_destination); - driver_ = std::make_unique(tracer, *stats_.rootScope()); - } - - const std::string operation_name_{"test"}; - Http::TestRequestHeaderMapImpl request_headers_{ - {":path", "/"}, {":method", "GET"}, {"x-request-id", "foo"}}; - const Http::TestResponseHeaderMapImpl response_headers_{{":status", "500"}}; - NiceMock stream_info_; - - std::unique_ptr driver_; - Stats::TestUtil::TestStore stats_; - - NiceMock config_; -}; - -TEST_F(OpenTracingDriverTest, FlushSpanWithTag) { - setupValidDriver(); - - Tracing::SpanPtr first_span = driver_->startSpan( - config_, request_headers_, stream_info_, operation_name_, {Tracing::Reason::Sampling, true}); - first_span->setTag("abc", "123"); - first_span->finishSpan(); - - const std::map expected_tags = { - {"abc", std::string{"123"}}, - {opentracing::ext::span_kind, std::string{opentracing::ext::span_kind_rpc_server}}}; - - EXPECT_EQ(1, driver_->recorder().spans().size()); - EXPECT_EQ(expected_tags, driver_->recorder().top().tags); -} - -TEST_F(OpenTracingDriverTest, FlushSpanWithLog) { - setupValidDriver(); - - Tracing::SpanPtr first_span = driver_->startSpan( - config_, request_headers_, stream_info_, operation_name_, {Tracing::Reason::Sampling, true}); - const auto timestamp = - SystemTime{std::chrono::duration_cast(std::chrono::hours{123})}; - first_span->log(timestamp, "abc"); - first_span->finishSpan(); - - const std::vector expected_logs = { - {timestamp, {{"event", std::string{"abc"}}}}}; - - EXPECT_EQ(1, driver_->recorder().spans().size()); - EXPECT_EQ(expected_logs, driver_->recorder().top().logs); -} - -TEST_F(OpenTracingDriverTest, FlushSpanWithBaggage) { - setupValidDriver(); - - Tracing::SpanPtr first_span = driver_->startSpan( - config_, request_headers_, stream_info_, operation_name_, {Tracing::Reason::Sampling, true}); - first_span->setBaggage("abc", "123"); - first_span->finishSpan(); - - const std::map expected_baggage = {{"abc", "123"}}; - - EXPECT_EQ(1, driver_->recorder().spans().size()); - EXPECT_EQ(expected_baggage, driver_->recorder().top().span_context.baggage); -} - -TEST_F(OpenTracingDriverTest, TagSamplingFalseByDecision) { - setupValidDriver(OpenTracingDriver::PropagationMode::TracerNative, {}); - - Tracing::SpanPtr first_span = driver_->startSpan( - config_, request_headers_, stream_info_, operation_name_, {Tracing::Reason::Sampling, false}); - first_span->finishSpan(); - - const std::map expected_tags = { - {opentracing::ext::sampling_priority, 0}, - {opentracing::ext::span_kind, std::string{opentracing::ext::span_kind_rpc_server}}}; - - EXPECT_EQ(1, driver_->recorder().spans().size()); - EXPECT_EQ(expected_tags, driver_->recorder().top().tags); -} - -TEST_F(OpenTracingDriverTest, TagSamplingFalseByFlag) { - setupValidDriver(OpenTracingDriver::PropagationMode::TracerNative, {}); - - Tracing::SpanPtr first_span = driver_->startSpan( - config_, request_headers_, stream_info_, operation_name_, {Tracing::Reason::Sampling, true}); - first_span->setSampled(false); - first_span->finishSpan(); - - const std::map expected_tags = { - {opentracing::ext::sampling_priority, 0}, - {opentracing::ext::span_kind, std::string{opentracing::ext::span_kind_rpc_server}}}; - - EXPECT_EQ(1, driver_->recorder().spans().size()); - EXPECT_EQ(expected_tags, driver_->recorder().top().tags); -} - -TEST_F(OpenTracingDriverTest, TagSpanKindClient) { - setupValidDriver(OpenTracingDriver::PropagationMode::TracerNative, {}); - - ON_CALL(config_, operationName()).WillByDefault(testing::Return(Tracing::OperationName::Egress)); - - Tracing::SpanPtr first_span = driver_->startSpan( - config_, request_headers_, stream_info_, operation_name_, {Tracing::Reason::Sampling, true}); - first_span->finishSpan(); - - const std::map expected_tags = { - {opentracing::ext::span_kind, std::string{opentracing::ext::span_kind_rpc_client}}}; - - EXPECT_EQ(1, driver_->recorder().spans().size()); - EXPECT_EQ(expected_tags, driver_->recorder().top().tags); -} - -TEST_F(OpenTracingDriverTest, TagSpanKindServer) { - setupValidDriver(OpenTracingDriver::PropagationMode::TracerNative, {}); - - ON_CALL(config_, operationName()).WillByDefault(testing::Return(Tracing::OperationName::Ingress)); - - Tracing::SpanPtr first_span = driver_->startSpan( - config_, request_headers_, stream_info_, operation_name_, {Tracing::Reason::Sampling, true}); - first_span->finishSpan(); - - const std::map expected_tags = { - {opentracing::ext::span_kind, std::string{opentracing::ext::span_kind_rpc_server}}}; - - EXPECT_EQ(1, driver_->recorder().spans().size()); - EXPECT_EQ(expected_tags, driver_->recorder().top().tags); -} - -TEST_F(OpenTracingDriverTest, InjectFailure) { - for (OpenTracingDriver::PropagationMode propagation_mode : - {OpenTracingDriver::PropagationMode::SingleHeader, - OpenTracingDriver::PropagationMode::TracerNative}) { - opentracing::mocktracer::PropagationOptions propagation_options; - propagation_options.inject_error_code = std::make_error_code(std::errc::bad_message); - setupValidDriver(propagation_mode, propagation_options); - - Tracing::SpanPtr span = driver_->startSpan(config_, request_headers_, stream_info_, - operation_name_, {Tracing::Reason::Sampling, true}); - - const auto span_context_injection_error_count = - stats_.counter("tracing.opentracing.span_context_injection_error").value(); - EXPECT_FALSE(request_headers_.has(Http::CustomHeaders::get().OtSpanContext)); - span->injectContext(request_headers_, nullptr); - - EXPECT_EQ(span_context_injection_error_count + 1, - stats_.counter("tracing.opentracing.span_context_injection_error").value()); - } -} - -TEST_F(OpenTracingDriverTest, ExtractWithUnindexedHeader) { - opentracing::mocktracer::PropagationOptions propagation_options; - propagation_options.propagation_key = "unindexed-header"; - setupValidDriver(OpenTracingDriver::PropagationMode::TracerNative, propagation_options); - - Tracing::SpanPtr first_span = driver_->startSpan( - config_, request_headers_, stream_info_, operation_name_, {Tracing::Reason::Sampling, true}); - first_span->injectContext(request_headers_, nullptr); - - Tracing::SpanPtr second_span = driver_->startSpan( - config_, request_headers_, stream_info_, operation_name_, {Tracing::Reason::Sampling, true}); - second_span->finishSpan(); - first_span->finishSpan(); - - auto spans = driver_->recorder().spans(); - EXPECT_EQ(spans.at(1).span_context.span_id, spans.at(0).references.at(0).span_id); -} - -TEST_F(OpenTracingDriverTest, GetTraceId) { - setupValidDriver(); - - Tracing::SpanPtr first_span = driver_->startSpan( - config_, request_headers_, stream_info_, operation_name_, {Tracing::Reason::Sampling, true}); - first_span->setTag("abc", "123"); - first_span->finishSpan(); - - // This method is unimplemented and a noop. - ASSERT_EQ(first_span->getTraceIdAsHex(), ""); -} - -TEST_F(OpenTracingDriverTest, ExtractUsingForeach) { - std::vector> extracted_headers; - setupValidDriver(extracted_headers); - - // Starting a new span, given the `request_headers_`, will visit the headers - // using "for each." We can immediately discard the span. - driver_->startSpan(config_, request_headers_, stream_info_, operation_name_, - {Tracing::Reason::Sampling, true}); - - for (const auto& [key, value] : extracted_headers) { - EXPECT_EQ(value, request_headers_.getByKey(key)); - } -} - -} // namespace -} // namespace Ot -} // namespace Common -} // namespace Tracers -} // namespace Extensions -} // namespace Envoy diff --git a/test/extensions/tracers/dynamic_ot/BUILD b/test/extensions/tracers/dynamic_ot/BUILD deleted file mode 100644 index b982d22efa6a..000000000000 --- a/test/extensions/tracers/dynamic_ot/BUILD +++ /dev/null @@ -1,52 +0,0 @@ -load( - "//bazel:envoy_build_system.bzl", - "envoy_package", -) -load( - "//test/extensions:extensions_build_system.bzl", - "envoy_extension_cc_test", -) - -licenses(["notice"]) # Apache 2 - -envoy_package() - -envoy_extension_cc_test( - name = "dynamic_opentracing_driver_impl_test", - srcs = [ - "dynamic_opentracing_driver_impl_test.cc", - ], - data = [ - "@io_opentracing_cpp//mocktracer:libmocktracer_plugin.so", - ], - extension_names = ["envoy.tracers.dynamic_ot"], - # TODO(wrowe): envoy_extension_ rules don't currently exclude windows extensions - tags = ["skip_on_windows"], - deps = [ - "//source/common/http:header_map_lib", - "//source/extensions/tracers/dynamic_ot:dynamic_opentracing_driver_lib", - "//test/mocks/http:http_mocks", - "//test/mocks/stats:stats_mocks", - "//test/mocks/stream_info:stream_info_mocks", - "//test/mocks/tracing:tracing_mocks", - "//test/test_common:environment_lib", - ], -) - -envoy_extension_cc_test( - name = "config_test", - srcs = ["config_test.cc"], - data = [ - "@io_opentracing_cpp//mocktracer:libmocktracer_plugin.so", - ], - extension_names = ["envoy.tracers.dynamic_ot"], - # TODO(wrowe): envoy_extension_ rules don't currently exclude windows extensions - tags = ["skip_on_windows"], - deps = [ - "//source/extensions/tracers/dynamic_ot:config", - "//test/mocks/server:server_mocks", - "//test/test_common:environment_lib", - "//test/test_common:utility_lib", - "@envoy_api//envoy/config/trace/v3:pkg_cc_proto", - ], -) diff --git a/test/extensions/tracers/dynamic_ot/config_test.cc b/test/extensions/tracers/dynamic_ot/config_test.cc deleted file mode 100644 index d8a1acb4a90c..000000000000 --- a/test/extensions/tracers/dynamic_ot/config_test.cc +++ /dev/null @@ -1,60 +0,0 @@ -#include "envoy/config/trace/v3/dynamic_ot.pb.h" -#include "envoy/config/trace/v3/dynamic_ot.pb.validate.h" -#include "envoy/config/trace/v3/http_tracer.pb.h" - -#include "source/extensions/tracers/dynamic_ot/config.h" - -#include "test/mocks/server/tracer_factory.h" -#include "test/mocks/server/tracer_factory_context.h" -#include "test/test_common/environment.h" - -#include "fmt/printf.h" -#include "gmock/gmock.h" -#include "gtest/gtest.h" - -using testing::Eq; -using testing::NiceMock; -using testing::Return; - -namespace Envoy { -namespace Extensions { -namespace Tracers { -namespace DynamicOt { -namespace { - -TEST(DynamicOtTracerConfigTest, DynamicOpentracingHttpTracer) { - NiceMock context; - EXPECT_CALL(context.server_factory_context_.cluster_manager_, - getThreadLocalCluster(Eq("fake_cluster"))) - .WillRepeatedly( - Return(&context.server_factory_context_.cluster_manager_.thread_local_cluster_)); - ON_CALL(*context.server_factory_context_.cluster_manager_.thread_local_cluster_.cluster_.info_, - features()) - .WillByDefault(Return(Upstream::ClusterInfo::Features::HTTP2)); - - const std::string yaml_string = fmt::sprintf( - R"EOF( - http: - name: envoy.tracers.dynamic_ot - typed_config: - "@type": type.googleapis.com/envoy.config.trace.v3.DynamicOtConfig - library: %s - config: - output_file: fake_file - )EOF", - TestEnvironment::runfilesPath("mocktracer/libmocktracer_plugin.so", "io_opentracing_cpp")); - envoy::config::trace::v3::Tracing configuration; - TestUtility::loadFromYaml(yaml_string, configuration); - - DynamicOpenTracingTracerFactory factory; - auto message = Config::Utility::translateToFactoryConfig( - configuration.http(), ProtobufMessage::getStrictValidationVisitor(), factory); - auto tracer = factory.createTracerDriver(*message, context); - EXPECT_NE(nullptr, tracer); -} - -} // namespace -} // namespace DynamicOt -} // namespace Tracers -} // namespace Extensions -} // namespace Envoy diff --git a/test/extensions/tracers/dynamic_ot/dynamic_opentracing_driver_impl_test.cc b/test/extensions/tracers/dynamic_ot/dynamic_opentracing_driver_impl_test.cc deleted file mode 100644 index dc16e9434c45..000000000000 --- a/test/extensions/tracers/dynamic_ot/dynamic_opentracing_driver_impl_test.cc +++ /dev/null @@ -1,102 +0,0 @@ -#include - -#include "source/common/http/header_map_impl.h" -#include "source/extensions/tracers/dynamic_ot/dynamic_opentracing_driver_impl.h" - -#include "test/mocks/http/mocks.h" -#include "test/mocks/stats/mocks.h" -#include "test/mocks/stream_info/mocks.h" -#include "test/mocks/tracing/mocks.h" -#include "test/test_common/environment.h" - -#include "fmt/printf.h" -#include "gmock/gmock.h" -#include "gtest/gtest.h" - -namespace Envoy { -namespace Extensions { -namespace Tracers { -namespace DynamicOt { -namespace { - -class DynamicOpenTracingDriverTest : public testing::Test { -public: - void setup(const std::string& library, const std::string& tracer_config) { - driver_ = - std::make_unique(*stats_.rootScope(), library, tracer_config); - } - - void setupValidDriver() { setup(library_path_, tracer_config_); } - - const std::string library_path_ = - TestEnvironment::runfilesPath("mocktracer/libmocktracer_plugin.so", "io_opentracing_cpp"); - const std::string spans_file_ = TestEnvironment::temporaryDirectory() + "/spans.json"; - const std::string tracer_config_ = fmt::sprintf(R"EOF( - { - "output_file": "%s" - } - )EOF", - spans_file_); - std::unique_ptr driver_; - Stats::IsolatedStoreImpl stats_; - - const std::string operation_name_{"test"}; - Http::TestRequestHeaderMapImpl request_headers_{ - {":path", "/"}, {":method", "GET"}, {"x-request-id", "foo"}}; - - NiceMock config_; - NiceMock stream_info_; -}; - -TEST_F(DynamicOpenTracingDriverTest, FormatErrorMessage) { - const std::error_code error_code = std::make_error_code(std::errc::permission_denied); - EXPECT_EQ(error_code.message(), DynamicOpenTracingDriver::formatErrorMessage(error_code, "")); - EXPECT_EQ(error_code.message() + ": abc", - DynamicOpenTracingDriver::formatErrorMessage(error_code, "abc")); -} - -TEST_F(DynamicOpenTracingDriverTest, InitializeDriver) { - { - std::string invalid_library = "abc123"; - std::string invalid_config = R"EOF( - {"fake" : "fake"} - )EOF"; - - EXPECT_THROW(setup(invalid_library, invalid_config), EnvoyException); - } - - { - std::string empty_config = "{}"; - - EXPECT_THROW(setup(library_path_, empty_config), EnvoyException); - } -} - -// This test fails under gcc, please see https://github.com/envoyproxy/envoy/issues/7647 -// for more details. -#ifndef GCC_COMPILER -TEST_F(DynamicOpenTracingDriverTest, FlushSpans) { - setupValidDriver(); - - { - Tracing::SpanPtr first_span = - driver_->startSpan(config_, request_headers_, stream_info_, operation_name_, - {Tracing::Reason::Sampling, true}); - first_span->finishSpan(); - driver_->tracer().Close(); - } - - driver_ = nullptr; - - const Json::ObjectSharedPtr spans_json = - TestEnvironment::jsonLoadFromString(TestEnvironment::readFileToStringForTest(spans_file_)); - EXPECT_NE(spans_json, nullptr); - EXPECT_EQ(spans_json->asObjectArray().size(), 1); -} -#endif - -} // namespace -} // namespace DynamicOt -} // namespace Tracers -} // namespace Extensions -} // namespace Envoy