From 6d21fc9007a302bcb21afac466468134371205e1 Mon Sep 17 00:00:00 2001 From: Bryan Clement Date: Thu, 2 Jan 2020 17:43:17 -0800 Subject: [PATCH 01/47] added starts of tracer registry --- .../opentelemetry/trace/tracer-registry.h | 25 +++++++++++++++ .../opentelemetry/trace/tracer-registry.cc | 25 +++++++++++++++ api/test/trace/BUILD | 10 ++++++ api/test/trace/tracer-registry_test.cc | 32 +++++++++++++++++++ 4 files changed, 92 insertions(+) create mode 100644 api/include/opentelemetry/trace/tracer-registry.h create mode 100644 api/src/opentelemetry/trace/tracer-registry.cc create mode 100644 api/test/trace/tracer-registry_test.cc diff --git a/api/include/opentelemetry/trace/tracer-registry.h b/api/include/opentelemetry/trace/tracer-registry.h new file mode 100644 index 0000000000..e94ea40631 --- /dev/null +++ b/api/include/opentelemetry/trace/tracer-registry.h @@ -0,0 +1,25 @@ +#ifndef INCLUDE_OPEN_TELEMETRY_TRACE_TRACER_REGISTRY_H_ +#define INCLUDE_OPEN_TELEMETRY_TRACE_TRACER_REGISTRY_H_ +#include +#include +#include + +#include "./tracer.h" + +namespace opentelemetry { +namespace trace { +class Tracer; +class TracerRegistry { + public: + static TracerRegistry* getInstance(); + Tracer* const get(const std::string&); + Tracer* const get(const std::string&, const std::string&); + + private: + TracerRegistry(); + static TracerRegistry* instance; + std::map> tracers; +}; +} // namespace trace +} // namespace opentelemetry +#endif // INCLUDE_OPEN_TELEMETRY_TRACE_TRACER_REGISTRY_H_ diff --git a/api/src/opentelemetry/trace/tracer-registry.cc b/api/src/opentelemetry/trace/tracer-registry.cc new file mode 100644 index 0000000000..6a7d02f4e0 --- /dev/null +++ b/api/src/opentelemetry/trace/tracer-registry.cc @@ -0,0 +1,25 @@ +#include "opentelemetry/trace/tracer-registry.h" + +namespace opentelemetry { +namespace trace { +TracerRegistry* TracerRegistry::instance = nullptr; +TracerRegistry::TracerRegistry() {} +TracerRegistry* TracerRegistry::getInstance() { + if (!TracerRegistry::instance) { + TracerRegistry::instance = new TracerRegistry(); + } + return TracerRegistry::instance; +} +Tracer* const TracerRegistry::get(const std::string& name) { + return get(name, ""); +} + +Tracer* const TracerRegistry::get(const std::string& name, const std::string& version) { + auto key = name + ":" + version; + if (!tracers[key]) { + tracers[key] = std::make_unique(); + } + return tracers[key].get(); +} +} // namespace trace +} // namespace opentelemetry diff --git a/api/test/trace/BUILD b/api/test/trace/BUILD index a8e8507e4e..14d704ee69 100644 --- a/api/test/trace/BUILD +++ b/api/test/trace/BUILD @@ -43,6 +43,16 @@ cc_test( name = "trace_id_test", srcs = [ "trace_id_test.cc", + deps = [ + "//api", + "@com_google_googletest//:gtest_main", + ], +) + +cc_test( + name = "tracer-registry", + srcs = [ + "tracer-registry_test.cc", ], deps = [ "//api", diff --git a/api/test/trace/tracer-registry_test.cc b/api/test/trace/tracer-registry_test.cc new file mode 100644 index 0000000000..805c9b0a0c --- /dev/null +++ b/api/test/trace/tracer-registry_test.cc @@ -0,0 +1,32 @@ +#include "opentelemetry/trace/tracer-registry.h" + +#include + +using opentelemetry::trace::TracerRegistry; + +TEST(TracerRegistry, Constructor){ + auto t = TracerRegistry::getInstance(); + ASSERT_NE(t, nullptr); +} + +TEST(TracerRegistry, get){ + auto tf = TracerRegistry::getInstance(); + auto t1 = tf->get("test"); + auto t2 = tf->get("test"); + auto t3 = tf->get("different"); + ASSERT_NE(t1, nullptr); + ASSERT_NE(t2, nullptr); + ASSERT_NE(t3, nullptr); + ASSERT_EQ(t1, t1); + ASSERT_NE(t2, t3); +} +// +//TEST(Tracer, SetCurrentSpan){ +// auto t = new Tracer(); +// auto s = t->start_span("test span"); +// auto child = t->start_span("child"); +// ASSERT_EQ(t->get_current_span(), child); +// ASSERT_EQ(child->get_parent_context(), s->get_context()); +// t->set_current_span(s); +// ASSERT_EQ(t->get_current_span(), s); +//} From c2c9296834698644ee7d7b1b2d74831362dcd116 Mon Sep 17 00:00:00 2001 From: Bryan Clement Date: Tue, 7 Jan 2020 10:18:57 -0800 Subject: [PATCH 02/47] updated styles, added tracer stub --- api/BUILD | 1 + .../opentelemetry/trace/tracer-registry.h | 9 ++++++--- api/src/opentelemetry/trace/tracer-registry.cc | 16 +++++++++++----- api/src/opentelemetry/trace/tracer.cc | 11 +++++++++++ ci/do_ci.sh | 4 ++-- 5 files changed, 31 insertions(+), 10 deletions(-) create mode 100644 api/src/opentelemetry/trace/tracer.cc diff --git a/api/BUILD b/api/BUILD index 957ac227bd..f0803ba528 100644 --- a/api/BUILD +++ b/api/BUILD @@ -17,5 +17,6 @@ package(default_visibility = ["//visibility:public"]) cc_library( name = "api", hdrs = glob(["include/**/*.h"]), + srcs = glob(["src/**/*.cc"]), strip_include_prefix = "include", ) diff --git a/api/include/opentelemetry/trace/tracer-registry.h b/api/include/opentelemetry/trace/tracer-registry.h index e94ea40631..82f69d1f3c 100644 --- a/api/include/opentelemetry/trace/tracer-registry.h +++ b/api/include/opentelemetry/trace/tracer-registry.h @@ -6,10 +6,13 @@ #include "./tracer.h" -namespace opentelemetry { -namespace trace { +namespace opentelemetry +{ +namespace trace +{ class Tracer; -class TracerRegistry { +class TracerRegistry +{ public: static TracerRegistry* getInstance(); Tracer* const get(const std::string&); diff --git a/api/src/opentelemetry/trace/tracer-registry.cc b/api/src/opentelemetry/trace/tracer-registry.cc index 6a7d02f4e0..caa5828c19 100644 --- a/api/src/opentelemetry/trace/tracer-registry.cc +++ b/api/src/opentelemetry/trace/tracer-registry.cc @@ -1,20 +1,26 @@ #include "opentelemetry/trace/tracer-registry.h" -namespace opentelemetry { -namespace trace { +namespace opentelemetry +{ +namespace trace +{ TracerRegistry* TracerRegistry::instance = nullptr; TracerRegistry::TracerRegistry() {} -TracerRegistry* TracerRegistry::getInstance() { + +TracerRegistry *TracerRegistry::getInstance() +{ if (!TracerRegistry::instance) { TracerRegistry::instance = new TracerRegistry(); } return TracerRegistry::instance; } -Tracer* const TracerRegistry::get(const std::string& name) { +Tracer* const TracerRegistry::get(const std::string& name) +{ return get(name, ""); } -Tracer* const TracerRegistry::get(const std::string& name, const std::string& version) { +Tracer* const TracerRegistry::get(const std::string& name, const std::string& version) +{ auto key = name + ":" + version; if (!tracers[key]) { tracers[key] = std::make_unique(); diff --git a/api/src/opentelemetry/trace/tracer.cc b/api/src/opentelemetry/trace/tracer.cc new file mode 100644 index 0000000000..a9be6cf581 --- /dev/null +++ b/api/src/opentelemetry/trace/tracer.cc @@ -0,0 +1,11 @@ +#include + +#include "opentelemetry/trace/tracer.h" + +namespace opentelemetry +{ +namespace trace +{ +Tracer::Tracer() {} +} // namespace trace +} // namespace opentelemetry diff --git a/ci/do_ci.sh b/ci/do_ci.sh index 9f06090415..be1fc22b2d 100755 --- a/ci/do_ci.sh +++ b/ci/do_ci.sh @@ -3,12 +3,12 @@ set -e [ -z "${SRC_DIR}" ] && export SRC_DIR="`pwd`" -[ -z "${BUILD_DIR}" ] && export BUILD_DIR=$HOME/build +[ -z "${BUILD_DIR}" ] && export BUILD_DIR=/build mkdir -p "${BUILD_DIR}" [ -z "${PLUGIN_DIR}" ] && export PLUGIN_DIR=$HOME/plugin mkdir -p "${PLUGIN_DIR}" -BAZEL_OPTIONS="" +BAZEL_OPTIONS="--cxxopt=-std=c++14" BAZEL_TEST_OPTIONS="$BAZEL_OPTIONS --test_output=errors" if [[ "$1" == "cmake.test" ]]; then From d75dceb1297234ed7890d5fe270b2ac9a0c9867f Mon Sep 17 00:00:00 2001 From: Bryan Clement Date: Tue, 7 Jan 2020 10:33:03 -0800 Subject: [PATCH 03/47] roll back inadvertent change --- ci/do_ci.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/do_ci.sh b/ci/do_ci.sh index be1fc22b2d..39692ff5bf 100755 --- a/ci/do_ci.sh +++ b/ci/do_ci.sh @@ -3,7 +3,7 @@ set -e [ -z "${SRC_DIR}" ] && export SRC_DIR="`pwd`" -[ -z "${BUILD_DIR}" ] && export BUILD_DIR=/build +[ -z "${BUILD_DIR}" ] && export BUILD_DIR=$HOME/build mkdir -p "${BUILD_DIR}" [ -z "${PLUGIN_DIR}" ] && export PLUGIN_DIR=$HOME/plugin mkdir -p "${PLUGIN_DIR}" From 7739551016f92ea08fce369edcff118dc5319076 Mon Sep 17 00:00:00 2001 From: Bryan Clement Date: Tue, 7 Jan 2020 10:33:50 -0800 Subject: [PATCH 04/47] axe vestigial commented test --- api/test/trace/tracer-registry_test.cc | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/api/test/trace/tracer-registry_test.cc b/api/test/trace/tracer-registry_test.cc index 805c9b0a0c..20f664dd70 100644 --- a/api/test/trace/tracer-registry_test.cc +++ b/api/test/trace/tracer-registry_test.cc @@ -20,13 +20,3 @@ TEST(TracerRegistry, get){ ASSERT_EQ(t1, t1); ASSERT_NE(t2, t3); } -// -//TEST(Tracer, SetCurrentSpan){ -// auto t = new Tracer(); -// auto s = t->start_span("test span"); -// auto child = t->start_span("child"); -// ASSERT_EQ(t->get_current_span(), child); -// ASSERT_EQ(child->get_parent_context(), s->get_context()); -// t->set_current_span(s); -// ASSERT_EQ(t->get_current_span(), s); -//} From 24500ec669c6a963095b5e71e9dbbef87987c9e9 Mon Sep 17 00:00:00 2001 From: Bryan Clement Date: Tue, 7 Jan 2020 10:47:10 -0800 Subject: [PATCH 05/47] use pragma once --- api/include/opentelemetry/trace/tracer-registry.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/api/include/opentelemetry/trace/tracer-registry.h b/api/include/opentelemetry/trace/tracer-registry.h index 82f69d1f3c..aaafc2c14b 100644 --- a/api/include/opentelemetry/trace/tracer-registry.h +++ b/api/include/opentelemetry/trace/tracer-registry.h @@ -1,5 +1,5 @@ -#ifndef INCLUDE_OPEN_TELEMETRY_TRACE_TRACER_REGISTRY_H_ -#define INCLUDE_OPEN_TELEMETRY_TRACE_TRACER_REGISTRY_H_ +#pragma once + #include #include #include @@ -25,4 +25,3 @@ class TracerRegistry }; } // namespace trace } // namespace opentelemetry -#endif // INCLUDE_OPEN_TELEMETRY_TRACE_TRACER_REGISTRY_H_ From f92892b9442a25d537326132f9970015f8087d45 Mon Sep 17 00:00:00 2001 From: Bryan Clement Date: Tue, 7 Jan 2020 11:01:26 -0800 Subject: [PATCH 06/47] axe use of make_unique to make things c++11 compliant --- api/src/opentelemetry/trace/tracer-registry.cc | 2 +- ci/do_ci.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/api/src/opentelemetry/trace/tracer-registry.cc b/api/src/opentelemetry/trace/tracer-registry.cc index caa5828c19..0b96f627cb 100644 --- a/api/src/opentelemetry/trace/tracer-registry.cc +++ b/api/src/opentelemetry/trace/tracer-registry.cc @@ -23,7 +23,7 @@ Tracer* const TracerRegistry::get(const std::string& name, const std::string& ve { auto key = name + ":" + version; if (!tracers[key]) { - tracers[key] = std::make_unique(); + tracers[key] = std::unique_ptr(new Tracer()); } return tracers[key].get(); } diff --git a/ci/do_ci.sh b/ci/do_ci.sh index 39692ff5bf..9f06090415 100755 --- a/ci/do_ci.sh +++ b/ci/do_ci.sh @@ -8,7 +8,7 @@ mkdir -p "${BUILD_DIR}" [ -z "${PLUGIN_DIR}" ] && export PLUGIN_DIR=$HOME/plugin mkdir -p "${PLUGIN_DIR}" -BAZEL_OPTIONS="--cxxopt=-std=c++14" +BAZEL_OPTIONS="" BAZEL_TEST_OPTIONS="$BAZEL_OPTIONS --test_output=errors" if [[ "$1" == "cmake.test" ]]; then From b23c0defb169c429780d7434589c4e09abd5feb2 Mon Sep 17 00:00:00 2001 From: Bryan Clement Date: Tue, 7 Jan 2020 11:06:02 -0800 Subject: [PATCH 07/47] more pragmatic --- api/src/opentelemetry/trace/tracer.cc | 2 -- 1 file changed, 2 deletions(-) diff --git a/api/src/opentelemetry/trace/tracer.cc b/api/src/opentelemetry/trace/tracer.cc index a9be6cf581..97978f7363 100644 --- a/api/src/opentelemetry/trace/tracer.cc +++ b/api/src/opentelemetry/trace/tracer.cc @@ -1,5 +1,3 @@ -#include - #include "opentelemetry/trace/tracer.h" namespace opentelemetry From b089b38ccecb7e6e663feb2d43fcc25404cbf5e7 Mon Sep 17 00:00:00 2001 From: Bryan Clement Date: Tue, 7 Jan 2020 11:16:46 -0800 Subject: [PATCH 08/47] open braces on new lines --- api/src/opentelemetry/trace/tracer-registry.cc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/api/src/opentelemetry/trace/tracer-registry.cc b/api/src/opentelemetry/trace/tracer-registry.cc index 0b96f627cb..a75d64b948 100644 --- a/api/src/opentelemetry/trace/tracer-registry.cc +++ b/api/src/opentelemetry/trace/tracer-registry.cc @@ -9,7 +9,8 @@ TracerRegistry::TracerRegistry() {} TracerRegistry *TracerRegistry::getInstance() { - if (!TracerRegistry::instance) { + if (!TracerRegistry::instance) + { TracerRegistry::instance = new TracerRegistry(); } return TracerRegistry::instance; @@ -22,7 +23,8 @@ Tracer* const TracerRegistry::get(const std::string& name) Tracer* const TracerRegistry::get(const std::string& name, const std::string& version) { auto key = name + ":" + version; - if (!tracers[key]) { + if (!tracers[key]) + { tracers[key] = std::unique_ptr(new Tracer()); } return tracers[key].get(); From d8bb020167343018175795963efddcea3cd29b7c Mon Sep 17 00:00:00 2001 From: Bryan Clement Date: Tue, 7 Jan 2020 11:24:16 -0800 Subject: [PATCH 09/47] new lines between methods --- api/src/opentelemetry/trace/tracer-registry.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/api/src/opentelemetry/trace/tracer-registry.cc b/api/src/opentelemetry/trace/tracer-registry.cc index a75d64b948..db29215849 100644 --- a/api/src/opentelemetry/trace/tracer-registry.cc +++ b/api/src/opentelemetry/trace/tracer-registry.cc @@ -15,6 +15,7 @@ TracerRegistry *TracerRegistry::getInstance() } return TracerRegistry::instance; } + Tracer* const TracerRegistry::get(const std::string& name) { return get(name, ""); From 2755fa5182297695bd5bbb2cb722f68c7e57877b Mon Sep 17 00:00:00 2001 From: Bryan Clement Date: Tue, 7 Jan 2020 11:28:59 -0800 Subject: [PATCH 10/47] Update api/include/opentelemetry/trace/tracer-registry.h Co-Authored-By: Reiley Yang --- api/include/opentelemetry/trace/tracer-registry.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/include/opentelemetry/trace/tracer-registry.h b/api/include/opentelemetry/trace/tracer-registry.h index aaafc2c14b..745c40f37c 100644 --- a/api/include/opentelemetry/trace/tracer-registry.h +++ b/api/include/opentelemetry/trace/tracer-registry.h @@ -18,7 +18,7 @@ class TracerRegistry Tracer* const get(const std::string&); Tracer* const get(const std::string&, const std::string&); - private: +private: TracerRegistry(); static TracerRegistry* instance; std::map> tracers; From 4e2e927ce4c964fdf9dcc199ac01cc32725a2996 Mon Sep 17 00:00:00 2001 From: Bryan Clement Date: Tue, 7 Jan 2020 13:15:45 -0800 Subject: [PATCH 11/47] don't dedupe tracers, don't use stl types in public methods --- .../opentelemetry/trace/tracer-factory.h | 31 +++++++++++++++++ .../opentelemetry/trace/tracer-registry.h | 27 --------------- api/src/opentelemetry/trace/tracer-factory.cc | 33 ++++++++++++++++++ .../opentelemetry/trace/tracer-registry.cc | 34 ------------------- api/src/opentelemetry/trace/tracer.cc | 3 +- api/test/trace/BUILD | 8 ++--- api/test/trace/tracer-factory_test.cc | 22 ++++++++++++ api/test/trace/tracer-registry_test.cc | 22 ------------ 8 files changed, 92 insertions(+), 88 deletions(-) create mode 100644 api/include/opentelemetry/trace/tracer-factory.h delete mode 100644 api/include/opentelemetry/trace/tracer-registry.h create mode 100644 api/src/opentelemetry/trace/tracer-factory.cc delete mode 100644 api/src/opentelemetry/trace/tracer-registry.cc create mode 100644 api/test/trace/tracer-factory_test.cc delete mode 100644 api/test/trace/tracer-registry_test.cc diff --git a/api/include/opentelemetry/trace/tracer-factory.h b/api/include/opentelemetry/trace/tracer-factory.h new file mode 100644 index 0000000000..996787498e --- /dev/null +++ b/api/include/opentelemetry/trace/tracer-factory.h @@ -0,0 +1,31 @@ +#pragma once + +#include +#include +#include + +#include "opentelemetry/nostd/string_view.h" + +#include "./tracer.h" + +using opentelemetry::nostd::string_view; + +namespace opentelemetry +{ +namespace trace +{ +class Tracer; +class TracerFactory +{ + public: + static TracerFactory* getInstance(); + Tracer* const getTracer(const string_view&); + Tracer* const getTracer(const string_view&, const string_view&); + + private: + TracerFactory(); + static TracerFactory* instance; + std::vector> tracers; +}; +} // namespace trace +} // namespace opentelemetry diff --git a/api/include/opentelemetry/trace/tracer-registry.h b/api/include/opentelemetry/trace/tracer-registry.h deleted file mode 100644 index 745c40f37c..0000000000 --- a/api/include/opentelemetry/trace/tracer-registry.h +++ /dev/null @@ -1,27 +0,0 @@ -#pragma once - -#include -#include -#include - -#include "./tracer.h" - -namespace opentelemetry -{ -namespace trace -{ -class Tracer; -class TracerRegistry -{ - public: - static TracerRegistry* getInstance(); - Tracer* const get(const std::string&); - Tracer* const get(const std::string&, const std::string&); - -private: - TracerRegistry(); - static TracerRegistry* instance; - std::map> tracers; -}; -} // namespace trace -} // namespace opentelemetry diff --git a/api/src/opentelemetry/trace/tracer-factory.cc b/api/src/opentelemetry/trace/tracer-factory.cc new file mode 100644 index 0000000000..04468e10b2 --- /dev/null +++ b/api/src/opentelemetry/trace/tracer-factory.cc @@ -0,0 +1,33 @@ +#include "opentelemetry/trace/tracer-factory.h" + +namespace opentelemetry +{ +namespace trace +{ +TracerFactory* TracerFactory::instance = nullptr; +TracerFactory::TracerFactory() {} + +TracerFactory *TracerFactory::getInstance() +{ + if (!TracerFactory::instance) + { + TracerFactory::instance = new TracerFactory(); + } + return TracerFactory::instance; +} + +Tracer* const TracerFactory::getTracer(const string_view& name) +{ + return getTracer(name, ""); +} + +Tracer* const TracerFactory::getTracer(const string_view& name, const string_view& version) +{ + tracers.emplace_back(new Tracer( + name, + version + )); + return tracers.back().get(); +} +} // namespace trace +} // namespace opentelemetry diff --git a/api/src/opentelemetry/trace/tracer-registry.cc b/api/src/opentelemetry/trace/tracer-registry.cc deleted file mode 100644 index db29215849..0000000000 --- a/api/src/opentelemetry/trace/tracer-registry.cc +++ /dev/null @@ -1,34 +0,0 @@ -#include "opentelemetry/trace/tracer-registry.h" - -namespace opentelemetry -{ -namespace trace -{ -TracerRegistry* TracerRegistry::instance = nullptr; -TracerRegistry::TracerRegistry() {} - -TracerRegistry *TracerRegistry::getInstance() -{ - if (!TracerRegistry::instance) - { - TracerRegistry::instance = new TracerRegistry(); - } - return TracerRegistry::instance; -} - -Tracer* const TracerRegistry::get(const std::string& name) -{ - return get(name, ""); -} - -Tracer* const TracerRegistry::get(const std::string& name, const std::string& version) -{ - auto key = name + ":" + version; - if (!tracers[key]) - { - tracers[key] = std::unique_ptr(new Tracer()); - } - return tracers[key].get(); -} -} // namespace trace -} // namespace opentelemetry diff --git a/api/src/opentelemetry/trace/tracer.cc b/api/src/opentelemetry/trace/tracer.cc index 97978f7363..a51d9a0c55 100644 --- a/api/src/opentelemetry/trace/tracer.cc +++ b/api/src/opentelemetry/trace/tracer.cc @@ -4,6 +4,7 @@ namespace opentelemetry { namespace trace { -Tracer::Tracer() {} +Tracer::Tracer(const string_view& name, const string_view& version) + : name(name), version(version) {} } // namespace trace } // namespace opentelemetry diff --git a/api/test/trace/BUILD b/api/test/trace/BUILD index 14d704ee69..7d1e9b0e3b 100644 --- a/api/test/trace/BUILD +++ b/api/test/trace/BUILD @@ -50,10 +50,10 @@ cc_test( ) cc_test( - name = "tracer-registry", - srcs = [ - "tracer-registry_test.cc", - ], + name = "tracer-factory", + srcs = [ + "tracer-factory_test.cc", + ], deps = [ "//api", "@com_google_googletest//:gtest_main", diff --git a/api/test/trace/tracer-factory_test.cc b/api/test/trace/tracer-factory_test.cc new file mode 100644 index 0000000000..b3c2e6d2c6 --- /dev/null +++ b/api/test/trace/tracer-factory_test.cc @@ -0,0 +1,22 @@ +#include "opentelemetry/trace/tracer-factory.h" + +#include + +using opentelemetry::trace::TracerFactory; + +TEST(TracerFactory, Constructor){ + auto t = TracerFactory::getInstance(); + ASSERT_NE(t, nullptr); +} + +TEST(TracerFactory, get){ + auto tf = TracerFactory::getInstance(); + auto t1 = tf->getTracer("test"); + auto t2 = tf->getTracer("test"); + auto t3 = tf->getTracer("different"); + ASSERT_NE(t1, nullptr); + ASSERT_NE(t2, nullptr); + ASSERT_NE(t3, nullptr); + ASSERT_EQ(t1, t1); + ASSERT_NE(t2, t3); +} diff --git a/api/test/trace/tracer-registry_test.cc b/api/test/trace/tracer-registry_test.cc deleted file mode 100644 index 20f664dd70..0000000000 --- a/api/test/trace/tracer-registry_test.cc +++ /dev/null @@ -1,22 +0,0 @@ -#include "opentelemetry/trace/tracer-registry.h" - -#include - -using opentelemetry::trace::TracerRegistry; - -TEST(TracerRegistry, Constructor){ - auto t = TracerRegistry::getInstance(); - ASSERT_NE(t, nullptr); -} - -TEST(TracerRegistry, get){ - auto tf = TracerRegistry::getInstance(); - auto t1 = tf->get("test"); - auto t2 = tf->get("test"); - auto t3 = tf->get("different"); - ASSERT_NE(t1, nullptr); - ASSERT_NE(t2, nullptr); - ASSERT_NE(t3, nullptr); - ASSERT_EQ(t1, t1); - ASSERT_NE(t2, t3); -} From 93d22edc93d84bc7a8b228671549a3dc22e7ad25 Mon Sep 17 00:00:00 2001 From: Bryan Clement Date: Tue, 7 Jan 2020 13:29:27 -0800 Subject: [PATCH 12/47] omit leading whitespace --- api/include/opentelemetry/trace/tracer-factory.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api/include/opentelemetry/trace/tracer-factory.h b/api/include/opentelemetry/trace/tracer-factory.h index 996787498e..2a641b2d6b 100644 --- a/api/include/opentelemetry/trace/tracer-factory.h +++ b/api/include/opentelemetry/trace/tracer-factory.h @@ -17,12 +17,12 @@ namespace trace class Tracer; class TracerFactory { - public: +public: static TracerFactory* getInstance(); Tracer* const getTracer(const string_view&); Tracer* const getTracer(const string_view&, const string_view&); - private: +private: TracerFactory(); static TracerFactory* instance; std::vector> tracers; From c2183837ada6bd6dc3c272c8ec65475ff5a360cb Mon Sep 17 00:00:00 2001 From: Bryan Clement Date: Thu, 9 Jan 2020 12:16:25 -0800 Subject: [PATCH 13/47] added a global scope module for the factory singleton, separated things out into api/sdk delineation --- api/include/opentelemetry/global/factory.h | 20 +++++++++ .../opentelemetry/trace/tracer-factory.h | 15 +------ api/src/opentelemetry/global/factory.cc | 42 +++++++++++++++++++ sdk/BUILD | 9 ++++ sdk/include/opentelemetry/sdk/trace/TBD | 0 .../opentelemetry/sdk/trace/tracer-factory.h | 29 +++++++++++++ .../src/opentelemetry/trace/tracer-factory.cc | 17 ++------ sdk/test/TBD | 0 {api => sdk}/test/trace/BUILD | 2 +- .../test/trace/tracer-factory_test.cc | 11 ++--- 10 files changed, 110 insertions(+), 35 deletions(-) create mode 100644 api/include/opentelemetry/global/factory.h create mode 100644 api/src/opentelemetry/global/factory.cc create mode 100644 sdk/BUILD delete mode 100644 sdk/include/opentelemetry/sdk/trace/TBD create mode 100644 sdk/include/opentelemetry/sdk/trace/tracer-factory.h rename {api => sdk}/src/opentelemetry/trace/tracer-factory.cc (55%) delete mode 100644 sdk/test/TBD rename {api => sdk}/test/trace/BUILD (98%) rename {api => sdk}/test/trace/tracer-factory_test.cc (54%) diff --git a/api/include/opentelemetry/global/factory.h b/api/include/opentelemetry/global/factory.h new file mode 100644 index 0000000000..9b66fb52c3 --- /dev/null +++ b/api/include/opentelemetry/global/factory.h @@ -0,0 +1,20 @@ +#pragma once + +#include "opentelemetry/trace/tracer-factory.h" + +using opentelemetry::trace::TracerFactory; + +namespace opentelemetry +{ +namespace global +{ +class Factory +{ +public: + static TracerFactory* getTracerFactory(); + static void setTracerFactory(TracerFactory*); +private: + static TracerFactory* tracerFactory; +}; +} // namespace global +} // namespace opentelemetry diff --git a/api/include/opentelemetry/trace/tracer-factory.h b/api/include/opentelemetry/trace/tracer-factory.h index 2a641b2d6b..9f5a225c40 100644 --- a/api/include/opentelemetry/trace/tracer-factory.h +++ b/api/include/opentelemetry/trace/tracer-factory.h @@ -1,9 +1,5 @@ #pragma once -#include -#include -#include - #include "opentelemetry/nostd/string_view.h" #include "./tracer.h" @@ -14,18 +10,11 @@ namespace opentelemetry { namespace trace { -class Tracer; class TracerFactory { public: - static TracerFactory* getInstance(); - Tracer* const getTracer(const string_view&); - Tracer* const getTracer(const string_view&, const string_view&); - -private: - TracerFactory(); - static TracerFactory* instance; - std::vector> tracers; + virtual Tracer* const getTracer(const string_view&) = 0; + virtual Tracer* const getTracer(const string_view&, const string_view&) = 0; }; } // namespace trace } // namespace opentelemetry diff --git a/api/src/opentelemetry/global/factory.cc b/api/src/opentelemetry/global/factory.cc new file mode 100644 index 0000000000..500b5e5b2a --- /dev/null +++ b/api/src/opentelemetry/global/factory.cc @@ -0,0 +1,42 @@ +#include "opentelemetry/global/factory.h" +#include "opentelemetry/trace/tracer.h" + +using opentelemetry::trace::TracerFactory; + +namespace opentelemetry +{ +namespace global +{ + +using opentelemetry::trace::Tracer; +class DefaultTracerFactory : public TracerFactory +{ + Tracer* const getTracer(const string_view& name) + { + return getTracer(name, ""); + } + + Tracer* const getTracer(const string_view& name, const string_view& version) + { + return nullptr; + } +}; + +TracerFactory* Factory::tracerFactory = nullptr; + +TracerFactory* Factory::getTracerFactory() +{ + if (!Factory::tracerFactory) + { + Factory::tracerFactory = new DefaultTracerFactory(); + } + return Factory::tracerFactory; +} + +void Factory::setTracerFactory(TracerFactory* tf) +{ + Factory::tracerFactory = tf; +} + +} // namespace global +} // namespace opentelemetry diff --git a/sdk/BUILD b/sdk/BUILD new file mode 100644 index 0000000000..bb9759653d --- /dev/null +++ b/sdk/BUILD @@ -0,0 +1,9 @@ +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "sdk", + deps = ["//api"], + hdrs = glob(["include/**/*.h"]), + srcs = glob(["src/**/*.cc"]), + strip_include_prefix = "include", +) diff --git a/sdk/include/opentelemetry/sdk/trace/TBD b/sdk/include/opentelemetry/sdk/trace/TBD deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/sdk/include/opentelemetry/sdk/trace/tracer-factory.h b/sdk/include/opentelemetry/sdk/trace/tracer-factory.h new file mode 100644 index 0000000000..a8b5d054b9 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/trace/tracer-factory.h @@ -0,0 +1,29 @@ +#pragma once + +#include +#include + +#include "opentelemetry/trace/tracer-factory.h" + +using opentelemetry::trace::Tracer; +using opentelemetry::nostd::string_view; + +namespace opentelemetry +{ +namespace sdk +{ +namespace trace +{ + +class TracerFactory : public opentelemetry::trace::TracerFactory +{ +public: + Tracer* const getTracer(const string_view&); + Tracer* const getTracer(const string_view&, const string_view&); +private: + std::vector> tracers; +}; + +} // namespace trace +} // namespace sdk +} // namespace opentelemetry diff --git a/api/src/opentelemetry/trace/tracer-factory.cc b/sdk/src/opentelemetry/trace/tracer-factory.cc similarity index 55% rename from api/src/opentelemetry/trace/tracer-factory.cc rename to sdk/src/opentelemetry/trace/tracer-factory.cc index 04468e10b2..4393312aff 100644 --- a/api/src/opentelemetry/trace/tracer-factory.cc +++ b/sdk/src/opentelemetry/trace/tracer-factory.cc @@ -1,21 +1,11 @@ -#include "opentelemetry/trace/tracer-factory.h" +#include "opentelemetry/sdk/trace/tracer-factory.h" namespace opentelemetry { -namespace trace +namespace sdk { -TracerFactory* TracerFactory::instance = nullptr; -TracerFactory::TracerFactory() {} - -TracerFactory *TracerFactory::getInstance() +namespace trace { - if (!TracerFactory::instance) - { - TracerFactory::instance = new TracerFactory(); - } - return TracerFactory::instance; -} - Tracer* const TracerFactory::getTracer(const string_view& name) { return getTracer(name, ""); @@ -30,4 +20,5 @@ Tracer* const TracerFactory::getTracer(const string_view& name, const string_vie return tracers.back().get(); } } // namespace trace +} // namespace sdk } // namespace opentelemetry diff --git a/sdk/test/TBD b/sdk/test/TBD deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/api/test/trace/BUILD b/sdk/test/trace/BUILD similarity index 98% rename from api/test/trace/BUILD rename to sdk/test/trace/BUILD index 7d1e9b0e3b..45c3218fa0 100644 --- a/api/test/trace/BUILD +++ b/sdk/test/trace/BUILD @@ -55,7 +55,7 @@ cc_test( "tracer-factory_test.cc", ], deps = [ - "//api", + "//sdk", "@com_google_googletest//:gtest_main", ], ) diff --git a/api/test/trace/tracer-factory_test.cc b/sdk/test/trace/tracer-factory_test.cc similarity index 54% rename from api/test/trace/tracer-factory_test.cc rename to sdk/test/trace/tracer-factory_test.cc index b3c2e6d2c6..226c563ccb 100644 --- a/api/test/trace/tracer-factory_test.cc +++ b/sdk/test/trace/tracer-factory_test.cc @@ -1,16 +1,11 @@ -#include "opentelemetry/trace/tracer-factory.h" +#include "opentelemetry/sdk/trace/tracer-factory.h" #include -using opentelemetry::trace::TracerFactory; - -TEST(TracerFactory, Constructor){ - auto t = TracerFactory::getInstance(); - ASSERT_NE(t, nullptr); -} +using opentelemetry::sdk::trace::TracerFactory; TEST(TracerFactory, get){ - auto tf = TracerFactory::getInstance(); + auto tf = new TracerFactory(); auto t1 = tf->getTracer("test"); auto t2 = tf->getTracer("test"); auto t3 = tf->getTracer("different"); From e3709dc675bf9a9bd3ea99a136b82f2ad886b519 Mon Sep 17 00:00:00 2001 From: Bryan Clement Date: Thu, 9 Jan 2020 12:47:04 -0800 Subject: [PATCH 14/47] tests and clean up --- api/include/opentelemetry/global/factory.h | 2 ++ api/src/opentelemetry/global/factory.cc | 4 +-- api/test/global/BUILD | 10 ++++++ api/test/global/global_test.cc | 32 +++++++++++++++++++ sdk/src/opentelemetry/trace/tracer-factory.cc | 2 ++ sdk/test/trace/tracer-factory_test.cc | 8 +++-- 6 files changed, 54 insertions(+), 4 deletions(-) create mode 100644 api/test/global/BUILD create mode 100644 api/test/global/global_test.cc diff --git a/api/include/opentelemetry/global/factory.h b/api/include/opentelemetry/global/factory.h index 9b66fb52c3..343cd9ce75 100644 --- a/api/include/opentelemetry/global/factory.h +++ b/api/include/opentelemetry/global/factory.h @@ -8,6 +8,7 @@ namespace opentelemetry { namespace global { + class Factory { public: @@ -16,5 +17,6 @@ class Factory private: static TracerFactory* tracerFactory; }; + } // namespace global } // namespace opentelemetry diff --git a/api/src/opentelemetry/global/factory.cc b/api/src/opentelemetry/global/factory.cc index 500b5e5b2a..5a53e1e9ae 100644 --- a/api/src/opentelemetry/global/factory.cc +++ b/api/src/opentelemetry/global/factory.cc @@ -1,14 +1,13 @@ #include "opentelemetry/global/factory.h" -#include "opentelemetry/trace/tracer.h" using opentelemetry::trace::TracerFactory; +using opentelemetry::trace::Tracer; namespace opentelemetry { namespace global { -using opentelemetry::trace::Tracer; class DefaultTracerFactory : public TracerFactory { Tracer* const getTracer(const string_view& name) @@ -18,6 +17,7 @@ class DefaultTracerFactory : public TracerFactory Tracer* const getTracer(const string_view& name, const string_view& version) { + // TODO: return a no-op tracer return nullptr; } }; diff --git a/api/test/global/BUILD b/api/test/global/BUILD new file mode 100644 index 0000000000..33eb276bf2 --- /dev/null +++ b/api/test/global/BUILD @@ -0,0 +1,10 @@ +cc_test( + name = "global", + srcs = [ + "global_test.cc", + ], + deps = [ + "//api", + "@com_google_googletest//:gtest_main", + ], +) diff --git a/api/test/global/global_test.cc b/api/test/global/global_test.cc new file mode 100644 index 0000000000..5622f94fe3 --- /dev/null +++ b/api/test/global/global_test.cc @@ -0,0 +1,32 @@ +#include "opentelemetry/global/factory.h" + +#include + +using opentelemetry::global::Factory; +using opentelemetry::trace::Tracer; + +class TestFactory : public opentelemetry::trace::TracerFactory +{ + Tracer* const getTracer(const string_view& name) + { + return getTracer(name, ""); + } + + Tracer* const getTracer(const string_view& name, const string_view& version) + { + return nullptr; + } +}; + +TEST(Factory, getTracerFactoryDefault) +{ + auto tf = Factory::getTracerFactory(); + ASSERT_NE(tf, nullptr); +} + +TEST(Factory, setTracerFactory) +{ + auto tf = new TestFactory(); + Factory::setTracerFactory(tf); + ASSERT_EQ(Factory::getTracerFactory(), tf); +} diff --git a/sdk/src/opentelemetry/trace/tracer-factory.cc b/sdk/src/opentelemetry/trace/tracer-factory.cc index 4393312aff..7838298f72 100644 --- a/sdk/src/opentelemetry/trace/tracer-factory.cc +++ b/sdk/src/opentelemetry/trace/tracer-factory.cc @@ -6,6 +6,7 @@ namespace sdk { namespace trace { + Tracer* const TracerFactory::getTracer(const string_view& name) { return getTracer(name, ""); @@ -19,6 +20,7 @@ Tracer* const TracerFactory::getTracer(const string_view& name, const string_vie )); return tracers.back().get(); } + } // namespace trace } // namespace sdk } // namespace opentelemetry diff --git a/sdk/test/trace/tracer-factory_test.cc b/sdk/test/trace/tracer-factory_test.cc index 226c563ccb..fbb7158194 100644 --- a/sdk/test/trace/tracer-factory_test.cc +++ b/sdk/test/trace/tracer-factory_test.cc @@ -4,7 +4,8 @@ using opentelemetry::sdk::trace::TracerFactory; -TEST(TracerFactory, get){ +TEST(TracerFactory, getTracer) +{ auto tf = new TracerFactory(); auto t1 = tf->getTracer("test"); auto t2 = tf->getTracer("test"); @@ -12,6 +13,9 @@ TEST(TracerFactory, get){ ASSERT_NE(t1, nullptr); ASSERT_NE(t2, nullptr); ASSERT_NE(t3, nullptr); - ASSERT_EQ(t1, t1); + + // Should return a new instance each time + ASSERT_NE(t1, t2); ASSERT_NE(t2, t3); + ASSERT_NE(t1, t3); } From 9c4001b60d6bacbd4409a3799833462f8f60dbbc Mon Sep 17 00:00:00 2001 From: Bryan Clement Date: Thu, 9 Jan 2020 13:11:26 -0800 Subject: [PATCH 15/47] formatting --- api/include/opentelemetry/global/factory.h | 7 ++++--- .../opentelemetry/trace/tracer-factory.h | 4 ++-- api/include/opentelemetry/trace/tracer.h | 1 - api/src/opentelemetry/global/factory.cc | 19 ++++++++----------- api/src/opentelemetry/trace/tracer.cc | 4 ++-- api/test/global/global_test.cc | 10 ++-------- .../opentelemetry/sdk/trace/tracer-factory.h | 9 +++++---- sdk/src/opentelemetry/trace/tracer-factory.cc | 15 ++++++--------- 8 files changed, 29 insertions(+), 40 deletions(-) diff --git a/api/include/opentelemetry/global/factory.h b/api/include/opentelemetry/global/factory.h index 343cd9ce75..7f6bd87507 100644 --- a/api/include/opentelemetry/global/factory.h +++ b/api/include/opentelemetry/global/factory.h @@ -12,10 +12,11 @@ namespace global class Factory { public: - static TracerFactory* getTracerFactory(); - static void setTracerFactory(TracerFactory*); + static TracerFactory *getTracerFactory(); + static void setTracerFactory(TracerFactory *); + private: - static TracerFactory* tracerFactory; + static TracerFactory *tracerFactory; }; } // namespace global diff --git a/api/include/opentelemetry/trace/tracer-factory.h b/api/include/opentelemetry/trace/tracer-factory.h index 9f5a225c40..a2d88e651f 100644 --- a/api/include/opentelemetry/trace/tracer-factory.h +++ b/api/include/opentelemetry/trace/tracer-factory.h @@ -13,8 +13,8 @@ namespace trace class TracerFactory { public: - virtual Tracer* const getTracer(const string_view&) = 0; - virtual Tracer* const getTracer(const string_view&, const string_view&) = 0; + virtual Tracer *const getTracer(const string_view &) = 0; + virtual Tracer *const getTracer(const string_view &, const string_view &) = 0; }; } // namespace trace } // namespace opentelemetry diff --git a/api/include/opentelemetry/trace/tracer.h b/api/include/opentelemetry/trace/tracer.h index 00ea535c08..603d24e2bb 100644 --- a/api/include/opentelemetry/trace/tracer.h +++ b/api/include/opentelemetry/trace/tracer.h @@ -18,7 +18,6 @@ class Tracer { public: virtual ~Tracer() = default; - /** * Starts a span. */ diff --git a/api/src/opentelemetry/global/factory.cc b/api/src/opentelemetry/global/factory.cc index 5a53e1e9ae..f2312747b5 100644 --- a/api/src/opentelemetry/global/factory.cc +++ b/api/src/opentelemetry/global/factory.cc @@ -1,7 +1,7 @@ #include "opentelemetry/global/factory.h" -using opentelemetry::trace::TracerFactory; using opentelemetry::trace::Tracer; +using opentelemetry::trace::TracerFactory; namespace opentelemetry { @@ -10,21 +10,18 @@ namespace global class DefaultTracerFactory : public TracerFactory { - Tracer* const getTracer(const string_view& name) - { - return getTracer(name, ""); - } + Tracer *const getTracer(const string_view &name) { return getTracer(name, ""); } - Tracer* const getTracer(const string_view& name, const string_view& version) + Tracer *const getTracer(const string_view &name, const string_view &version) { // TODO: return a no-op tracer return nullptr; } }; -TracerFactory* Factory::tracerFactory = nullptr; +TracerFactory *Factory::tracerFactory = nullptr; -TracerFactory* Factory::getTracerFactory() +TracerFactory *Factory::getTracerFactory() { if (!Factory::tracerFactory) { @@ -33,10 +30,10 @@ TracerFactory* Factory::getTracerFactory() return Factory::tracerFactory; } -void Factory::setTracerFactory(TracerFactory* tf) +void Factory::setTracerFactory(TracerFactory *tf) { Factory::tracerFactory = tf; } -} // namespace global -} // namespace opentelemetry +} // namespace global +} // namespace opentelemetry diff --git a/api/src/opentelemetry/trace/tracer.cc b/api/src/opentelemetry/trace/tracer.cc index a51d9a0c55..c0102e32af 100644 --- a/api/src/opentelemetry/trace/tracer.cc +++ b/api/src/opentelemetry/trace/tracer.cc @@ -4,7 +4,7 @@ namespace opentelemetry { namespace trace { -Tracer::Tracer(const string_view& name, const string_view& version) - : name(name), version(version) {} +Tracer::Tracer(const string_view &name, const string_view &version) : name(name), version(version) +{} } // namespace trace } // namespace opentelemetry diff --git a/api/test/global/global_test.cc b/api/test/global/global_test.cc index 5622f94fe3..6f93ca0c88 100644 --- a/api/test/global/global_test.cc +++ b/api/test/global/global_test.cc @@ -7,15 +7,9 @@ using opentelemetry::trace::Tracer; class TestFactory : public opentelemetry::trace::TracerFactory { - Tracer* const getTracer(const string_view& name) - { - return getTracer(name, ""); - } + Tracer *const getTracer(const string_view &name) { return getTracer(name, ""); } - Tracer* const getTracer(const string_view& name, const string_view& version) - { - return nullptr; - } + Tracer *const getTracer(const string_view &name, const string_view &version) { return nullptr; } }; TEST(Factory, getTracerFactoryDefault) diff --git a/sdk/include/opentelemetry/sdk/trace/tracer-factory.h b/sdk/include/opentelemetry/sdk/trace/tracer-factory.h index a8b5d054b9..a46eb78179 100644 --- a/sdk/include/opentelemetry/sdk/trace/tracer-factory.h +++ b/sdk/include/opentelemetry/sdk/trace/tracer-factory.h @@ -1,12 +1,12 @@ #pragma once -#include #include +#include #include "opentelemetry/trace/tracer-factory.h" -using opentelemetry::trace::Tracer; using opentelemetry::nostd::string_view; +using opentelemetry::trace::Tracer; namespace opentelemetry { @@ -18,8 +18,9 @@ namespace trace class TracerFactory : public opentelemetry::trace::TracerFactory { public: - Tracer* const getTracer(const string_view&); - Tracer* const getTracer(const string_view&, const string_view&); + Tracer *const getTracer(const string_view &); + Tracer *const getTracer(const string_view &, const string_view &); + private: std::vector> tracers; }; diff --git a/sdk/src/opentelemetry/trace/tracer-factory.cc b/sdk/src/opentelemetry/trace/tracer-factory.cc index 7838298f72..3d0616659c 100644 --- a/sdk/src/opentelemetry/trace/tracer-factory.cc +++ b/sdk/src/opentelemetry/trace/tracer-factory.cc @@ -7,20 +7,17 @@ namespace sdk namespace trace { -Tracer* const TracerFactory::getTracer(const string_view& name) +Tracer *const TracerFactory::getTracer(const string_view &name) { return getTracer(name, ""); } -Tracer* const TracerFactory::getTracer(const string_view& name, const string_view& version) +Tracer *const TracerFactory::getTracer(const string_view &name, const string_view &version) { - tracers.emplace_back(new Tracer( - name, - version - )); + tracers.emplace_back(new Tracer(name, version)); return tracers.back().get(); } -} // namespace trace -} // namespace sdk -} // namespace opentelemetry +} // namespace trace +} // namespace sdk +} // namespace opentelemetry From a39b06b0631fcdb6a2147baf74ee0d09d969475b Mon Sep 17 00:00:00 2001 From: Bryan Clement Date: Thu, 9 Jan 2020 13:20:00 -0800 Subject: [PATCH 16/47] tracer-factory -> tracer_factory --- api/include/opentelemetry/global/factory.h | 2 +- .../trace/{tracer-factory.h => tracer_factory.h} | 0 .../sdk/trace/{tracer-factory.h => tracer_factory.h} | 2 +- .../trace/{tracer-factory.cc => tracer_factory.cc} | 2 +- sdk/test/trace/BUILD | 4 ++-- .../trace/{tracer-factory_test.cc => tracer_factory_test.cc} | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) rename api/include/opentelemetry/trace/{tracer-factory.h => tracer_factory.h} (100%) rename sdk/include/opentelemetry/sdk/trace/{tracer-factory.h => tracer_factory.h} (91%) rename sdk/src/opentelemetry/trace/{tracer-factory.cc => tracer_factory.cc} (88%) rename sdk/test/trace/{tracer-factory_test.cc => tracer_factory_test.cc} (89%) diff --git a/api/include/opentelemetry/global/factory.h b/api/include/opentelemetry/global/factory.h index 7f6bd87507..c23b900f0d 100644 --- a/api/include/opentelemetry/global/factory.h +++ b/api/include/opentelemetry/global/factory.h @@ -1,6 +1,6 @@ #pragma once -#include "opentelemetry/trace/tracer-factory.h" +#include "opentelemetry/trace/tracer_factory.h" using opentelemetry::trace::TracerFactory; diff --git a/api/include/opentelemetry/trace/tracer-factory.h b/api/include/opentelemetry/trace/tracer_factory.h similarity index 100% rename from api/include/opentelemetry/trace/tracer-factory.h rename to api/include/opentelemetry/trace/tracer_factory.h diff --git a/sdk/include/opentelemetry/sdk/trace/tracer-factory.h b/sdk/include/opentelemetry/sdk/trace/tracer_factory.h similarity index 91% rename from sdk/include/opentelemetry/sdk/trace/tracer-factory.h rename to sdk/include/opentelemetry/sdk/trace/tracer_factory.h index a46eb78179..72644e03a2 100644 --- a/sdk/include/opentelemetry/sdk/trace/tracer-factory.h +++ b/sdk/include/opentelemetry/sdk/trace/tracer_factory.h @@ -3,7 +3,7 @@ #include #include -#include "opentelemetry/trace/tracer-factory.h" +#include "opentelemetry/trace/tracer_factory.h" using opentelemetry::nostd::string_view; using opentelemetry::trace::Tracer; diff --git a/sdk/src/opentelemetry/trace/tracer-factory.cc b/sdk/src/opentelemetry/trace/tracer_factory.cc similarity index 88% rename from sdk/src/opentelemetry/trace/tracer-factory.cc rename to sdk/src/opentelemetry/trace/tracer_factory.cc index 3d0616659c..2749b8cf9d 100644 --- a/sdk/src/opentelemetry/trace/tracer-factory.cc +++ b/sdk/src/opentelemetry/trace/tracer_factory.cc @@ -1,4 +1,4 @@ -#include "opentelemetry/sdk/trace/tracer-factory.h" +#include "opentelemetry/sdk/trace/tracer_factory.h" namespace opentelemetry { diff --git a/sdk/test/trace/BUILD b/sdk/test/trace/BUILD index 45c3218fa0..8100bd195f 100644 --- a/sdk/test/trace/BUILD +++ b/sdk/test/trace/BUILD @@ -50,9 +50,9 @@ cc_test( ) cc_test( - name = "tracer-factory", + name = "tracer_factory", srcs = [ - "tracer-factory_test.cc", + "tracer_factory_test.cc", ], deps = [ "//sdk", diff --git a/sdk/test/trace/tracer-factory_test.cc b/sdk/test/trace/tracer_factory_test.cc similarity index 89% rename from sdk/test/trace/tracer-factory_test.cc rename to sdk/test/trace/tracer_factory_test.cc index fbb7158194..6a5435232b 100644 --- a/sdk/test/trace/tracer-factory_test.cc +++ b/sdk/test/trace/tracer_factory_test.cc @@ -1,4 +1,4 @@ -#include "opentelemetry/sdk/trace/tracer-factory.h" +#include "opentelemetry/sdk/trace/tracer_factory.h" #include From f2817d0507ff9465c8bfaf7b02ac411a26f5dd85 Mon Sep 17 00:00:00 2001 From: Bryan Clement Date: Thu, 9 Jan 2020 14:32:19 -0800 Subject: [PATCH 17/47] added names to formal params for getTracer, made getTracer explicit override in sdk --- api/include/opentelemetry/trace/tracer_factory.h | 4 ++-- sdk/include/opentelemetry/sdk/trace/tracer_factory.h | 4 ++-- sdk/src/opentelemetry/trace/tracer_factory.cc | 10 +++------- 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/api/include/opentelemetry/trace/tracer_factory.h b/api/include/opentelemetry/trace/tracer_factory.h index a2d88e651f..c1f18de0e8 100644 --- a/api/include/opentelemetry/trace/tracer_factory.h +++ b/api/include/opentelemetry/trace/tracer_factory.h @@ -13,8 +13,8 @@ namespace trace class TracerFactory { public: - virtual Tracer *const getTracer(const string_view &) = 0; - virtual Tracer *const getTracer(const string_view &, const string_view &) = 0; + virtual Tracer *const getTracer(const string_view &libraryName, + const string_view &libraryVersion) = 0; }; } // namespace trace } // namespace opentelemetry diff --git a/sdk/include/opentelemetry/sdk/trace/tracer_factory.h b/sdk/include/opentelemetry/sdk/trace/tracer_factory.h index 72644e03a2..469c56cdad 100644 --- a/sdk/include/opentelemetry/sdk/trace/tracer_factory.h +++ b/sdk/include/opentelemetry/sdk/trace/tracer_factory.h @@ -18,8 +18,8 @@ namespace trace class TracerFactory : public opentelemetry::trace::TracerFactory { public: - Tracer *const getTracer(const string_view &); - Tracer *const getTracer(const string_view &, const string_view &); + Tracer *const getTracer(const string_view &libraryName, + const string_view &libraryVersion = "") override; private: std::vector> tracers; diff --git a/sdk/src/opentelemetry/trace/tracer_factory.cc b/sdk/src/opentelemetry/trace/tracer_factory.cc index 2749b8cf9d..3b854a17b1 100644 --- a/sdk/src/opentelemetry/trace/tracer_factory.cc +++ b/sdk/src/opentelemetry/trace/tracer_factory.cc @@ -7,14 +7,10 @@ namespace sdk namespace trace { -Tracer *const TracerFactory::getTracer(const string_view &name) +Tracer *const TracerFactory::getTracer(const string_view &libraryName, + const string_view &libraryVersion) { - return getTracer(name, ""); -} - -Tracer *const TracerFactory::getTracer(const string_view &name, const string_view &version) -{ - tracers.emplace_back(new Tracer(name, version)); + tracers.emplace_back(new Tracer(libraryName, libraryVersion)); return tracers.back().get(); } From daa7ce0daf24e1ae666e291bd91b6b0d95f04195 Mon Sep 17 00:00:00 2001 From: Bryan Clement Date: Thu, 9 Jan 2020 15:01:14 -0800 Subject: [PATCH 18/47] updated default and test factory impls --- api/src/opentelemetry/global/factory.cc | 4 +--- api/test/global/global_test.cc | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/api/src/opentelemetry/global/factory.cc b/api/src/opentelemetry/global/factory.cc index f2312747b5..ab89e3afcf 100644 --- a/api/src/opentelemetry/global/factory.cc +++ b/api/src/opentelemetry/global/factory.cc @@ -10,9 +10,7 @@ namespace global class DefaultTracerFactory : public TracerFactory { - Tracer *const getTracer(const string_view &name) { return getTracer(name, ""); } - - Tracer *const getTracer(const string_view &name, const string_view &version) + Tracer *const getTracer(const string_view &libraryName, const string_view &libraryVersion = "") override { // TODO: return a no-op tracer return nullptr; diff --git a/api/test/global/global_test.cc b/api/test/global/global_test.cc index 6f93ca0c88..5c68d7091a 100644 --- a/api/test/global/global_test.cc +++ b/api/test/global/global_test.cc @@ -7,9 +7,7 @@ using opentelemetry::trace::Tracer; class TestFactory : public opentelemetry::trace::TracerFactory { - Tracer *const getTracer(const string_view &name) { return getTracer(name, ""); } - - Tracer *const getTracer(const string_view &name, const string_view &version) { return nullptr; } + Tracer *const getTracer(const string_view &libraryName, const string_view &libraryVersion) override { return nullptr; } }; TEST(Factory, getTracerFactoryDefault) From 2ef4a474ac102030bb9036aae3fad684c1a92316 Mon Sep 17 00:00:00 2001 From: bryan Date: Fri, 10 Jan 2020 14:05:35 -0800 Subject: [PATCH 19/47] update naming, change pass by const ref to pass by value in GetTracer --- api/include/opentelemetry/global/factory.h | 6 +++--- api/include/opentelemetry/trace/tracer_factory.h | 4 ++-- api/src/opentelemetry/global/factory.cc | 16 ++++++++-------- api/test/global/global_test.cc | 12 ++++++------ .../opentelemetry/sdk/trace/tracer_factory.h | 6 +++--- sdk/src/opentelemetry/trace/tracer_factory.cc | 8 ++++---- sdk/test/trace/tracer_factory_test.cc | 10 +++++----- 7 files changed, 31 insertions(+), 31 deletions(-) diff --git a/api/include/opentelemetry/global/factory.h b/api/include/opentelemetry/global/factory.h index c23b900f0d..016ae32e17 100644 --- a/api/include/opentelemetry/global/factory.h +++ b/api/include/opentelemetry/global/factory.h @@ -12,11 +12,11 @@ namespace global class Factory { public: - static TracerFactory *getTracerFactory(); - static void setTracerFactory(TracerFactory *); + static TracerFactory *GetTracerFactory(); + static void SetTracerFactory(TracerFactory *); private: - static TracerFactory *tracerFactory; + static TracerFactory *tracer_factory_; }; } // namespace global diff --git a/api/include/opentelemetry/trace/tracer_factory.h b/api/include/opentelemetry/trace/tracer_factory.h index c1f18de0e8..3150d5d701 100644 --- a/api/include/opentelemetry/trace/tracer_factory.h +++ b/api/include/opentelemetry/trace/tracer_factory.h @@ -13,8 +13,8 @@ namespace trace class TracerFactory { public: - virtual Tracer *const getTracer(const string_view &libraryName, - const string_view &libraryVersion) = 0; + virtual Tracer *const GetTracer(string_view library_name, + string_view library_version) = 0; }; } // namespace trace } // namespace opentelemetry diff --git a/api/src/opentelemetry/global/factory.cc b/api/src/opentelemetry/global/factory.cc index ab89e3afcf..4b350634e3 100644 --- a/api/src/opentelemetry/global/factory.cc +++ b/api/src/opentelemetry/global/factory.cc @@ -10,27 +10,27 @@ namespace global class DefaultTracerFactory : public TracerFactory { - Tracer *const getTracer(const string_view &libraryName, const string_view &libraryVersion = "") override + Tracer *const GetTracer(string_view library_name, string_view library_version = "") override { // TODO: return a no-op tracer return nullptr; } }; -TracerFactory *Factory::tracerFactory = nullptr; +TracerFactory *Factory::tracer_factory_ = nullptr; -TracerFactory *Factory::getTracerFactory() +TracerFactory *Factory::GetTracerFactory() { - if (!Factory::tracerFactory) + if (!Factory::tracer_factory_) { - Factory::tracerFactory = new DefaultTracerFactory(); + Factory::tracer_factory_ = new DefaultTracerFactory(); } - return Factory::tracerFactory; + return Factory::tracer_factory_; } -void Factory::setTracerFactory(TracerFactory *tf) +void Factory::SetTracerFactory(TracerFactory *tf) { - Factory::tracerFactory = tf; + Factory::tracer_factory_ = tf; } } // namespace global diff --git a/api/test/global/global_test.cc b/api/test/global/global_test.cc index 5c68d7091a..6562ca6ee6 100644 --- a/api/test/global/global_test.cc +++ b/api/test/global/global_test.cc @@ -7,18 +7,18 @@ using opentelemetry::trace::Tracer; class TestFactory : public opentelemetry::trace::TracerFactory { - Tracer *const getTracer(const string_view &libraryName, const string_view &libraryVersion) override { return nullptr; } + Tracer *const GetTracer(string_view library_name, string_view library_version) override { return nullptr; } }; -TEST(Factory, getTracerFactoryDefault) +TEST(Factory, GetTracerFactoryDefault) { - auto tf = Factory::getTracerFactory(); + auto tf = Factory::GetTracerFactory(); ASSERT_NE(tf, nullptr); } -TEST(Factory, setTracerFactory) +TEST(Factory, SetTracerFactory) { auto tf = new TestFactory(); - Factory::setTracerFactory(tf); - ASSERT_EQ(Factory::getTracerFactory(), tf); + Factory::SetTracerFactory(tf); + ASSERT_EQ(Factory::GetTracerFactory(), tf); } diff --git a/sdk/include/opentelemetry/sdk/trace/tracer_factory.h b/sdk/include/opentelemetry/sdk/trace/tracer_factory.h index 469c56cdad..838a7c18db 100644 --- a/sdk/include/opentelemetry/sdk/trace/tracer_factory.h +++ b/sdk/include/opentelemetry/sdk/trace/tracer_factory.h @@ -18,11 +18,11 @@ namespace trace class TracerFactory : public opentelemetry::trace::TracerFactory { public: - Tracer *const getTracer(const string_view &libraryName, - const string_view &libraryVersion = "") override; + Tracer *const GetTracer(string_view library_name, + string_view library_version = "") override; private: - std::vector> tracers; + std::vector> tracers_; }; } // namespace trace diff --git a/sdk/src/opentelemetry/trace/tracer_factory.cc b/sdk/src/opentelemetry/trace/tracer_factory.cc index 3b854a17b1..02d5144f2c 100644 --- a/sdk/src/opentelemetry/trace/tracer_factory.cc +++ b/sdk/src/opentelemetry/trace/tracer_factory.cc @@ -7,11 +7,11 @@ namespace sdk namespace trace { -Tracer *const TracerFactory::getTracer(const string_view &libraryName, - const string_view &libraryVersion) +Tracer *const TracerFactory::GetTracer(string_view library_name, + string_view library_version) { - tracers.emplace_back(new Tracer(libraryName, libraryVersion)); - return tracers.back().get(); + tracers_.emplace_back(new Tracer(library_name, library_version)); + return tracers_.back().get(); } } // namespace trace diff --git a/sdk/test/trace/tracer_factory_test.cc b/sdk/test/trace/tracer_factory_test.cc index 6a5435232b..b9cd7d33cf 100644 --- a/sdk/test/trace/tracer_factory_test.cc +++ b/sdk/test/trace/tracer_factory_test.cc @@ -4,18 +4,18 @@ using opentelemetry::sdk::trace::TracerFactory; -TEST(TracerFactory, getTracer) +TEST(TracerFactory, GetTracer) { auto tf = new TracerFactory(); - auto t1 = tf->getTracer("test"); - auto t2 = tf->getTracer("test"); - auto t3 = tf->getTracer("different"); + auto t1 = tf->GetTracer("test"); + auto t2 = tf->GetTracer("test"); + auto t3 = tf->GetTracer("different"); ASSERT_NE(t1, nullptr); ASSERT_NE(t2, nullptr); ASSERT_NE(t3, nullptr); // Should return a new instance each time ASSERT_NE(t1, t2); - ASSERT_NE(t2, t3); ASSERT_NE(t1, t3); + ASSERT_NE(t2, t3); } From c61bd8da79907b7b205d780d01d0efa2b5bc12ba Mon Sep 17 00:00:00 2001 From: bryan Date: Fri, 10 Jan 2020 14:08:12 -0800 Subject: [PATCH 20/47] formatting --- api/include/opentelemetry/trace/tracer_factory.h | 3 +-- api/test/global/global_test.cc | 5 ++++- sdk/include/opentelemetry/sdk/trace/tracer_factory.h | 3 +-- sdk/src/opentelemetry/trace/tracer_factory.cc | 3 +-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/api/include/opentelemetry/trace/tracer_factory.h b/api/include/opentelemetry/trace/tracer_factory.h index 3150d5d701..39d5818754 100644 --- a/api/include/opentelemetry/trace/tracer_factory.h +++ b/api/include/opentelemetry/trace/tracer_factory.h @@ -13,8 +13,7 @@ namespace trace class TracerFactory { public: - virtual Tracer *const GetTracer(string_view library_name, - string_view library_version) = 0; + virtual Tracer *const GetTracer(string_view library_name, string_view library_version) = 0; }; } // namespace trace } // namespace opentelemetry diff --git a/api/test/global/global_test.cc b/api/test/global/global_test.cc index 6562ca6ee6..d428ed5eb4 100644 --- a/api/test/global/global_test.cc +++ b/api/test/global/global_test.cc @@ -7,7 +7,10 @@ using opentelemetry::trace::Tracer; class TestFactory : public opentelemetry::trace::TracerFactory { - Tracer *const GetTracer(string_view library_name, string_view library_version) override { return nullptr; } + Tracer *const GetTracer(string_view library_name, string_view library_version) override + { + return nullptr; + } }; TEST(Factory, GetTracerFactoryDefault) diff --git a/sdk/include/opentelemetry/sdk/trace/tracer_factory.h b/sdk/include/opentelemetry/sdk/trace/tracer_factory.h index 838a7c18db..086b050125 100644 --- a/sdk/include/opentelemetry/sdk/trace/tracer_factory.h +++ b/sdk/include/opentelemetry/sdk/trace/tracer_factory.h @@ -18,8 +18,7 @@ namespace trace class TracerFactory : public opentelemetry::trace::TracerFactory { public: - Tracer *const GetTracer(string_view library_name, - string_view library_version = "") override; + Tracer *const GetTracer(string_view library_name, string_view library_version = "") override; private: std::vector> tracers_; diff --git a/sdk/src/opentelemetry/trace/tracer_factory.cc b/sdk/src/opentelemetry/trace/tracer_factory.cc index 02d5144f2c..2c2f0b02cf 100644 --- a/sdk/src/opentelemetry/trace/tracer_factory.cc +++ b/sdk/src/opentelemetry/trace/tracer_factory.cc @@ -7,8 +7,7 @@ namespace sdk namespace trace { -Tracer *const TracerFactory::GetTracer(string_view library_name, - string_view library_version) +Tracer *const TracerFactory::GetTracer(string_view library_name, string_view library_version) { tracers_.emplace_back(new Tracer(library_name, library_version)); return tracers_.back().get(); From bd1be15ad2d15a2fe8b98c01a936657e8c677566 Mon Sep 17 00:00:00 2001 From: bryan Date: Tue, 14 Jan 2020 08:42:47 -0800 Subject: [PATCH 21/47] free current tracer when setting new one --- api/include/opentelemetry/global/factory.h | 2 -- api/src/opentelemetry/global/factory.cc | 7 +++++-- sdk/include/opentelemetry/sdk/trace/tracer_factory.h | 2 -- sdk/src/opentelemetry/trace/tracer_factory.cc | 2 -- 4 files changed, 5 insertions(+), 8 deletions(-) diff --git a/api/include/opentelemetry/global/factory.h b/api/include/opentelemetry/global/factory.h index 016ae32e17..8631759c2b 100644 --- a/api/include/opentelemetry/global/factory.h +++ b/api/include/opentelemetry/global/factory.h @@ -8,7 +8,6 @@ namespace opentelemetry { namespace global { - class Factory { public: @@ -18,6 +17,5 @@ class Factory private: static TracerFactory *tracer_factory_; }; - } // namespace global } // namespace opentelemetry diff --git a/api/src/opentelemetry/global/factory.cc b/api/src/opentelemetry/global/factory.cc index 4b350634e3..6a93969897 100644 --- a/api/src/opentelemetry/global/factory.cc +++ b/api/src/opentelemetry/global/factory.cc @@ -7,7 +7,6 @@ namespace opentelemetry { namespace global { - class DefaultTracerFactory : public TracerFactory { Tracer *const GetTracer(string_view library_name, string_view library_version = "") override @@ -30,8 +29,12 @@ TracerFactory *Factory::GetTracerFactory() void Factory::SetTracerFactory(TracerFactory *tf) { + if (Factory::tracer_factory_) + { + delete Factory::tracer_factory_; + } + Factory::tracer_factory_ = tf; } - } // namespace global } // namespace opentelemetry diff --git a/sdk/include/opentelemetry/sdk/trace/tracer_factory.h b/sdk/include/opentelemetry/sdk/trace/tracer_factory.h index 086b050125..a83b6b426d 100644 --- a/sdk/include/opentelemetry/sdk/trace/tracer_factory.h +++ b/sdk/include/opentelemetry/sdk/trace/tracer_factory.h @@ -14,7 +14,6 @@ namespace sdk { namespace trace { - class TracerFactory : public opentelemetry::trace::TracerFactory { public: @@ -23,7 +22,6 @@ class TracerFactory : public opentelemetry::trace::TracerFactory private: std::vector> tracers_; }; - } // namespace trace } // namespace sdk } // namespace opentelemetry diff --git a/sdk/src/opentelemetry/trace/tracer_factory.cc b/sdk/src/opentelemetry/trace/tracer_factory.cc index 2c2f0b02cf..64817a91b7 100644 --- a/sdk/src/opentelemetry/trace/tracer_factory.cc +++ b/sdk/src/opentelemetry/trace/tracer_factory.cc @@ -6,13 +6,11 @@ namespace sdk { namespace trace { - Tracer *const TracerFactory::GetTracer(string_view library_name, string_view library_version) { tracers_.emplace_back(new Tracer(library_name, library_version)); return tracers_.back().get(); } - } // namespace trace } // namespace sdk } // namespace opentelemetry From 739329bd87647dabd1e5544d2ec4d8e4c6b40251 Mon Sep 17 00:00:00 2001 From: bryan Date: Wed, 15 Jan 2020 11:26:19 -0800 Subject: [PATCH 22/47] factory -> provider --- api/include/opentelemetry/global/factory.h | 21 ---------- api/include/opentelemetry/global/provider.h | 21 ++++++++++ .../{tracer_factory.h => tracer_provider.h} | 3 +- api/src/opentelemetry/global/factory.cc | 40 ------------------- api/src/opentelemetry/global/provider.cc | 40 +++++++++++++++++++ api/test/global/global_test.cc | 18 ++++----- .../{tracer_factory.h => tracer_provider.h} | 4 +- .../{tracer_factory.cc => tracer_provider.cc} | 4 +- sdk/test/trace/BUILD | 4 +- ...actory_test.cc => tracer_provider_test.cc} | 8 ++-- 10 files changed, 82 insertions(+), 81 deletions(-) delete mode 100644 api/include/opentelemetry/global/factory.h create mode 100644 api/include/opentelemetry/global/provider.h rename api/include/opentelemetry/trace/{tracer_factory.h => tracer_provider.h} (73%) delete mode 100644 api/src/opentelemetry/global/factory.cc create mode 100644 api/src/opentelemetry/global/provider.cc rename sdk/include/opentelemetry/sdk/trace/{tracer_factory.h => tracer_provider.h} (78%) rename sdk/src/opentelemetry/trace/{tracer_factory.cc => tracer_provider.cc} (61%) rename sdk/test/trace/{tracer_factory_test.cc => tracer_provider_test.cc} (66%) diff --git a/api/include/opentelemetry/global/factory.h b/api/include/opentelemetry/global/factory.h deleted file mode 100644 index 8631759c2b..0000000000 --- a/api/include/opentelemetry/global/factory.h +++ /dev/null @@ -1,21 +0,0 @@ -#pragma once - -#include "opentelemetry/trace/tracer_factory.h" - -using opentelemetry::trace::TracerFactory; - -namespace opentelemetry -{ -namespace global -{ -class Factory -{ -public: - static TracerFactory *GetTracerFactory(); - static void SetTracerFactory(TracerFactory *); - -private: - static TracerFactory *tracer_factory_; -}; -} // namespace global -} // namespace opentelemetry diff --git a/api/include/opentelemetry/global/provider.h b/api/include/opentelemetry/global/provider.h new file mode 100644 index 0000000000..991ab10e48 --- /dev/null +++ b/api/include/opentelemetry/global/provider.h @@ -0,0 +1,21 @@ +#pragma once + +#include "opentelemetry/trace/tracer_provider.h" + +using opentelemetry::trace::TracerProvider; + +namespace opentelemetry +{ +namespace global +{ +class Provider +{ +public: + static TracerProvider *GetTracerProvider(); + static void SetTracerProvider(TracerProvider *); + +private: + static TracerProvider *tracer_provider_; +}; +} // namespace global +} // namespace opentelemetry diff --git a/api/include/opentelemetry/trace/tracer_factory.h b/api/include/opentelemetry/trace/tracer_provider.h similarity index 73% rename from api/include/opentelemetry/trace/tracer_factory.h rename to api/include/opentelemetry/trace/tracer_provider.h index 39d5818754..65d297c75a 100644 --- a/api/include/opentelemetry/trace/tracer_factory.h +++ b/api/include/opentelemetry/trace/tracer_provider.h @@ -10,9 +10,10 @@ namespace opentelemetry { namespace trace { -class TracerFactory +class TracerProvider { public: + virtual ~TracerProvider() = default; virtual Tracer *const GetTracer(string_view library_name, string_view library_version) = 0; }; } // namespace trace diff --git a/api/src/opentelemetry/global/factory.cc b/api/src/opentelemetry/global/factory.cc deleted file mode 100644 index 6a93969897..0000000000 --- a/api/src/opentelemetry/global/factory.cc +++ /dev/null @@ -1,40 +0,0 @@ -#include "opentelemetry/global/factory.h" - -using opentelemetry::trace::Tracer; -using opentelemetry::trace::TracerFactory; - -namespace opentelemetry -{ -namespace global -{ -class DefaultTracerFactory : public TracerFactory -{ - Tracer *const GetTracer(string_view library_name, string_view library_version = "") override - { - // TODO: return a no-op tracer - return nullptr; - } -}; - -TracerFactory *Factory::tracer_factory_ = nullptr; - -TracerFactory *Factory::GetTracerFactory() -{ - if (!Factory::tracer_factory_) - { - Factory::tracer_factory_ = new DefaultTracerFactory(); - } - return Factory::tracer_factory_; -} - -void Factory::SetTracerFactory(TracerFactory *tf) -{ - if (Factory::tracer_factory_) - { - delete Factory::tracer_factory_; - } - - Factory::tracer_factory_ = tf; -} -} // namespace global -} // namespace opentelemetry diff --git a/api/src/opentelemetry/global/provider.cc b/api/src/opentelemetry/global/provider.cc new file mode 100644 index 0000000000..7f39718e36 --- /dev/null +++ b/api/src/opentelemetry/global/provider.cc @@ -0,0 +1,40 @@ +#include "opentelemetry/global/provider.h" + +using opentelemetry::trace::Tracer; +using opentelemetry::trace::TracerProvider; + +namespace opentelemetry +{ +namespace global +{ +class DefaultTracerProvider : public TracerProvider +{ + Tracer *const GetTracer(string_view library_name, string_view library_version = "") override + { + // TODO: return a no-op trace + return nullptr; + } +}; + +TracerProvider *Provider::tracer_provider_ = nullptr; + +TracerProvider *Provider::GetTracerProvider() +{ + if (!Provider::tracer_provider_) + { + Provider::tracer_provider_ = new DefaultTracerProvider(); + } + return Provider::tracer_provider_; +} + +void Provider::SetTracerProvider(TracerProvider *tf) +{ + if (Provider::tracer_provider_) + { + delete Provider::tracer_provider_; + } + + Provider::tracer_provider_ = tf; +} +} // namespace global +} // namespace opentelemetry diff --git a/api/test/global/global_test.cc b/api/test/global/global_test.cc index d428ed5eb4..129777a4fd 100644 --- a/api/test/global/global_test.cc +++ b/api/test/global/global_test.cc @@ -1,11 +1,11 @@ -#include "opentelemetry/global/factory.h" +#include "opentelemetry/global/provider.h" #include -using opentelemetry::global::Factory; +using opentelemetry::global::Provider; using opentelemetry::trace::Tracer; -class TestFactory : public opentelemetry::trace::TracerFactory +class TestProvider : public opentelemetry::trace::TracerProvider { Tracer *const GetTracer(string_view library_name, string_view library_version) override { @@ -13,15 +13,15 @@ class TestFactory : public opentelemetry::trace::TracerFactory } }; -TEST(Factory, GetTracerFactoryDefault) +TEST(Provider, GetTracerProviderDefault) { - auto tf = Factory::GetTracerFactory(); + auto tf = Provider::GetTracerProvider(); ASSERT_NE(tf, nullptr); } -TEST(Factory, SetTracerFactory) +TEST(Provider, SetTracerProvider) { - auto tf = new TestFactory(); - Factory::SetTracerFactory(tf); - ASSERT_EQ(Factory::GetTracerFactory(), tf); + auto tf = new TestProvider(); + Provider::SetTracerProvider(tf); + ASSERT_EQ(Provider::GetTracerProvider(), tf); } diff --git a/sdk/include/opentelemetry/sdk/trace/tracer_factory.h b/sdk/include/opentelemetry/sdk/trace/tracer_provider.h similarity index 78% rename from sdk/include/opentelemetry/sdk/trace/tracer_factory.h rename to sdk/include/opentelemetry/sdk/trace/tracer_provider.h index a83b6b426d..99bcfeff8d 100644 --- a/sdk/include/opentelemetry/sdk/trace/tracer_factory.h +++ b/sdk/include/opentelemetry/sdk/trace/tracer_provider.h @@ -3,7 +3,7 @@ #include #include -#include "opentelemetry/trace/tracer_factory.h" +#include "opentelemetry/trace/tracer_provider.h" using opentelemetry::nostd::string_view; using opentelemetry::trace::Tracer; @@ -14,7 +14,7 @@ namespace sdk { namespace trace { -class TracerFactory : public opentelemetry::trace::TracerFactory +class TracerProvider : public opentelemetry::trace::TracerProvider { public: Tracer *const GetTracer(string_view library_name, string_view library_version = "") override; diff --git a/sdk/src/opentelemetry/trace/tracer_factory.cc b/sdk/src/opentelemetry/trace/tracer_provider.cc similarity index 61% rename from sdk/src/opentelemetry/trace/tracer_factory.cc rename to sdk/src/opentelemetry/trace/tracer_provider.cc index 64817a91b7..5522f22290 100644 --- a/sdk/src/opentelemetry/trace/tracer_factory.cc +++ b/sdk/src/opentelemetry/trace/tracer_provider.cc @@ -1,4 +1,4 @@ -#include "opentelemetry/sdk/trace/tracer_factory.h" +#include "opentelemetry/sdk/trace/tracer_provider.h" namespace opentelemetry { @@ -6,7 +6,7 @@ namespace sdk { namespace trace { -Tracer *const TracerFactory::GetTracer(string_view library_name, string_view library_version) +Tracer *const TracerProvider::GetTracer(string_view library_name, string_view library_version) { tracers_.emplace_back(new Tracer(library_name, library_version)); return tracers_.back().get(); diff --git a/sdk/test/trace/BUILD b/sdk/test/trace/BUILD index 8100bd195f..b61c214883 100644 --- a/sdk/test/trace/BUILD +++ b/sdk/test/trace/BUILD @@ -50,9 +50,9 @@ cc_test( ) cc_test( - name = "tracer_factory", + name = "tracer_provider", srcs = [ - "tracer_factory_test.cc", + "tracer_provider_test.cc", ], deps = [ "//sdk", diff --git a/sdk/test/trace/tracer_factory_test.cc b/sdk/test/trace/tracer_provider_test.cc similarity index 66% rename from sdk/test/trace/tracer_factory_test.cc rename to sdk/test/trace/tracer_provider_test.cc index b9cd7d33cf..89dd7f1595 100644 --- a/sdk/test/trace/tracer_factory_test.cc +++ b/sdk/test/trace/tracer_provider_test.cc @@ -1,12 +1,12 @@ -#include "opentelemetry/sdk/trace/tracer_factory.h" +#include "opentelemetry/sdk/trace/tracer_provider.h" #include -using opentelemetry::sdk::trace::TracerFactory; +using opentelemetry::sdk::trace::TracerProvider; -TEST(TracerFactory, GetTracer) +TEST(TracerProvider, GetTracer) { - auto tf = new TracerFactory(); + auto tf = new TracerProvider(); auto t1 = tf->GetTracer("test"); auto t2 = tf->GetTracer("test"); auto t3 = tf->GetTracer("different"); From 99a522abe3623ca0a969dd7e3a2a84c0746681b8 Mon Sep 17 00:00:00 2001 From: bryan Date: Wed, 15 Jan 2020 16:23:15 -0800 Subject: [PATCH 23/47] sdk span and tracer skeletons --- .../opentelemetry/trace/tracer_provider.h | 3 +-- api/src/opentelemetry/global/provider.cc | 16 +++++++++--- api/src/opentelemetry/trace/tracer.cc | 10 ------- sdk/include/opentelemetry/sdk/trace/span.h | 26 +++++++++++++++++++ sdk/include/opentelemetry/sdk/trace/tracer.h | 23 ++++++++++++++++ .../opentelemetry/sdk/trace/tracer_provider.h | 3 ++- sdk/src/opentelemetry/trace/span.cc | 12 +++++++++ sdk/src/opentelemetry/trace/tracer.cc | 18 +++++++++++++ 8 files changed, 94 insertions(+), 17 deletions(-) delete mode 100644 api/src/opentelemetry/trace/tracer.cc create mode 100644 sdk/include/opentelemetry/sdk/trace/span.h create mode 100644 sdk/include/opentelemetry/sdk/trace/tracer.h create mode 100644 sdk/src/opentelemetry/trace/span.cc create mode 100644 sdk/src/opentelemetry/trace/tracer.cc diff --git a/api/include/opentelemetry/trace/tracer_provider.h b/api/include/opentelemetry/trace/tracer_provider.h index 65d297c75a..29c02c1aa5 100644 --- a/api/include/opentelemetry/trace/tracer_provider.h +++ b/api/include/opentelemetry/trace/tracer_provider.h @@ -1,8 +1,7 @@ #pragma once #include "opentelemetry/nostd/string_view.h" - -#include "./tracer.h" +#include "opentelemetry/trace/tracer.h" using opentelemetry::nostd::string_view; diff --git a/api/src/opentelemetry/global/provider.cc b/api/src/opentelemetry/global/provider.cc index 7f39718e36..d4cd4e12f9 100644 --- a/api/src/opentelemetry/global/provider.cc +++ b/api/src/opentelemetry/global/provider.cc @@ -1,19 +1,27 @@ #include "opentelemetry/global/provider.h" +#include "opentelemetry/trace/noop.h" using opentelemetry::trace::Tracer; using opentelemetry::trace::TracerProvider; +using opentelemetry::trace::NoopTracer; namespace opentelemetry { namespace global { -class DefaultTracerProvider : public TracerProvider + +class DefaultTracerProvider final : public TracerProvider { - Tracer *const GetTracer(string_view library_name, string_view library_version = "") override +public: + explicit DefaultTracerProvider() : tracer_{new NoopTracer()} + {} + + NoopTracer *const GetTracer(string_view library_name, string_view library_version = "") override { - // TODO: return a no-op trace - return nullptr; + return tracer_; } +private: + NoopTracer *const tracer_; }; TracerProvider *Provider::tracer_provider_ = nullptr; diff --git a/api/src/opentelemetry/trace/tracer.cc b/api/src/opentelemetry/trace/tracer.cc deleted file mode 100644 index c0102e32af..0000000000 --- a/api/src/opentelemetry/trace/tracer.cc +++ /dev/null @@ -1,10 +0,0 @@ -#include "opentelemetry/trace/tracer.h" - -namespace opentelemetry -{ -namespace trace -{ -Tracer::Tracer(const string_view &name, const string_view &version) : name(name), version(version) -{} -} // namespace trace -} // namespace opentelemetry diff --git a/sdk/include/opentelemetry/sdk/trace/span.h b/sdk/include/opentelemetry/sdk/trace/span.h new file mode 100644 index 0000000000..5d3198c162 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/trace/span.h @@ -0,0 +1,26 @@ +#pragma once + +#include + +#include "opentelemetry/trace/span.h" + +using opentelemetry::trace::Tracer; + +namespace opentelemetry +{ +namespace sdk +{ +namespace trace +{ +class Span final : public opentelemetry::trace::Span +{ +public: + explicit Span(const std::shared_ptr &tracer) noexcept : tracer_{tracer} {} + Tracer &tracer() const noexcept override; + +private: + std::shared_ptr tracer_; +}; +} // namespace trace +} // namespace sdk +} // namespace opentelemetry diff --git a/sdk/include/opentelemetry/sdk/trace/tracer.h b/sdk/include/opentelemetry/sdk/trace/tracer.h new file mode 100644 index 0000000000..2c001c3e9f --- /dev/null +++ b/sdk/include/opentelemetry/sdk/trace/tracer.h @@ -0,0 +1,23 @@ +#pragma once + +#include "opentelemetry/trace/tracer.h" + +namespace opentelemetry +{ +namespace sdk +{ +namespace trace +{ +class Tracer : public opentelemetry::trace::Tracer +{ +public: + explicit Tracer(nostd::string_view name, nostd::string_view version); + nostd::unique_ptr StartSpan(nostd::string_view name, + const opentelemetry::trace::StartSpanOptions &options = {}) noexcept override; +private: + const nostd::string_view &name_; + const nostd::string_view &version_; +}; +} // namespace trace +} // namespace sdk +} // namespace opentelemetry diff --git a/sdk/include/opentelemetry/sdk/trace/tracer_provider.h b/sdk/include/opentelemetry/sdk/trace/tracer_provider.h index 99bcfeff8d..593c3c9573 100644 --- a/sdk/include/opentelemetry/sdk/trace/tracer_provider.h +++ b/sdk/include/opentelemetry/sdk/trace/tracer_provider.h @@ -4,9 +4,10 @@ #include #include "opentelemetry/trace/tracer_provider.h" +#include "opentelemetry/sdk/trace/tracer.h" using opentelemetry::nostd::string_view; -using opentelemetry::trace::Tracer; +using opentelemetry::sdk::trace::Tracer; namespace opentelemetry { diff --git a/sdk/src/opentelemetry/trace/span.cc b/sdk/src/opentelemetry/trace/span.cc new file mode 100644 index 0000000000..8650735fd1 --- /dev/null +++ b/sdk/src/opentelemetry/trace/span.cc @@ -0,0 +1,12 @@ +#include "opentelemetry/sdk/trace/span.h" + +namespace opentelemetry +{ +namespace sdk +{ +namespace trace +{ +Tracer &Span::tracer() const noexcept { return *tracer_; } +} // namespace trace +} // namespace sdk +} // namespace opentelemetry diff --git a/sdk/src/opentelemetry/trace/tracer.cc b/sdk/src/opentelemetry/trace/tracer.cc new file mode 100644 index 0000000000..d687d23a88 --- /dev/null +++ b/sdk/src/opentelemetry/trace/tracer.cc @@ -0,0 +1,18 @@ +#include "opentelemetry/sdk/trace/tracer.h" + +namespace opentelemetry +{ +namespace sdk +{ +namespace trace +{ +Tracer::Tracer(nostd::string_view name, nostd::string_view version) : name_{name}, version_{version} {} +nostd::unique_ptr Tracer::StartSpan(nostd::string_view name, + const opentelemetry::trace::StartSpanOptions & options) noexcept +{ + // TODO: make a span! + return nullptr; +} +} // namespace trace +} // namespace sdk +} // namespace opentelemetry From a3619afaadfdd0e697a0e507c85e8b2d955ef1dc Mon Sep 17 00:00:00 2001 From: bryan Date: Wed, 15 Jan 2020 16:25:45 -0800 Subject: [PATCH 24/47] formatting --- api/src/opentelemetry/global/provider.cc | 6 +++--- sdk/include/opentelemetry/sdk/trace/tracer.h | 6 ++++-- sdk/include/opentelemetry/sdk/trace/tracer_provider.h | 2 +- sdk/src/opentelemetry/trace/span.cc | 5 ++++- sdk/src/opentelemetry/trace/tracer.cc | 8 +++++--- 5 files changed, 17 insertions(+), 10 deletions(-) diff --git a/api/src/opentelemetry/global/provider.cc b/api/src/opentelemetry/global/provider.cc index d4cd4e12f9..27a3f19b6c 100644 --- a/api/src/opentelemetry/global/provider.cc +++ b/api/src/opentelemetry/global/provider.cc @@ -1,9 +1,9 @@ #include "opentelemetry/global/provider.h" #include "opentelemetry/trace/noop.h" +using opentelemetry::trace::NoopTracer; using opentelemetry::trace::Tracer; using opentelemetry::trace::TracerProvider; -using opentelemetry::trace::NoopTracer; namespace opentelemetry { @@ -13,13 +13,13 @@ namespace global class DefaultTracerProvider final : public TracerProvider { public: - explicit DefaultTracerProvider() : tracer_{new NoopTracer()} - {} + explicit DefaultTracerProvider() : tracer_{new NoopTracer()} {} NoopTracer *const GetTracer(string_view library_name, string_view library_version = "") override { return tracer_; } + private: NoopTracer *const tracer_; }; diff --git a/sdk/include/opentelemetry/sdk/trace/tracer.h b/sdk/include/opentelemetry/sdk/trace/tracer.h index 2c001c3e9f..73b6eecfd3 100644 --- a/sdk/include/opentelemetry/sdk/trace/tracer.h +++ b/sdk/include/opentelemetry/sdk/trace/tracer.h @@ -12,8 +12,10 @@ class Tracer : public opentelemetry::trace::Tracer { public: explicit Tracer(nostd::string_view name, nostd::string_view version); - nostd::unique_ptr StartSpan(nostd::string_view name, - const opentelemetry::trace::StartSpanOptions &options = {}) noexcept override; + nostd::unique_ptr StartSpan( + nostd::string_view name, + const opentelemetry::trace::StartSpanOptions &options = {}) noexcept override; + private: const nostd::string_view &name_; const nostd::string_view &version_; diff --git a/sdk/include/opentelemetry/sdk/trace/tracer_provider.h b/sdk/include/opentelemetry/sdk/trace/tracer_provider.h index 593c3c9573..54b27219f7 100644 --- a/sdk/include/opentelemetry/sdk/trace/tracer_provider.h +++ b/sdk/include/opentelemetry/sdk/trace/tracer_provider.h @@ -3,8 +3,8 @@ #include #include -#include "opentelemetry/trace/tracer_provider.h" #include "opentelemetry/sdk/trace/tracer.h" +#include "opentelemetry/trace/tracer_provider.h" using opentelemetry::nostd::string_view; using opentelemetry::sdk::trace::Tracer; diff --git a/sdk/src/opentelemetry/trace/span.cc b/sdk/src/opentelemetry/trace/span.cc index 8650735fd1..414db868be 100644 --- a/sdk/src/opentelemetry/trace/span.cc +++ b/sdk/src/opentelemetry/trace/span.cc @@ -6,7 +6,10 @@ namespace sdk { namespace trace { -Tracer &Span::tracer() const noexcept { return *tracer_; } +Tracer &Span::tracer() const noexcept +{ + return *tracer_; +} } // namespace trace } // namespace sdk } // namespace opentelemetry diff --git a/sdk/src/opentelemetry/trace/tracer.cc b/sdk/src/opentelemetry/trace/tracer.cc index d687d23a88..582983f53e 100644 --- a/sdk/src/opentelemetry/trace/tracer.cc +++ b/sdk/src/opentelemetry/trace/tracer.cc @@ -6,9 +6,11 @@ namespace sdk { namespace trace { -Tracer::Tracer(nostd::string_view name, nostd::string_view version) : name_{name}, version_{version} {} -nostd::unique_ptr Tracer::StartSpan(nostd::string_view name, - const opentelemetry::trace::StartSpanOptions & options) noexcept +Tracer::Tracer(nostd::string_view name, nostd::string_view version) : name_{name}, version_{version} +{} +nostd::unique_ptr Tracer::StartSpan( + nostd::string_view name, + const opentelemetry::trace::StartSpanOptions &options) noexcept { // TODO: make a span! return nullptr; From 5d22716a7a9275ae57317dcdb6ed0816e3179cdf Mon Sep 17 00:00:00 2001 From: bryan Date: Wed, 15 Jan 2020 16:54:45 -0800 Subject: [PATCH 25/47] plugging leaks --- api/include/opentelemetry/global/provider.h | 1 + api/src/opentelemetry/global/provider.cc | 9 +++++++++ api/test/global/global_test.cc | 2 ++ sdk/include/opentelemetry/sdk/trace/tracer.h | 4 ++-- sdk/test/trace/tracer_provider_test.cc | 8 ++++---- 5 files changed, 18 insertions(+), 6 deletions(-) diff --git a/api/include/opentelemetry/global/provider.h b/api/include/opentelemetry/global/provider.h index 991ab10e48..b553515dbc 100644 --- a/api/include/opentelemetry/global/provider.h +++ b/api/include/opentelemetry/global/provider.h @@ -11,6 +11,7 @@ namespace global class Provider { public: + ~Provider(); static TracerProvider *GetTracerProvider(); static void SetTracerProvider(TracerProvider *); diff --git a/api/src/opentelemetry/global/provider.cc b/api/src/opentelemetry/global/provider.cc index 27a3f19b6c..e5858e254b 100644 --- a/api/src/opentelemetry/global/provider.cc +++ b/api/src/opentelemetry/global/provider.cc @@ -14,6 +14,7 @@ class DefaultTracerProvider final : public TracerProvider { public: explicit DefaultTracerProvider() : tracer_{new NoopTracer()} {} + ~DefaultTracerProvider() { delete tracer_; } NoopTracer *const GetTracer(string_view library_name, string_view library_version = "") override { @@ -26,6 +27,14 @@ class DefaultTracerProvider final : public TracerProvider TracerProvider *Provider::tracer_provider_ = nullptr; +Provider::~Provider() +{ + if (tracer_provider_) + { + delete tracer_provider_; + } +} + TracerProvider *Provider::GetTracerProvider() { if (!Provider::tracer_provider_) diff --git a/api/test/global/global_test.cc b/api/test/global/global_test.cc index 129777a4fd..8df6d1a587 100644 --- a/api/test/global/global_test.cc +++ b/api/test/global/global_test.cc @@ -17,6 +17,7 @@ TEST(Provider, GetTracerProviderDefault) { auto tf = Provider::GetTracerProvider(); ASSERT_NE(tf, nullptr); + Provider::SetTracerProvider(nullptr); } TEST(Provider, SetTracerProvider) @@ -24,4 +25,5 @@ TEST(Provider, SetTracerProvider) auto tf = new TestProvider(); Provider::SetTracerProvider(tf); ASSERT_EQ(Provider::GetTracerProvider(), tf); + Provider::SetTracerProvider(nullptr); } diff --git a/sdk/include/opentelemetry/sdk/trace/tracer.h b/sdk/include/opentelemetry/sdk/trace/tracer.h index 73b6eecfd3..cf57c768dc 100644 --- a/sdk/include/opentelemetry/sdk/trace/tracer.h +++ b/sdk/include/opentelemetry/sdk/trace/tracer.h @@ -17,8 +17,8 @@ class Tracer : public opentelemetry::trace::Tracer const opentelemetry::trace::StartSpanOptions &options = {}) noexcept override; private: - const nostd::string_view &name_; - const nostd::string_view &version_; + nostd::string_view name_; + nostd::string_view version_; }; } // namespace trace } // namespace sdk diff --git a/sdk/test/trace/tracer_provider_test.cc b/sdk/test/trace/tracer_provider_test.cc index 89dd7f1595..1d9e259b59 100644 --- a/sdk/test/trace/tracer_provider_test.cc +++ b/sdk/test/trace/tracer_provider_test.cc @@ -6,10 +6,10 @@ using opentelemetry::sdk::trace::TracerProvider; TEST(TracerProvider, GetTracer) { - auto tf = new TracerProvider(); - auto t1 = tf->GetTracer("test"); - auto t2 = tf->GetTracer("test"); - auto t3 = tf->GetTracer("different"); + auto tf = TracerProvider(); + auto t1 = tf.GetTracer("test"); + auto t2 = tf.GetTracer("test"); + auto t3 = tf.GetTracer("different"); ASSERT_NE(t1, nullptr); ASSERT_NE(t2, nullptr); ASSERT_NE(t3, nullptr); From bb6ea584212334a8869be3273e509db86814b70b Mon Sep 17 00:00:00 2001 From: bryan Date: Thu, 16 Jan 2020 13:26:11 -0800 Subject: [PATCH 26/47] make global provider header only --- api/BUILD | 1 - api/include/opentelemetry/global/provider.h | 31 +++++++++-- api/src/opentelemetry/global/provider.cc | 57 --------------------- 3 files changed, 27 insertions(+), 62 deletions(-) delete mode 100644 api/src/opentelemetry/global/provider.cc diff --git a/api/BUILD b/api/BUILD index f0803ba528..957ac227bd 100644 --- a/api/BUILD +++ b/api/BUILD @@ -17,6 +17,5 @@ package(default_visibility = ["//visibility:public"]) cc_library( name = "api", hdrs = glob(["include/**/*.h"]), - srcs = glob(["src/**/*.cc"]), strip_include_prefix = "include", ) diff --git a/api/include/opentelemetry/global/provider.h b/api/include/opentelemetry/global/provider.h index b553515dbc..d103b2cc9f 100644 --- a/api/include/opentelemetry/global/provider.h +++ b/api/include/opentelemetry/global/provider.h @@ -1,22 +1,45 @@ #pragma once +#include + +#include "opentelemetry/trace/noop.h" #include "opentelemetry/trace/tracer_provider.h" +using opentelemetry::trace::NoopTracer; using opentelemetry::trace::TracerProvider; namespace opentelemetry { namespace global { + +class DefaultTracerProvider final : public TracerProvider +{ +public: + explicit DefaultTracerProvider() : tracer_{new NoopTracer()} {} + ~DefaultTracerProvider() { delete tracer_; } + + NoopTracer *const GetTracer(string_view library_name, string_view library_version = "") override + { + return tracer_; + } + +private: + NoopTracer *const tracer_; +}; + class Provider { public: - ~Provider(); - static TracerProvider *GetTracerProvider(); - static void SetTracerProvider(TracerProvider *); + static TracerProvider *GetTracerProvider() { return getPtrRef().get(); } + static void SetTracerProvider(TracerProvider *tp) { getPtrRef().reset(tp); } private: - static TracerProvider *tracer_provider_; + static std::unique_ptr &getPtrRef() + { + static std::unique_ptr tracePtr(new DefaultTracerProvider()); + return tracePtr; + } }; } // namespace global } // namespace opentelemetry diff --git a/api/src/opentelemetry/global/provider.cc b/api/src/opentelemetry/global/provider.cc deleted file mode 100644 index e5858e254b..0000000000 --- a/api/src/opentelemetry/global/provider.cc +++ /dev/null @@ -1,57 +0,0 @@ -#include "opentelemetry/global/provider.h" -#include "opentelemetry/trace/noop.h" - -using opentelemetry::trace::NoopTracer; -using opentelemetry::trace::Tracer; -using opentelemetry::trace::TracerProvider; - -namespace opentelemetry -{ -namespace global -{ - -class DefaultTracerProvider final : public TracerProvider -{ -public: - explicit DefaultTracerProvider() : tracer_{new NoopTracer()} {} - ~DefaultTracerProvider() { delete tracer_; } - - NoopTracer *const GetTracer(string_view library_name, string_view library_version = "") override - { - return tracer_; - } - -private: - NoopTracer *const tracer_; -}; - -TracerProvider *Provider::tracer_provider_ = nullptr; - -Provider::~Provider() -{ - if (tracer_provider_) - { - delete tracer_provider_; - } -} - -TracerProvider *Provider::GetTracerProvider() -{ - if (!Provider::tracer_provider_) - { - Provider::tracer_provider_ = new DefaultTracerProvider(); - } - return Provider::tracer_provider_; -} - -void Provider::SetTracerProvider(TracerProvider *tf) -{ - if (Provider::tracer_provider_) - { - delete Provider::tracer_provider_; - } - - Provider::tracer_provider_ = tf; -} -} // namespace global -} // namespace opentelemetry From 69043721b253fbe34a9c308109a8a19239b87c63 Mon Sep 17 00:00:00 2001 From: bryan Date: Thu, 16 Jan 2020 20:14:06 -0800 Subject: [PATCH 27/47] use nostd::unique_ptr --- api/include/opentelemetry/global/provider.h | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/api/include/opentelemetry/global/provider.h b/api/include/opentelemetry/global/provider.h index d103b2cc9f..91f04405ce 100644 --- a/api/include/opentelemetry/global/provider.h +++ b/api/include/opentelemetry/global/provider.h @@ -1,9 +1,8 @@ #pragma once -#include - #include "opentelemetry/trace/noop.h" #include "opentelemetry/trace/tracer_provider.h" +#include "opentelemetry/nostd/unique_ptr.h" using opentelemetry::trace::NoopTracer; using opentelemetry::trace::TracerProvider; @@ -35,9 +34,9 @@ class Provider static void SetTracerProvider(TracerProvider *tp) { getPtrRef().reset(tp); } private: - static std::unique_ptr &getPtrRef() + static nostd::unique_ptr &getPtrRef() { - static std::unique_ptr tracePtr(new DefaultTracerProvider()); + static nostd::unique_ptr tracePtr(new DefaultTracerProvider()); return tracePtr; } }; From 1f1509d9891bcf34236d1eec4a1436cddf099e97 Mon Sep 17 00:00:00 2001 From: bryan Date: Tue, 21 Jan 2020 08:39:34 -0800 Subject: [PATCH 28/47] use a raw pointer instead of a smart pointer for tracking the current tracer provider --- api/include/opentelemetry/global/provider.h | 31 +++++++++++++++++---- api/test/global/global_test.cc | 2 -- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/api/include/opentelemetry/global/provider.h b/api/include/opentelemetry/global/provider.h index 91f04405ce..11615b2acd 100644 --- a/api/include/opentelemetry/global/provider.h +++ b/api/include/opentelemetry/global/provider.h @@ -30,14 +30,35 @@ class DefaultTracerProvider final : public TracerProvider class Provider { public: - static TracerProvider *GetTracerProvider() { return getPtrRef().get(); } - static void SetTracerProvider(TracerProvider *tp) { getPtrRef().reset(tp); } + static TracerProvider *GetTracerProvider() + { + auto ref_ptr = GetRefPtr(); + auto ref = *ref_ptr; + if (!ref) + { + ref = new DefaultTracerProvider(); + *ref_ptr = ref; + } + + return ref; + } + static void SetTracerProvider(TracerProvider *tp) + { + auto ref_ptr = GetRefPtr(); + auto ref = *ref_ptr; + if (ref) + { + delete ref; + } + + *ref_ptr = tp; + } private: - static nostd::unique_ptr &getPtrRef() + static TracerProvider **GetRefPtr() { - static nostd::unique_ptr tracePtr(new DefaultTracerProvider()); - return tracePtr; + static TracerProvider *tp = nullptr; + return &tp; } }; } // namespace global diff --git a/api/test/global/global_test.cc b/api/test/global/global_test.cc index 8df6d1a587..129777a4fd 100644 --- a/api/test/global/global_test.cc +++ b/api/test/global/global_test.cc @@ -17,7 +17,6 @@ TEST(Provider, GetTracerProviderDefault) { auto tf = Provider::GetTracerProvider(); ASSERT_NE(tf, nullptr); - Provider::SetTracerProvider(nullptr); } TEST(Provider, SetTracerProvider) @@ -25,5 +24,4 @@ TEST(Provider, SetTracerProvider) auto tf = new TestProvider(); Provider::SetTracerProvider(tf); ASSERT_EQ(Provider::GetTracerProvider(), tf); - Provider::SetTracerProvider(nullptr); } From cb68ef32a3878b8b03c6f4bcf20cd804d59c0519 Mon Sep 17 00:00:00 2001 From: bryan Date: Tue, 21 Jan 2020 10:11:44 -0800 Subject: [PATCH 29/47] axe global namespace, additional newlines --- api/include/opentelemetry/global/provider.h | 3 --- api/test/global/global_test.cc | 2 +- sdk/src/opentelemetry/trace/tracer.cc | 1 + 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/api/include/opentelemetry/global/provider.h b/api/include/opentelemetry/global/provider.h index 11615b2acd..3ea9de62e4 100644 --- a/api/include/opentelemetry/global/provider.h +++ b/api/include/opentelemetry/global/provider.h @@ -9,8 +9,6 @@ using opentelemetry::trace::TracerProvider; namespace opentelemetry { -namespace global -{ class DefaultTracerProvider final : public TracerProvider { @@ -61,5 +59,4 @@ class Provider return &tp; } }; -} // namespace global } // namespace opentelemetry diff --git a/api/test/global/global_test.cc b/api/test/global/global_test.cc index 129777a4fd..4e2acb2760 100644 --- a/api/test/global/global_test.cc +++ b/api/test/global/global_test.cc @@ -2,7 +2,7 @@ #include -using opentelemetry::global::Provider; +using opentelemetry::Provider; using opentelemetry::trace::Tracer; class TestProvider : public opentelemetry::trace::TracerProvider diff --git a/sdk/src/opentelemetry/trace/tracer.cc b/sdk/src/opentelemetry/trace/tracer.cc index 582983f53e..4a651800d7 100644 --- a/sdk/src/opentelemetry/trace/tracer.cc +++ b/sdk/src/opentelemetry/trace/tracer.cc @@ -8,6 +8,7 @@ namespace trace { Tracer::Tracer(nostd::string_view name, nostd::string_view version) : name_{name}, version_{version} {} + nostd::unique_ptr Tracer::StartSpan( nostd::string_view name, const opentelemetry::trace::StartSpanOptions &options) noexcept From c5f6750179e49995924048f3d0bdc235053ce994 Mon Sep 17 00:00:00 2001 From: bryan Date: Thu, 23 Jan 2020 11:42:41 -0800 Subject: [PATCH 30/47] lock up get and set methods --- api/include/opentelemetry/global/provider.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/api/include/opentelemetry/global/provider.h b/api/include/opentelemetry/global/provider.h index 3ea9de62e4..85944c6414 100644 --- a/api/include/opentelemetry/global/provider.h +++ b/api/include/opentelemetry/global/provider.h @@ -1,5 +1,7 @@ #pragma once +#include + #include "opentelemetry/trace/noop.h" #include "opentelemetry/trace/tracer_provider.h" #include "opentelemetry/nostd/unique_ptr.h" @@ -7,6 +9,8 @@ using opentelemetry::trace::NoopTracer; using opentelemetry::trace::TracerProvider; +std::mutex provider_mutex; + namespace opentelemetry { @@ -30,6 +34,7 @@ class Provider public: static TracerProvider *GetTracerProvider() { + std::lock_guard l(provider_mutex); auto ref_ptr = GetRefPtr(); auto ref = *ref_ptr; if (!ref) @@ -43,6 +48,7 @@ class Provider static void SetTracerProvider(TracerProvider *tp) { + std::lock_guard l(provider_mutex); auto ref_ptr = GetRefPtr(); auto ref = *ref_ptr; if (ref) From b75025c10655031d55d1168bd11151d0fcea35d8 Mon Sep 17 00:00:00 2001 From: bryan Date: Thu, 23 Jan 2020 13:25:22 -0800 Subject: [PATCH 31/47] move the global tracer provider code into the trace directory --- .../{global/provider.h => trace/global_provider.h} | 0 api/test/global/BUILD | 10 ---------- .../global_test.cc => trace/global_provider_test.cc} | 2 +- 3 files changed, 1 insertion(+), 11 deletions(-) rename api/include/opentelemetry/{global/provider.h => trace/global_provider.h} (100%) delete mode 100644 api/test/global/BUILD rename api/test/{global/global_test.cc => trace/global_provider_test.cc} (91%) diff --git a/api/include/opentelemetry/global/provider.h b/api/include/opentelemetry/trace/global_provider.h similarity index 100% rename from api/include/opentelemetry/global/provider.h rename to api/include/opentelemetry/trace/global_provider.h diff --git a/api/test/global/BUILD b/api/test/global/BUILD deleted file mode 100644 index 33eb276bf2..0000000000 --- a/api/test/global/BUILD +++ /dev/null @@ -1,10 +0,0 @@ -cc_test( - name = "global", - srcs = [ - "global_test.cc", - ], - deps = [ - "//api", - "@com_google_googletest//:gtest_main", - ], -) diff --git a/api/test/global/global_test.cc b/api/test/trace/global_provider_test.cc similarity index 91% rename from api/test/global/global_test.cc rename to api/test/trace/global_provider_test.cc index 4e2acb2760..45263ff059 100644 --- a/api/test/global/global_test.cc +++ b/api/test/trace/global_provider_test.cc @@ -1,4 +1,4 @@ -#include "opentelemetry/global/provider.h" +#include "opentelemetry/trace/global_provider.h" #include From 3e02447ad19ddae9f77f06460e611f8b1fcbdf8a Mon Sep 17 00:00:00 2001 From: bryan Date: Mon, 27 Jan 2020 10:26:12 -0800 Subject: [PATCH 32/47] axe the mutex, atomic is my new best friend --- .../opentelemetry/trace/global_provider.h | 52 +++++++------------ api/test/trace/global_provider_test.cc | 3 +- 2 files changed, 22 insertions(+), 33 deletions(-) diff --git a/api/include/opentelemetry/trace/global_provider.h b/api/include/opentelemetry/trace/global_provider.h index 85944c6414..868f30967b 100644 --- a/api/include/opentelemetry/trace/global_provider.h +++ b/api/include/opentelemetry/trace/global_provider.h @@ -1,68 +1,56 @@ #pragma once -#include +#include +#include "opentelemetry/nostd/unique_ptr.h" #include "opentelemetry/trace/noop.h" #include "opentelemetry/trace/tracer_provider.h" -#include "opentelemetry/nostd/unique_ptr.h" using opentelemetry::trace::NoopTracer; using opentelemetry::trace::TracerProvider; -std::mutex provider_mutex; - namespace opentelemetry { +namespace trace +{ class DefaultTracerProvider final : public TracerProvider { public: - explicit DefaultTracerProvider() : tracer_{new NoopTracer()} {} - ~DefaultTracerProvider() { delete tracer_; } - NoopTracer *const GetTracer(string_view library_name, string_view library_version = "") override { - return tracer_; + return tracer_.get(); } private: - NoopTracer *const tracer_; + DefaultTracerProvider() : tracer_{nostd::unique_ptr(new NoopTracer)} {} + nostd::unique_ptr tracer_; + + friend class Provider; }; class Provider { public: - static TracerProvider *GetTracerProvider() - { - std::lock_guard l(provider_mutex); - auto ref_ptr = GetRefPtr(); - auto ref = *ref_ptr; - if (!ref) - { - ref = new DefaultTracerProvider(); - *ref_ptr = ref; - } - - return ref; - } +public: + static TracerProvider *GetTracerProvider() { return Ptr()->load(std::memory_order_acquire); } static void SetTracerProvider(TracerProvider *tp) { - std::lock_guard l(provider_mutex); - auto ref_ptr = GetRefPtr(); - auto ref = *ref_ptr; - if (ref) + if (auto old = Ptr()->load(std::memory_order_acquire)) { - delete ref; + delete old; } - - *ref_ptr = tp; + Ptr()->store(tp, std::memory_order_release); } + private: - static TracerProvider **GetRefPtr() + static std::atomic *Ptr() { - static TracerProvider *tp = nullptr; - return &tp; + static std::atomic *singleton = + new std::atomic(new DefaultTracerProvider); + return singleton; } }; +} // namespace trace } // namespace opentelemetry diff --git a/api/test/trace/global_provider_test.cc b/api/test/trace/global_provider_test.cc index 45263ff059..f48f12c39a 100644 --- a/api/test/trace/global_provider_test.cc +++ b/api/test/trace/global_provider_test.cc @@ -2,7 +2,7 @@ #include -using opentelemetry::Provider; +using opentelemetry::trace::Provider; using opentelemetry::trace::Tracer; class TestProvider : public opentelemetry::trace::TracerProvider @@ -24,4 +24,5 @@ TEST(Provider, SetTracerProvider) auto tf = new TestProvider(); Provider::SetTracerProvider(tf); ASSERT_EQ(Provider::GetTracerProvider(), tf); + Provider::SetTracerProvider(nullptr); } From 99674d348880a8c78cf99aa80d8cf796ca134e46 Mon Sep 17 00:00:00 2001 From: bryan Date: Mon, 27 Jan 2020 14:53:19 -0800 Subject: [PATCH 33/47] no using in header files --- .../opentelemetry/trace/global_provider.h | 29 +++++++++++-------- .../opentelemetry/trace/tracer_provider.h | 7 ++--- api/test/trace/global_provider_test.cc | 3 +- .../opentelemetry/trace/tracer_provider.cc | 3 +- 4 files changed, 24 insertions(+), 18 deletions(-) diff --git a/api/include/opentelemetry/trace/global_provider.h b/api/include/opentelemetry/trace/global_provider.h index 868f30967b..958cb8ad07 100644 --- a/api/include/opentelemetry/trace/global_provider.h +++ b/api/include/opentelemetry/trace/global_provider.h @@ -6,25 +6,27 @@ #include "opentelemetry/trace/noop.h" #include "opentelemetry/trace/tracer_provider.h" -using opentelemetry::trace::NoopTracer; -using opentelemetry::trace::TracerProvider; - namespace opentelemetry { namespace trace { -class DefaultTracerProvider final : public TracerProvider +class DefaultTracerProvider final : public opentelemetry::trace::TracerProvider { public: - NoopTracer *const GetTracer(string_view library_name, string_view library_version = "") override + opentelemetry::trace::NoopTracer *const GetTracer( + nostd::string_view library_name, + nostd::string_view library_version = "") override { return tracer_.get(); } private: - DefaultTracerProvider() : tracer_{nostd::unique_ptr(new NoopTracer)} {} - nostd::unique_ptr tracer_; + DefaultTracerProvider() + : tracer_{nostd::unique_ptr( + new opentelemetry::trace::NoopTracer)} + {} + nostd::unique_ptr tracer_; friend class Provider; }; @@ -32,8 +34,10 @@ class DefaultTracerProvider final : public TracerProvider class Provider { public: -public: - static TracerProvider *GetTracerProvider() { return Ptr()->load(std::memory_order_acquire); } + static opentelemetry::trace::TracerProvider *GetTracerProvider() + { + return Ptr()->load(std::memory_order_acquire); + } static void SetTracerProvider(TracerProvider *tp) { @@ -45,12 +49,13 @@ class Provider } private: - static std::atomic *Ptr() + static std::atomic *Ptr() { - static std::atomic *singleton = - new std::atomic(new DefaultTracerProvider); + static std::atomic *singleton = + new std::atomic(new DefaultTracerProvider); return singleton; } }; + } // namespace trace } // namespace opentelemetry diff --git a/api/include/opentelemetry/trace/tracer_provider.h b/api/include/opentelemetry/trace/tracer_provider.h index 29c02c1aa5..4b4c8d622a 100644 --- a/api/include/opentelemetry/trace/tracer_provider.h +++ b/api/include/opentelemetry/trace/tracer_provider.h @@ -3,8 +3,6 @@ #include "opentelemetry/nostd/string_view.h" #include "opentelemetry/trace/tracer.h" -using opentelemetry::nostd::string_view; - namespace opentelemetry { namespace trace @@ -12,8 +10,9 @@ namespace trace class TracerProvider { public: - virtual ~TracerProvider() = default; - virtual Tracer *const GetTracer(string_view library_name, string_view library_version) = 0; + virtual ~TracerProvider() = default; + virtual Tracer *const GetTracer(nostd::string_view library_name, + nostd::string_view library_version) = 0; }; } // namespace trace } // namespace opentelemetry diff --git a/api/test/trace/global_provider_test.cc b/api/test/trace/global_provider_test.cc index f48f12c39a..a5fb4e277b 100644 --- a/api/test/trace/global_provider_test.cc +++ b/api/test/trace/global_provider_test.cc @@ -7,7 +7,8 @@ using opentelemetry::trace::Tracer; class TestProvider : public opentelemetry::trace::TracerProvider { - Tracer *const GetTracer(string_view library_name, string_view library_version) override + Tracer *const GetTracer(opentelemetry::nostd::string_view library_name, + opentelemetry::nostd::string_view library_version) override { return nullptr; } diff --git a/sdk/src/opentelemetry/trace/tracer_provider.cc b/sdk/src/opentelemetry/trace/tracer_provider.cc index 5522f22290..6ee0a85f8d 100644 --- a/sdk/src/opentelemetry/trace/tracer_provider.cc +++ b/sdk/src/opentelemetry/trace/tracer_provider.cc @@ -6,7 +6,8 @@ namespace sdk { namespace trace { -Tracer *const TracerProvider::GetTracer(string_view library_name, string_view library_version) +Tracer *const TracerProvider::GetTracer(nostd::string_view library_name, + nostd::string_view library_version) { tracers_.emplace_back(new Tracer(library_name, library_version)); return tracers_.back().get(); From 1e5404b72b65eb2fc7bd2bf36be028441407b009 Mon Sep 17 00:00:00 2001 From: bryan Date: Mon, 27 Jan 2020 21:36:57 -0800 Subject: [PATCH 34/47] use exchange to swap out the old provider --- api/include/opentelemetry/trace/global_provider.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/api/include/opentelemetry/trace/global_provider.h b/api/include/opentelemetry/trace/global_provider.h index 958cb8ad07..819fd07da6 100644 --- a/api/include/opentelemetry/trace/global_provider.h +++ b/api/include/opentelemetry/trace/global_provider.h @@ -41,11 +41,10 @@ class Provider static void SetTracerProvider(TracerProvider *tp) { - if (auto old = Ptr()->load(std::memory_order_acquire)) + if (auto old = Ptr()->exchange(tp, std::memory_order_release)) { delete old; } - Ptr()->store(tp, std::memory_order_release); } private: From 3412ebdc49b83765c37b26a3cfc8efd07f47347c Mon Sep 17 00:00:00 2001 From: bryan Date: Tue, 28 Jan 2020 16:33:28 -0800 Subject: [PATCH 35/47] added tracer options to tracer construction --- api/include/opentelemetry/trace/global_provider.h | 3 ++- api/include/opentelemetry/trace/tracer.h | 3 +++ api/include/opentelemetry/trace/tracer_provider.h | 5 +++-- api/test/trace/global_provider_test.cc | 3 ++- sdk/include/opentelemetry/sdk/trace/tracer.h | 4 +++- sdk/include/opentelemetry/sdk/trace/tracer_provider.h | 9 ++++----- sdk/src/opentelemetry/trace/tracer.cc | 5 ++++- sdk/src/opentelemetry/trace/tracer_provider.cc | 5 +++-- 8 files changed, 24 insertions(+), 13 deletions(-) diff --git a/api/include/opentelemetry/trace/global_provider.h b/api/include/opentelemetry/trace/global_provider.h index 819fd07da6..cfb1c07377 100644 --- a/api/include/opentelemetry/trace/global_provider.h +++ b/api/include/opentelemetry/trace/global_provider.h @@ -16,7 +16,8 @@ class DefaultTracerProvider final : public opentelemetry::trace::TracerProvider public: opentelemetry::trace::NoopTracer *const GetTracer( nostd::string_view library_name, - nostd::string_view library_version = "") override + nostd::string_view library_version = "", + const TracerOptions &tracer_options = {}) override { return tracer_.get(); } diff --git a/api/include/opentelemetry/trace/tracer.h b/api/include/opentelemetry/trace/tracer.h index 603d24e2bb..dc115163ba 100644 --- a/api/include/opentelemetry/trace/tracer.h +++ b/api/include/opentelemetry/trace/tracer.h @@ -8,6 +8,9 @@ OPENTELEMETRY_BEGIN_NAMESPACE namespace trace { +struct TracerOptions +{}; + /** * Handles span creation and in-process context propagation. * diff --git a/api/include/opentelemetry/trace/tracer_provider.h b/api/include/opentelemetry/trace/tracer_provider.h index 4b4c8d622a..6d43e109d8 100644 --- a/api/include/opentelemetry/trace/tracer_provider.h +++ b/api/include/opentelemetry/trace/tracer_provider.h @@ -10,9 +10,10 @@ namespace trace class TracerProvider { public: - virtual ~TracerProvider() = default; + virtual ~TracerProvider() = default; virtual Tracer *const GetTracer(nostd::string_view library_name, - nostd::string_view library_version) = 0; + nostd::string_view library_version, + const TracerOptions &tracer_options = {}) = 0; }; } // namespace trace } // namespace opentelemetry diff --git a/api/test/trace/global_provider_test.cc b/api/test/trace/global_provider_test.cc index a5fb4e277b..5ef6201bc0 100644 --- a/api/test/trace/global_provider_test.cc +++ b/api/test/trace/global_provider_test.cc @@ -8,7 +8,8 @@ using opentelemetry::trace::Tracer; class TestProvider : public opentelemetry::trace::TracerProvider { Tracer *const GetTracer(opentelemetry::nostd::string_view library_name, - opentelemetry::nostd::string_view library_version) override + opentelemetry::nostd::string_view library_version, + const opentelemetry::trace::TracerOptions &tracer_options) override { return nullptr; } diff --git a/sdk/include/opentelemetry/sdk/trace/tracer.h b/sdk/include/opentelemetry/sdk/trace/tracer.h index cf57c768dc..32a941badf 100644 --- a/sdk/include/opentelemetry/sdk/trace/tracer.h +++ b/sdk/include/opentelemetry/sdk/trace/tracer.h @@ -11,7 +11,9 @@ namespace trace class Tracer : public opentelemetry::trace::Tracer { public: - explicit Tracer(nostd::string_view name, nostd::string_view version); + explicit Tracer(nostd::string_view name, + nostd::string_view version, + const opentelemetry::trace::TracerOptions &tracer_options = {}); nostd::unique_ptr StartSpan( nostd::string_view name, const opentelemetry::trace::StartSpanOptions &options = {}) noexcept override; diff --git a/sdk/include/opentelemetry/sdk/trace/tracer_provider.h b/sdk/include/opentelemetry/sdk/trace/tracer_provider.h index 54b27219f7..637f81f34e 100644 --- a/sdk/include/opentelemetry/sdk/trace/tracer_provider.h +++ b/sdk/include/opentelemetry/sdk/trace/tracer_provider.h @@ -6,9 +6,6 @@ #include "opentelemetry/sdk/trace/tracer.h" #include "opentelemetry/trace/tracer_provider.h" -using opentelemetry::nostd::string_view; -using opentelemetry::sdk::trace::Tracer; - namespace opentelemetry { namespace sdk @@ -18,10 +15,12 @@ namespace trace class TracerProvider : public opentelemetry::trace::TracerProvider { public: - Tracer *const GetTracer(string_view library_name, string_view library_version = "") override; + Tracer *const GetTracer(nostd::string_view library_name, + nostd::string_view library_version = "", + const opentelemetry::trace::TracerOptions &tracer_options = {}) override; private: - std::vector> tracers_; + std::vector> tracers_; }; } // namespace trace } // namespace sdk diff --git a/sdk/src/opentelemetry/trace/tracer.cc b/sdk/src/opentelemetry/trace/tracer.cc index 4a651800d7..6617f5935e 100644 --- a/sdk/src/opentelemetry/trace/tracer.cc +++ b/sdk/src/opentelemetry/trace/tracer.cc @@ -6,7 +6,10 @@ namespace sdk { namespace trace { -Tracer::Tracer(nostd::string_view name, nostd::string_view version) : name_{name}, version_{version} +Tracer::Tracer(nostd::string_view name, + nostd::string_view version, + const opentelemetry::trace::TracerOptions &tracer_options) + : name_{name}, version_{version} {} nostd::unique_ptr Tracer::StartSpan( diff --git a/sdk/src/opentelemetry/trace/tracer_provider.cc b/sdk/src/opentelemetry/trace/tracer_provider.cc index 6ee0a85f8d..c84fe2493d 100644 --- a/sdk/src/opentelemetry/trace/tracer_provider.cc +++ b/sdk/src/opentelemetry/trace/tracer_provider.cc @@ -7,9 +7,10 @@ namespace sdk namespace trace { Tracer *const TracerProvider::GetTracer(nostd::string_view library_name, - nostd::string_view library_version) + nostd::string_view library_version, + const opentelemetry::trace::TracerOptions &tracer_options) { - tracers_.emplace_back(new Tracer(library_name, library_version)); + tracers_.emplace_back(new Tracer(library_name, library_version, tracer_options)); return tracers_.back().get(); } } // namespace trace From 24c29e4fbc5a75de618b747ee4cc1e5ee82560d3 Mon Sep 17 00:00:00 2001 From: bryan Date: Tue, 28 Jan 2020 16:47:56 -0800 Subject: [PATCH 36/47] fix indentation in build files --- api/test/nostd/BUILD | 12 ++++++++++++ sdk/BUILD | 4 ++-- sdk/test/trace/BUILD | 8 ++++---- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/api/test/nostd/BUILD b/api/test/nostd/BUILD index c3f2d6864f..d3577551b8 100644 --- a/api/test/nostd/BUILD +++ b/api/test/nostd/BUILD @@ -42,6 +42,18 @@ cc_test( ], ) +cc_test( + name = "span_test", + name = "global_provider", + srcs = [ + "global_provider_test.cc", + ], + deps = [ + "//api", + "@com_google_googletest//:gtest_main", + ], +) + cc_test( name = "shared_ptr_test", srcs = [ diff --git a/sdk/BUILD b/sdk/BUILD index bb9759653d..d1e7b7368c 100644 --- a/sdk/BUILD +++ b/sdk/BUILD @@ -2,8 +2,8 @@ package(default_visibility = ["//visibility:public"]) cc_library( name = "sdk", - deps = ["//api"], - hdrs = glob(["include/**/*.h"]), srcs = glob(["src/**/*.cc"]), + hdrs = glob(["include/**/*.h"]), strip_include_prefix = "include", + deps = ["//api"], ) diff --git a/sdk/test/trace/BUILD b/sdk/test/trace/BUILD index b61c214883..49c459bf54 100644 --- a/sdk/test/trace/BUILD +++ b/sdk/test/trace/BUILD @@ -50,10 +50,10 @@ cc_test( ) cc_test( - name = "tracer_provider", - srcs = [ - "tracer_provider_test.cc", - ], + name = "tracer_provider", + srcs = [ + "tracer_provider_test.cc", + ], deps = [ "//sdk", "@com_google_googletest//:gtest_main", From 9105c905179ebbd4860f2eb179ff5e22e46d6672 Mon Sep 17 00:00:00 2001 From: bryan Date: Sun, 2 Feb 2020 21:12:49 -0800 Subject: [PATCH 37/47] axe provider lifetime management from the global tracer provider --- api/include/opentelemetry/trace/global_provider.h | 7 ++----- api/test/trace/global_provider_test.cc | 8 ++++++-- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/api/include/opentelemetry/trace/global_provider.h b/api/include/opentelemetry/trace/global_provider.h index cfb1c07377..f0ddc9dd8d 100644 --- a/api/include/opentelemetry/trace/global_provider.h +++ b/api/include/opentelemetry/trace/global_provider.h @@ -40,12 +40,9 @@ class Provider return Ptr()->load(std::memory_order_acquire); } - static void SetTracerProvider(TracerProvider *tp) + static TracerProvider *SetTracerProvider(TracerProvider *tp) { - if (auto old = Ptr()->exchange(tp, std::memory_order_release)) - { - delete old; - } + return Ptr()->exchange(tp, std::memory_order_acq_rel); } private: diff --git a/api/test/trace/global_provider_test.cc b/api/test/trace/global_provider_test.cc index 5ef6201bc0..9e79f04018 100644 --- a/api/test/trace/global_provider_test.cc +++ b/api/test/trace/global_provider_test.cc @@ -24,7 +24,11 @@ TEST(Provider, GetTracerProviderDefault) TEST(Provider, SetTracerProvider) { auto tf = new TestProvider(); - Provider::SetTracerProvider(tf); + // Capture the default provider constructed in order to free it + auto default_provider = Provider::SetTracerProvider(tf); ASSERT_EQ(Provider::GetTracerProvider(), tf); - Provider::SetTracerProvider(nullptr); + auto res = Provider::SetTracerProvider(nullptr); + ASSERT_EQ(tf, res); + delete res; + delete default_provider; } From 2fa8c9239d3e376ccf410a9907464b149d0db0d5 Mon Sep 17 00:00:00 2001 From: bryan Date: Mon, 3 Feb 2020 09:48:39 -0800 Subject: [PATCH 38/47] clean up test, change provider file name --- .../trace/{global_provider.h => provider.h} | 0 .../{global_provider_test.cc => provider_test.cc} | 13 +++++-------- sdk/test/trace/BUILD | 11 +++++++++++ 3 files changed, 16 insertions(+), 8 deletions(-) rename api/include/opentelemetry/trace/{global_provider.h => provider.h} (100%) rename api/test/trace/{global_provider_test.cc => provider_test.cc} (68%) diff --git a/api/include/opentelemetry/trace/global_provider.h b/api/include/opentelemetry/trace/provider.h similarity index 100% rename from api/include/opentelemetry/trace/global_provider.h rename to api/include/opentelemetry/trace/provider.h diff --git a/api/test/trace/global_provider_test.cc b/api/test/trace/provider_test.cc similarity index 68% rename from api/test/trace/global_provider_test.cc rename to api/test/trace/provider_test.cc index 9e79f04018..d80b517a01 100644 --- a/api/test/trace/global_provider_test.cc +++ b/api/test/trace/provider_test.cc @@ -1,4 +1,4 @@ -#include "opentelemetry/trace/global_provider.h" +#include "opentelemetry/trace/provider.h" #include @@ -18,17 +18,14 @@ class TestProvider : public opentelemetry::trace::TracerProvider TEST(Provider, GetTracerProviderDefault) { auto tf = Provider::GetTracerProvider(); - ASSERT_NE(tf, nullptr); + EXPECT_NE(tf, nullptr); } TEST(Provider, SetTracerProvider) { auto tf = new TestProvider(); - // Capture the default provider constructed in order to free it + // Capture the default provider constructed in order to replace it auto default_provider = Provider::SetTracerProvider(tf); - ASSERT_EQ(Provider::GetTracerProvider(), tf); - auto res = Provider::SetTracerProvider(nullptr); - ASSERT_EQ(tf, res); - delete res; - delete default_provider; + ASSERT_EQ(tf, Provider::GetTracerProvider()); + delete Provider::SetTracerProvider(default_provider); } diff --git a/sdk/test/trace/BUILD b/sdk/test/trace/BUILD index 49c459bf54..cd5b01c24a 100644 --- a/sdk/test/trace/BUILD +++ b/sdk/test/trace/BUILD @@ -39,6 +39,17 @@ cc_test( ], ) +cc_test( + name = "provider", + srcs = [ + "provider_test.cc", + ], + deps = [ + "//api", + "@com_google_googletest//:gtest_main", + ], +) + cc_test( name = "trace_id_test", srcs = [ From 18bd64c3a722755500090e3bcd83b662040464f7 Mon Sep 17 00:00:00 2001 From: bryan Date: Thu, 5 Mar 2020 11:26:54 -0800 Subject: [PATCH 39/47] use std::mutex and axe tracer options from api --- api/include/opentelemetry/trace/provider.h | 34 ++++++++++++------- api/include/opentelemetry/trace/tracer.h | 3 -- .../opentelemetry/trace/tracer_provider.h | 5 ++- api/test/trace/provider_test.cc | 3 +- sdk/include/opentelemetry/sdk/trace/tracer.h | 8 +---- .../opentelemetry/sdk/trace/tracer_provider.h | 8 ++--- sdk/src/opentelemetry/trace/tracer.cc | 6 ---- .../opentelemetry/trace/tracer_provider.cc | 16 ++++++--- sdk/test/trace/BUILD | 2 +- sdk/test/trace/tracer_provider_test.cc | 8 ++--- 10 files changed, 46 insertions(+), 47 deletions(-) diff --git a/api/include/opentelemetry/trace/provider.h b/api/include/opentelemetry/trace/provider.h index f0ddc9dd8d..4add33af1a 100644 --- a/api/include/opentelemetry/trace/provider.h +++ b/api/include/opentelemetry/trace/provider.h @@ -1,8 +1,8 @@ #pragma once -#include +#include +#include -#include "opentelemetry/nostd/unique_ptr.h" #include "opentelemetry/trace/noop.h" #include "opentelemetry/trace/tracer_provider.h" @@ -16,18 +16,17 @@ class DefaultTracerProvider final : public opentelemetry::trace::TracerProvider public: opentelemetry::trace::NoopTracer *const GetTracer( nostd::string_view library_name, - nostd::string_view library_version = "", - const TracerOptions &tracer_options = {}) override + nostd::string_view library_version = "") override { return tracer_.get(); } private: DefaultTracerProvider() - : tracer_{nostd::unique_ptr( - new opentelemetry::trace::NoopTracer)} + : tracer_{ + std::shared_ptr(new opentelemetry::trace::NoopTracer)} {} - nostd::unique_ptr tracer_; + std::shared_ptr tracer_; friend class Provider; }; @@ -37,20 +36,29 @@ class Provider public: static opentelemetry::trace::TracerProvider *GetTracerProvider() { - return Ptr()->load(std::memory_order_acquire); + std::lock_guard guard{*GetMutex()}; + return *GetProvider(); } static TracerProvider *SetTracerProvider(TracerProvider *tp) { - return Ptr()->exchange(tp, std::memory_order_acq_rel); + std::lock_guard guard{*GetMutex()}; + auto oldProvider = *GetProvider(); + *GetProvider() = tp; + return oldProvider; } private: - static std::atomic *Ptr() + static std::mutex *GetMutex() { - static std::atomic *singleton = - new std::atomic(new DefaultTracerProvider); - return singleton; + static std::mutex *provider_mutex = new std::mutex; + return provider_mutex; + } + + static opentelemetry::trace::TracerProvider **GetProvider() + { + static opentelemetry::trace::TracerProvider *provider = new DefaultTracerProvider; + return &provider; } }; diff --git a/api/include/opentelemetry/trace/tracer.h b/api/include/opentelemetry/trace/tracer.h index dc115163ba..603d24e2bb 100644 --- a/api/include/opentelemetry/trace/tracer.h +++ b/api/include/opentelemetry/trace/tracer.h @@ -8,9 +8,6 @@ OPENTELEMETRY_BEGIN_NAMESPACE namespace trace { -struct TracerOptions -{}; - /** * Handles span creation and in-process context propagation. * diff --git a/api/include/opentelemetry/trace/tracer_provider.h b/api/include/opentelemetry/trace/tracer_provider.h index 6d43e109d8..4b4c8d622a 100644 --- a/api/include/opentelemetry/trace/tracer_provider.h +++ b/api/include/opentelemetry/trace/tracer_provider.h @@ -10,10 +10,9 @@ namespace trace class TracerProvider { public: - virtual ~TracerProvider() = default; + virtual ~TracerProvider() = default; virtual Tracer *const GetTracer(nostd::string_view library_name, - nostd::string_view library_version, - const TracerOptions &tracer_options = {}) = 0; + nostd::string_view library_version) = 0; }; } // namespace trace } // namespace opentelemetry diff --git a/api/test/trace/provider_test.cc b/api/test/trace/provider_test.cc index d80b517a01..804dd1c484 100644 --- a/api/test/trace/provider_test.cc +++ b/api/test/trace/provider_test.cc @@ -8,8 +8,7 @@ using opentelemetry::trace::Tracer; class TestProvider : public opentelemetry::trace::TracerProvider { Tracer *const GetTracer(opentelemetry::nostd::string_view library_name, - opentelemetry::nostd::string_view library_version, - const opentelemetry::trace::TracerOptions &tracer_options) override + opentelemetry::nostd::string_view library_version) override { return nullptr; } diff --git a/sdk/include/opentelemetry/sdk/trace/tracer.h b/sdk/include/opentelemetry/sdk/trace/tracer.h index 32a941badf..6bafd7416b 100644 --- a/sdk/include/opentelemetry/sdk/trace/tracer.h +++ b/sdk/include/opentelemetry/sdk/trace/tracer.h @@ -11,17 +11,11 @@ namespace trace class Tracer : public opentelemetry::trace::Tracer { public: - explicit Tracer(nostd::string_view name, - nostd::string_view version, - const opentelemetry::trace::TracerOptions &tracer_options = {}); nostd::unique_ptr StartSpan( nostd::string_view name, const opentelemetry::trace::StartSpanOptions &options = {}) noexcept override; - -private: - nostd::string_view name_; - nostd::string_view version_; }; + } // namespace trace } // namespace sdk } // namespace opentelemetry diff --git a/sdk/include/opentelemetry/sdk/trace/tracer_provider.h b/sdk/include/opentelemetry/sdk/trace/tracer_provider.h index 637f81f34e..ce89947279 100644 --- a/sdk/include/opentelemetry/sdk/trace/tracer_provider.h +++ b/sdk/include/opentelemetry/sdk/trace/tracer_provider.h @@ -1,7 +1,8 @@ #pragma once +#include #include -#include +#include #include "opentelemetry/sdk/trace/tracer.h" #include "opentelemetry/trace/tracer_provider.h" @@ -16,11 +17,10 @@ class TracerProvider : public opentelemetry::trace::TracerProvider { public: Tracer *const GetTracer(nostd::string_view library_name, - nostd::string_view library_version = "", - const opentelemetry::trace::TracerOptions &tracer_options = {}) override; + nostd::string_view library_version = "") override; private: - std::vector> tracers_; + std::map, std::shared_ptr> tracers_; }; } // namespace trace } // namespace sdk diff --git a/sdk/src/opentelemetry/trace/tracer.cc b/sdk/src/opentelemetry/trace/tracer.cc index 6617f5935e..1ea96023d2 100644 --- a/sdk/src/opentelemetry/trace/tracer.cc +++ b/sdk/src/opentelemetry/trace/tracer.cc @@ -6,12 +6,6 @@ namespace sdk { namespace trace { -Tracer::Tracer(nostd::string_view name, - nostd::string_view version, - const opentelemetry::trace::TracerOptions &tracer_options) - : name_{name}, version_{version} -{} - nostd::unique_ptr Tracer::StartSpan( nostd::string_view name, const opentelemetry::trace::StartSpanOptions &options) noexcept diff --git a/sdk/src/opentelemetry/trace/tracer_provider.cc b/sdk/src/opentelemetry/trace/tracer_provider.cc index c84fe2493d..60729beb4b 100644 --- a/sdk/src/opentelemetry/trace/tracer_provider.cc +++ b/sdk/src/opentelemetry/trace/tracer_provider.cc @@ -7,11 +7,19 @@ namespace sdk namespace trace { Tracer *const TracerProvider::GetTracer(nostd::string_view library_name, - nostd::string_view library_version, - const opentelemetry::trace::TracerOptions &tracer_options) + nostd::string_view library_version) { - tracers_.emplace_back(new Tracer(library_name, library_version, tracer_options)); - return tracers_.back().get(); + std::pair key = + std::pair{library_name, library_version}; + + if (auto cached = tracers_[key]) + { + return cached.get(); + } + + std::shared_ptr t = std::shared_ptr(new Tracer()); + tracers_[key] = t; + return t.get(); } } // namespace trace } // namespace sdk diff --git a/sdk/test/trace/BUILD b/sdk/test/trace/BUILD index cd5b01c24a..858b8c7a0d 100644 --- a/sdk/test/trace/BUILD +++ b/sdk/test/trace/BUILD @@ -40,7 +40,7 @@ cc_test( ) cc_test( - name = "provider", + name = "provider_test", srcs = [ "provider_test.cc", ], diff --git a/sdk/test/trace/tracer_provider_test.cc b/sdk/test/trace/tracer_provider_test.cc index 1d9e259b59..1df097d03e 100644 --- a/sdk/test/trace/tracer_provider_test.cc +++ b/sdk/test/trace/tracer_provider_test.cc @@ -10,12 +10,12 @@ TEST(TracerProvider, GetTracer) auto t1 = tf.GetTracer("test"); auto t2 = tf.GetTracer("test"); auto t3 = tf.GetTracer("different"); - ASSERT_NE(t1, nullptr); - ASSERT_NE(t2, nullptr); - ASSERT_NE(t3, nullptr); + ASSERT_NE(nullptr, t1); + ASSERT_NE(nullptr, t2); + ASSERT_NE(nullptr, t3); // Should return a new instance each time - ASSERT_NE(t1, t2); + ASSERT_EQ(t1, t2); ASSERT_NE(t1, t3); ASSERT_NE(t2, t3); } From c53dfae10fb382c3ed9fcbde5a2ff250efc8cdfc Mon Sep 17 00:00:00 2001 From: bryan Date: Thu, 5 Mar 2020 11:34:35 -0800 Subject: [PATCH 40/47] default args, flipping asserts --- api/include/opentelemetry/trace/provider.h | 2 +- api/include/opentelemetry/trace/tracer_provider.h | 2 +- api/test/trace/provider_test.cc | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/api/include/opentelemetry/trace/provider.h b/api/include/opentelemetry/trace/provider.h index 4add33af1a..6a730f21fb 100644 --- a/api/include/opentelemetry/trace/provider.h +++ b/api/include/opentelemetry/trace/provider.h @@ -16,7 +16,7 @@ class DefaultTracerProvider final : public opentelemetry::trace::TracerProvider public: opentelemetry::trace::NoopTracer *const GetTracer( nostd::string_view library_name, - nostd::string_view library_version = "") override + nostd::string_view library_version) override { return tracer_.get(); } diff --git a/api/include/opentelemetry/trace/tracer_provider.h b/api/include/opentelemetry/trace/tracer_provider.h index 4b4c8d622a..a489709249 100644 --- a/api/include/opentelemetry/trace/tracer_provider.h +++ b/api/include/opentelemetry/trace/tracer_provider.h @@ -12,7 +12,7 @@ class TracerProvider public: virtual ~TracerProvider() = default; virtual Tracer *const GetTracer(nostd::string_view library_name, - nostd::string_view library_version) = 0; + nostd::string_view library_version = "") = 0; }; } // namespace trace } // namespace opentelemetry diff --git a/api/test/trace/provider_test.cc b/api/test/trace/provider_test.cc index 804dd1c484..e6ce5d66eb 100644 --- a/api/test/trace/provider_test.cc +++ b/api/test/trace/provider_test.cc @@ -17,7 +17,7 @@ class TestProvider : public opentelemetry::trace::TracerProvider TEST(Provider, GetTracerProviderDefault) { auto tf = Provider::GetTracerProvider(); - EXPECT_NE(tf, nullptr); + EXPECT_NE(nullptr, tf); } TEST(Provider, SetTracerProvider) From 997a32658a7a1c0c1633e8d0d0702b8bfc70c3ac Mon Sep 17 00:00:00 2001 From: bryan Date: Thu, 5 Mar 2020 11:42:11 -0800 Subject: [PATCH 41/47] compile on older versions --- api/include/opentelemetry/trace/provider.h | 5 ++--- api/include/opentelemetry/trace/tracer_provider.h | 2 +- sdk/src/opentelemetry/trace/tracer_provider.cc | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/api/include/opentelemetry/trace/provider.h b/api/include/opentelemetry/trace/provider.h index 6a730f21fb..77f5adbefb 100644 --- a/api/include/opentelemetry/trace/provider.h +++ b/api/include/opentelemetry/trace/provider.h @@ -14,9 +14,8 @@ namespace trace class DefaultTracerProvider final : public opentelemetry::trace::TracerProvider { public: - opentelemetry::trace::NoopTracer *const GetTracer( - nostd::string_view library_name, - nostd::string_view library_version) override + opentelemetry::trace::NoopTracer *const GetTracer(nostd::string_view library_name, + nostd::string_view library_version) override { return tracer_.get(); } diff --git a/api/include/opentelemetry/trace/tracer_provider.h b/api/include/opentelemetry/trace/tracer_provider.h index a489709249..180ab2c58c 100644 --- a/api/include/opentelemetry/trace/tracer_provider.h +++ b/api/include/opentelemetry/trace/tracer_provider.h @@ -10,7 +10,7 @@ namespace trace class TracerProvider { public: - virtual ~TracerProvider() = default; + virtual ~TracerProvider() = default; virtual Tracer *const GetTracer(nostd::string_view library_name, nostd::string_view library_version = "") = 0; }; diff --git a/sdk/src/opentelemetry/trace/tracer_provider.cc b/sdk/src/opentelemetry/trace/tracer_provider.cc index 60729beb4b..2a8514ca9c 100644 --- a/sdk/src/opentelemetry/trace/tracer_provider.cc +++ b/sdk/src/opentelemetry/trace/tracer_provider.cc @@ -10,7 +10,7 @@ Tracer *const TracerProvider::GetTracer(nostd::string_view library_name, nostd::string_view library_version) { std::pair key = - std::pair{library_name, library_version}; + std::pair{std::string{library_name}, std::string{library_version}}; if (auto cached = tracers_[key]) { From b3b60baac35ddb77004262b4c07daf4ba9f22784 Mon Sep 17 00:00:00 2001 From: Johannes Tax Date: Fri, 13 Mar 2020 14:35:23 -0700 Subject: [PATCH 42/47] Merge from origin/master --- api/include/opentelemetry/trace/provider.h | 5 +- .../opentelemetry/trace/tracer_provider.h | 5 +- api/test/nostd/BUILD | 12 ---- api/test/trace/BUILD | 62 +++++++++++++++++++ sdk/include/opentelemetry/sdk/trace/span.h | 5 +- sdk/include/opentelemetry/sdk/trace/tracer.h | 5 +- .../opentelemetry/sdk/trace/tracer_provider.h | 5 +- sdk/src/opentelemetry/trace/span.cc | 5 +- sdk/src/opentelemetry/trace/tracer.cc | 5 +- .../opentelemetry/trace/tracer_provider.cc | 5 +- sdk/test/trace/BUILD | 62 ------------------- 11 files changed, 78 insertions(+), 98 deletions(-) create mode 100644 api/test/trace/BUILD diff --git a/api/include/opentelemetry/trace/provider.h b/api/include/opentelemetry/trace/provider.h index 77f5adbefb..ba11bf1498 100644 --- a/api/include/opentelemetry/trace/provider.h +++ b/api/include/opentelemetry/trace/provider.h @@ -6,8 +6,7 @@ #include "opentelemetry/trace/noop.h" #include "opentelemetry/trace/tracer_provider.h" -namespace opentelemetry -{ +OPENTELEMETRY_BEGIN_NAMESPACE namespace trace { @@ -62,4 +61,4 @@ class Provider }; } // namespace trace -} // namespace opentelemetry +OPENTELEMETRY_END_NAMESPACE diff --git a/api/include/opentelemetry/trace/tracer_provider.h b/api/include/opentelemetry/trace/tracer_provider.h index 180ab2c58c..91ef92aa9f 100644 --- a/api/include/opentelemetry/trace/tracer_provider.h +++ b/api/include/opentelemetry/trace/tracer_provider.h @@ -3,8 +3,7 @@ #include "opentelemetry/nostd/string_view.h" #include "opentelemetry/trace/tracer.h" -namespace opentelemetry -{ +OPENTELEMETRY_BEGIN_NAMESPACE namespace trace { class TracerProvider @@ -15,4 +14,4 @@ class TracerProvider nostd::string_view library_version = "") = 0; }; } // namespace trace -} // namespace opentelemetry +OPENTELEMETRY_END_NAMESPACE diff --git a/api/test/nostd/BUILD b/api/test/nostd/BUILD index d3577551b8..c3f2d6864f 100644 --- a/api/test/nostd/BUILD +++ b/api/test/nostd/BUILD @@ -42,18 +42,6 @@ cc_test( ], ) -cc_test( - name = "span_test", - name = "global_provider", - srcs = [ - "global_provider_test.cc", - ], - deps = [ - "//api", - "@com_google_googletest//:gtest_main", - ], -) - cc_test( name = "shared_ptr_test", srcs = [ diff --git a/api/test/trace/BUILD b/api/test/trace/BUILD new file mode 100644 index 0000000000..d4a9ddb8cb --- /dev/null +++ b/api/test/trace/BUILD @@ -0,0 +1,62 @@ +load("//bazel:otel_cc_benchmark.bzl", "otel_cc_benchmark") + +cc_test( + name = "noop_test", + srcs = [ + "noop_test.cc", + ], + deps = [ + "//api", + "@com_google_googletest//:gtest_main", + ], +) + +otel_cc_benchmark( + name = "span_id_benchmark", + srcs = ["span_id_benchmark.cc"], + deps = ["//api"], +) + +cc_test( + name = "provider_test", + srcs = [ + "provider_test.cc", + ], + deps = [ + "//api", + "@com_google_googletest//:gtest_main", + ], +) + +cc_test( + name = "span_id_test", + srcs = [ + "span_id_test.cc", + ], + deps = [ + "//api", + "@com_google_googletest//:gtest_main", + ], +) + +cc_test( + name = "trace_flags_test", + srcs = [ + "trace_flags_test.cc", + ], + deps = [ + "//api", + "@com_google_googletest//:gtest_main", + ], +) + +cc_test( + name = "trace_id_test", + srcs = [ + "trace_id_test.cc", + ], + deps = [ + "//api", + "@com_google_googletest//:gtest_main", + ], +) diff --git a/sdk/include/opentelemetry/sdk/trace/span.h b/sdk/include/opentelemetry/sdk/trace/span.h index 5d3198c162..c109acaf40 100644 --- a/sdk/include/opentelemetry/sdk/trace/span.h +++ b/sdk/include/opentelemetry/sdk/trace/span.h @@ -6,8 +6,7 @@ using opentelemetry::trace::Tracer; -namespace opentelemetry -{ +OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { namespace trace @@ -23,4 +22,4 @@ class Span final : public opentelemetry::trace::Span }; } // namespace trace } // namespace sdk -} // namespace opentelemetry +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/trace/tracer.h b/sdk/include/opentelemetry/sdk/trace/tracer.h index 6bafd7416b..876e0c9272 100644 --- a/sdk/include/opentelemetry/sdk/trace/tracer.h +++ b/sdk/include/opentelemetry/sdk/trace/tracer.h @@ -2,8 +2,7 @@ #include "opentelemetry/trace/tracer.h" -namespace opentelemetry -{ +OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { namespace trace @@ -18,4 +17,4 @@ class Tracer : public opentelemetry::trace::Tracer } // namespace trace } // namespace sdk -} // namespace opentelemetry +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/trace/tracer_provider.h b/sdk/include/opentelemetry/sdk/trace/tracer_provider.h index ce89947279..d6e1a984b4 100644 --- a/sdk/include/opentelemetry/sdk/trace/tracer_provider.h +++ b/sdk/include/opentelemetry/sdk/trace/tracer_provider.h @@ -7,8 +7,7 @@ #include "opentelemetry/sdk/trace/tracer.h" #include "opentelemetry/trace/tracer_provider.h" -namespace opentelemetry -{ +OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { namespace trace @@ -24,4 +23,4 @@ class TracerProvider : public opentelemetry::trace::TracerProvider }; } // namespace trace } // namespace sdk -} // namespace opentelemetry +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/opentelemetry/trace/span.cc b/sdk/src/opentelemetry/trace/span.cc index 414db868be..bd0dde704f 100644 --- a/sdk/src/opentelemetry/trace/span.cc +++ b/sdk/src/opentelemetry/trace/span.cc @@ -1,7 +1,6 @@ #include "opentelemetry/sdk/trace/span.h" -namespace opentelemetry -{ +OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { namespace trace @@ -12,4 +11,4 @@ Tracer &Span::tracer() const noexcept } } // namespace trace } // namespace sdk -} // namespace opentelemetry +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/opentelemetry/trace/tracer.cc b/sdk/src/opentelemetry/trace/tracer.cc index 1ea96023d2..fd9aad4720 100644 --- a/sdk/src/opentelemetry/trace/tracer.cc +++ b/sdk/src/opentelemetry/trace/tracer.cc @@ -1,7 +1,6 @@ #include "opentelemetry/sdk/trace/tracer.h" -namespace opentelemetry -{ +OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { namespace trace @@ -15,4 +14,4 @@ nostd::unique_ptr Tracer::StartSpan( } } // namespace trace } // namespace sdk -} // namespace opentelemetry +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/opentelemetry/trace/tracer_provider.cc b/sdk/src/opentelemetry/trace/tracer_provider.cc index 2a8514ca9c..be1b7b550a 100644 --- a/sdk/src/opentelemetry/trace/tracer_provider.cc +++ b/sdk/src/opentelemetry/trace/tracer_provider.cc @@ -1,7 +1,6 @@ #include "opentelemetry/sdk/trace/tracer_provider.h" -namespace opentelemetry -{ +OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { namespace trace @@ -23,4 +22,4 @@ Tracer *const TracerProvider::GetTracer(nostd::string_view library_name, } } // namespace trace } // namespace sdk -} // namespace opentelemetry +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/test/trace/BUILD b/sdk/test/trace/BUILD index 858b8c7a0d..0eb17f1c9d 100644 --- a/sdk/test/trace/BUILD +++ b/sdk/test/trace/BUILD @@ -1,65 +1,3 @@ -load("//bazel:otel_cc_benchmark.bzl", "otel_cc_benchmark") - -cc_test( - name = "noop_test", - srcs = [ - "noop_test.cc", - ], - deps = [ - "//api", - "@com_google_googletest//:gtest_main", - ], -) - -otel_cc_benchmark( - name = "span_id_benchmark", - srcs = ["span_id_benchmark.cc"], - deps = ["//api"], -) - -cc_test( - name = "span_id_test", - srcs = [ - "span_id_test.cc", - ], - deps = [ - "//api", - "@com_google_googletest//:gtest_main", - ], -) - -cc_test( - name = "trace_flags_test", - srcs = [ - "trace_flags_test.cc", - ], - deps = [ - "//api", - "@com_google_googletest//:gtest_main", - ], -) - -cc_test( - name = "provider_test", - srcs = [ - "provider_test.cc", - ], - deps = [ - "//api", - "@com_google_googletest//:gtest_main", - ], -) - -cc_test( - name = "trace_id_test", - srcs = [ - "trace_id_test.cc", - deps = [ - "//api", - "@com_google_googletest//:gtest_main", - ], -) - cc_test( name = "tracer_provider", srcs = [ From 02b9e034bcd68f3a63709ce61bfe520c63a34b10 Mon Sep 17 00:00:00 2001 From: Johannes Tax Date: Fri, 13 Mar 2020 17:46:21 -0700 Subject: [PATCH 43/47] Changes --- api/include/opentelemetry/trace/provider.h | 49 +++++++++++-------- .../opentelemetry/trace/tracer_provider.h | 5 +- api/test/trace/CMakeLists.txt | 2 +- api/test/trace/provider_test.cc | 18 ++++--- sdk/CMakeLists.txt | 4 ++ .../opentelemetry/sdk/trace/tracer_provider.h | 7 +-- sdk/src/opentelemetry/trace/span.cc | 14 ------ sdk/src/opentelemetry/trace/tracer.cc | 17 ------- .../opentelemetry/trace/tracer_provider.cc | 25 ---------- sdk/src/trace/CMakeLists.txt | 2 +- sdk/test/trace/tracer_provider_test.cc | 4 +- 11 files changed, 55 insertions(+), 92 deletions(-) delete mode 100644 sdk/src/opentelemetry/trace/span.cc delete mode 100644 sdk/src/opentelemetry/trace/tracer.cc delete mode 100644 sdk/src/opentelemetry/trace/tracer_provider.cc diff --git a/api/include/opentelemetry/trace/provider.h b/api/include/opentelemetry/trace/provider.h index ba11bf1498..1f3538629e 100644 --- a/api/include/opentelemetry/trace/provider.h +++ b/api/include/opentelemetry/trace/provider.h @@ -1,8 +1,8 @@ #pragma once -#include -#include +#include +#include "opentelemetry/nostd/shared_ptr.h" #include "opentelemetry/trace/noop.h" #include "opentelemetry/trace/tracer_provider.h" @@ -13,18 +13,18 @@ namespace trace class DefaultTracerProvider final : public opentelemetry::trace::TracerProvider { public: - opentelemetry::trace::NoopTracer *const GetTracer(nostd::string_view library_name, + nostd::shared_ptr GetTracer(nostd::string_view library_name, nostd::string_view library_version) override { - return tracer_.get(); + return nostd::shared_ptr(tracer_); } private: DefaultTracerProvider() : tracer_{ - std::shared_ptr(new opentelemetry::trace::NoopTracer)} + nostd::shared_ptr(new opentelemetry::trace::NoopTracer)} {} - std::shared_ptr tracer_; + nostd::shared_ptr tracer_; friend class Provider; }; @@ -32,31 +32,38 @@ class DefaultTracerProvider final : public opentelemetry::trace::TracerProvider class Provider { public: - static opentelemetry::trace::TracerProvider *GetTracerProvider() + static nostd::shared_ptr GetTracerProvider() noexcept { - std::lock_guard guard{*GetMutex()}; - return *GetProvider(); + nostd::shared_ptr* ptr = GetProvider().load(); + + if (nullptr == ptr) { + SetTracerProvider(nostd::shared_ptr(new DefaultTracerProvider)); + + ptr = GetProvider().load(); + } + + return nostd::shared_ptr(*ptr); } - static TracerProvider *SetTracerProvider(TracerProvider *tp) + static void SetTracerProvider(nostd::shared_ptr tp) noexcept { - std::lock_guard guard{*GetMutex()}; - auto oldProvider = *GetProvider(); - *GetProvider() = tp; - return oldProvider; + delete GetProvider().load(); + + GetProvider().exchange(new nostd::shared_ptr(tp), std::memory_order_acq_rel); } -private: - static std::mutex *GetMutex() + static void SetTracerProvider(std::nullptr_t) noexcept { - static std::mutex *provider_mutex = new std::mutex; - return provider_mutex; + delete GetProvider().load(); + + GetProvider().exchange(nullptr, std::memory_order_acq_rel); } - static opentelemetry::trace::TracerProvider **GetProvider() +private: + static std::atomic*>& GetProvider() noexcept { - static opentelemetry::trace::TracerProvider *provider = new DefaultTracerProvider; - return &provider; + static std::atomic*> provider(new nostd::shared_ptr(new DefaultTracerProvider)); + return provider; } }; diff --git a/api/include/opentelemetry/trace/tracer_provider.h b/api/include/opentelemetry/trace/tracer_provider.h index 91ef92aa9f..3a54400c32 100644 --- a/api/include/opentelemetry/trace/tracer_provider.h +++ b/api/include/opentelemetry/trace/tracer_provider.h @@ -2,6 +2,7 @@ #include "opentelemetry/nostd/string_view.h" #include "opentelemetry/trace/tracer.h" +#include "opentelemetry/nostd/shared_ptr.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace trace @@ -10,8 +11,8 @@ class TracerProvider { public: virtual ~TracerProvider() = default; - virtual Tracer *const GetTracer(nostd::string_view library_name, - nostd::string_view library_version = "") = 0; + virtual nostd::shared_ptr GetTracer(nostd::string_view library_name, + nostd::string_view library_version = "") = 0; }; } // namespace trace OPENTELEMETRY_END_NAMESPACE diff --git a/api/test/trace/CMakeLists.txt b/api/test/trace/CMakeLists.txt index 61ac03b4a8..abb5dc2111 100644 --- a/api/test/trace/CMakeLists.txt +++ b/api/test/trace/CMakeLists.txt @@ -1,4 +1,4 @@ -foreach(testname noop_test span_id_test trace_id_test trace_flags_test) +foreach(testname noop_test provider_test span_id_test trace_id_test trace_flags_test) add_executable(${testname} "${testname}.cc") target_link_libraries(${testname} ${GTEST_BOTH_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} opentelemetry_api) diff --git a/api/test/trace/provider_test.cc b/api/test/trace/provider_test.cc index e6ce5d66eb..3f15e4b781 100644 --- a/api/test/trace/provider_test.cc +++ b/api/test/trace/provider_test.cc @@ -1,16 +1,18 @@ +#include "opentelemetry/nostd/shared_ptr.h" #include "opentelemetry/trace/provider.h" #include using opentelemetry::trace::Provider; +using opentelemetry::trace::TracerProvider; using opentelemetry::trace::Tracer; -class TestProvider : public opentelemetry::trace::TracerProvider +class TestProvider : public TracerProvider { - Tracer *const GetTracer(opentelemetry::nostd::string_view library_name, + opentelemetry::nostd::shared_ptr GetTracer(opentelemetry::nostd::string_view library_name, opentelemetry::nostd::string_view library_version) override { - return nullptr; + return opentelemetry::nostd::shared_ptr(nullptr); } }; @@ -22,9 +24,13 @@ TEST(Provider, GetTracerProviderDefault) TEST(Provider, SetTracerProvider) { - auto tf = new TestProvider(); + auto tf = opentelemetry::nostd::shared_ptr(new TestProvider()); // Capture the default provider constructed in order to replace it - auto default_provider = Provider::SetTracerProvider(tf); + Provider::SetTracerProvider(tf); ASSERT_EQ(tf, Provider::GetTracerProvider()); - delete Provider::SetTracerProvider(default_provider); + + Provider::SetTracerProvider(nullptr); + auto default_provider = Provider::GetTracerProvider(); + + Provider::SetTracerProvider(nullptr); } diff --git a/sdk/CMakeLists.txt b/sdk/CMakeLists.txt index febd4f0ab6..75205ac71e 100644 --- a/sdk/CMakeLists.txt +++ b/sdk/CMakeLists.txt @@ -1 +1,5 @@ add_subdirectory(src) + +if(BUILD_TESTING) + add_subdirectory(test) +endif() diff --git a/sdk/include/opentelemetry/sdk/trace/tracer_provider.h b/sdk/include/opentelemetry/sdk/trace/tracer_provider.h index d6e1a984b4..50624c0d14 100644 --- a/sdk/include/opentelemetry/sdk/trace/tracer_provider.h +++ b/sdk/include/opentelemetry/sdk/trace/tracer_provider.h @@ -4,8 +4,9 @@ #include #include -#include "opentelemetry/sdk/trace/tracer.h" +#include "opentelemetry/nostd/shared_ptr.h" #include "opentelemetry/trace/tracer_provider.h" +#include "opentelemetry/sdk/trace/tracer.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk @@ -15,11 +16,11 @@ namespace trace class TracerProvider : public opentelemetry::trace::TracerProvider { public: - Tracer *const GetTracer(nostd::string_view library_name, + opentelemetry::nostd::shared_ptr GetTracer(nostd::string_view library_name, nostd::string_view library_version = "") override; private: - std::map, std::shared_ptr> tracers_; + std::map, nostd::shared_ptr> tracers_; }; } // namespace trace } // namespace sdk diff --git a/sdk/src/opentelemetry/trace/span.cc b/sdk/src/opentelemetry/trace/span.cc deleted file mode 100644 index bd0dde704f..0000000000 --- a/sdk/src/opentelemetry/trace/span.cc +++ /dev/null @@ -1,14 +0,0 @@ -#include "opentelemetry/sdk/trace/span.h" - -OPENTELEMETRY_BEGIN_NAMESPACE -namespace sdk -{ -namespace trace -{ -Tracer &Span::tracer() const noexcept -{ - return *tracer_; -} -} // namespace trace -} // namespace sdk -OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/opentelemetry/trace/tracer.cc b/sdk/src/opentelemetry/trace/tracer.cc deleted file mode 100644 index fd9aad4720..0000000000 --- a/sdk/src/opentelemetry/trace/tracer.cc +++ /dev/null @@ -1,17 +0,0 @@ -#include "opentelemetry/sdk/trace/tracer.h" - -OPENTELEMETRY_BEGIN_NAMESPACE -namespace sdk -{ -namespace trace -{ -nostd::unique_ptr Tracer::StartSpan( - nostd::string_view name, - const opentelemetry::trace::StartSpanOptions &options) noexcept -{ - // TODO: make a span! - return nullptr; -} -} // namespace trace -} // namespace sdk -OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/opentelemetry/trace/tracer_provider.cc b/sdk/src/opentelemetry/trace/tracer_provider.cc deleted file mode 100644 index be1b7b550a..0000000000 --- a/sdk/src/opentelemetry/trace/tracer_provider.cc +++ /dev/null @@ -1,25 +0,0 @@ -#include "opentelemetry/sdk/trace/tracer_provider.h" - -OPENTELEMETRY_BEGIN_NAMESPACE -namespace sdk -{ -namespace trace -{ -Tracer *const TracerProvider::GetTracer(nostd::string_view library_name, - nostd::string_view library_version) -{ - std::pair key = - std::pair{std::string{library_name}, std::string{library_version}}; - - if (auto cached = tracers_[key]) - { - return cached.get(); - } - - std::shared_ptr t = std::shared_ptr(new Tracer()); - tracers_[key] = t; - return t.get(); -} -} // namespace trace -} // namespace sdk -OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/trace/CMakeLists.txt b/sdk/src/trace/CMakeLists.txt index 62a2187c46..455665be68 100644 --- a/sdk/src/trace/CMakeLists.txt +++ b/sdk/src/trace/CMakeLists.txt @@ -1 +1 @@ -add_library(opentelemetry_trace tracer.cc span.cc) +add_library(opentelemetry_trace tracer_provider.cc tracer.cc span.cc) diff --git a/sdk/test/trace/tracer_provider_test.cc b/sdk/test/trace/tracer_provider_test.cc index 1df097d03e..e2b50b4c9f 100644 --- a/sdk/test/trace/tracer_provider_test.cc +++ b/sdk/test/trace/tracer_provider_test.cc @@ -6,7 +6,7 @@ using opentelemetry::sdk::trace::TracerProvider; TEST(TracerProvider, GetTracer) { - auto tf = TracerProvider(); + /*auto tf = TracerProvider(); auto t1 = tf.GetTracer("test"); auto t2 = tf.GetTracer("test"); auto t3 = tf.GetTracer("different"); @@ -17,5 +17,5 @@ TEST(TracerProvider, GetTracer) // Should return a new instance each time ASSERT_EQ(t1, t2); ASSERT_NE(t1, t3); - ASSERT_NE(t2, t3); + ASSERT_NE(t2, t3);*/ } From dd8b192e1b4be9c7a1fe7a1f67aeddb7635b7cfa Mon Sep 17 00:00:00 2001 From: Johannes Tax Date: Sat, 14 Mar 2020 17:14:57 -0700 Subject: [PATCH 44/47] Use simplified default tracer provider --- api/include/opentelemetry/trace/provider.h | 19 +++++++----- .../opentelemetry/trace/tracer_provider.h | 6 ++-- api/test/trace/CMakeLists.txt | 3 +- api/test/trace/provider_test.cc | 9 +++--- .../sdk/trace/default_tracer_provider.h | 30 +++++++++++++++++++ sdk/include/opentelemetry/sdk/trace/span.h | 25 ---------------- sdk/include/opentelemetry/sdk/trace/tracer.h | 20 ------------- .../opentelemetry/sdk/trace/tracer_provider.h | 27 ----------------- sdk/src/trace/CMakeLists.txt | 2 +- sdk/src/trace/default_tracer_provider.cc | 21 +++++++++++++ sdk/test/CMakeLists.txt | 1 + sdk/test/trace/BUILD | 4 +-- sdk/test/trace/CMakeLists.txt | 6 ++++ ...est.cc => default_tracer_provider_test.cc} | 11 ++++--- 14 files changed, 87 insertions(+), 97 deletions(-) create mode 100644 sdk/include/opentelemetry/sdk/trace/default_tracer_provider.h delete mode 100644 sdk/include/opentelemetry/sdk/trace/span.h delete mode 100644 sdk/include/opentelemetry/sdk/trace/tracer.h delete mode 100644 sdk/include/opentelemetry/sdk/trace/tracer_provider.h create mode 100644 sdk/src/trace/default_tracer_provider.cc create mode 100644 sdk/test/CMakeLists.txt create mode 100644 sdk/test/trace/CMakeLists.txt rename sdk/test/trace/{tracer_provider_test.cc => default_tracer_provider_test.cc} (55%) diff --git a/api/include/opentelemetry/trace/provider.h b/api/include/opentelemetry/trace/provider.h index 1f3538629e..b6731ae4e8 100644 --- a/api/include/opentelemetry/trace/provider.h +++ b/api/include/opentelemetry/trace/provider.h @@ -13,16 +13,17 @@ namespace trace class DefaultTracerProvider final : public opentelemetry::trace::TracerProvider { public: - nostd::shared_ptr GetTracer(nostd::string_view library_name, - nostd::string_view library_version) override + nostd::shared_ptr GetTracer( + nostd::string_view library_name, + nostd::string_view library_version) override { return nostd::shared_ptr(tracer_); } private: DefaultTracerProvider() - : tracer_{ - nostd::shared_ptr(new opentelemetry::trace::NoopTracer)} + : tracer_{nostd::shared_ptr( + new opentelemetry::trace::NoopTracer)} {} nostd::shared_ptr tracer_; @@ -34,9 +35,10 @@ class Provider public: static nostd::shared_ptr GetTracerProvider() noexcept { - nostd::shared_ptr* ptr = GetProvider().load(); + nostd::shared_ptr *ptr = GetProvider().load(); - if (nullptr == ptr) { + if (nullptr == ptr) + { SetTracerProvider(nostd::shared_ptr(new DefaultTracerProvider)); ptr = GetProvider().load(); @@ -60,9 +62,10 @@ class Provider } private: - static std::atomic*>& GetProvider() noexcept + static std::atomic *> &GetProvider() noexcept { - static std::atomic*> provider(new nostd::shared_ptr(new DefaultTracerProvider)); + static std::atomic *> provider( + new nostd::shared_ptr(new DefaultTracerProvider)); return provider; } }; diff --git a/api/include/opentelemetry/trace/tracer_provider.h b/api/include/opentelemetry/trace/tracer_provider.h index 3a54400c32..21ace21130 100644 --- a/api/include/opentelemetry/trace/tracer_provider.h +++ b/api/include/opentelemetry/trace/tracer_provider.h @@ -1,8 +1,8 @@ #pragma once +#include "opentelemetry/nostd/shared_ptr.h" #include "opentelemetry/nostd/string_view.h" #include "opentelemetry/trace/tracer.h" -#include "opentelemetry/nostd/shared_ptr.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace trace @@ -10,9 +10,9 @@ namespace trace class TracerProvider { public: - virtual ~TracerProvider() = default; + virtual ~TracerProvider() = default; virtual nostd::shared_ptr GetTracer(nostd::string_view library_name, - nostd::string_view library_version = "") = 0; + nostd::string_view library_version = "") = 0; }; } // namespace trace OPENTELEMETRY_END_NAMESPACE diff --git a/api/test/trace/CMakeLists.txt b/api/test/trace/CMakeLists.txt index abb5dc2111..5ddf6da857 100644 --- a/api/test/trace/CMakeLists.txt +++ b/api/test/trace/CMakeLists.txt @@ -1,4 +1,5 @@ -foreach(testname noop_test provider_test span_id_test trace_id_test trace_flags_test) +foreach(testname noop_test provider_test span_id_test trace_id_test + trace_flags_test) add_executable(${testname} "${testname}.cc") target_link_libraries(${testname} ${GTEST_BOTH_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} opentelemetry_api) diff --git a/api/test/trace/provider_test.cc b/api/test/trace/provider_test.cc index 3f15e4b781..5eb53ccf34 100644 --- a/api/test/trace/provider_test.cc +++ b/api/test/trace/provider_test.cc @@ -1,16 +1,17 @@ -#include "opentelemetry/nostd/shared_ptr.h" #include "opentelemetry/trace/provider.h" +#include "opentelemetry/nostd/shared_ptr.h" #include using opentelemetry::trace::Provider; -using opentelemetry::trace::TracerProvider; using opentelemetry::trace::Tracer; +using opentelemetry::trace::TracerProvider; class TestProvider : public TracerProvider { - opentelemetry::nostd::shared_ptr GetTracer(opentelemetry::nostd::string_view library_name, - opentelemetry::nostd::string_view library_version) override + opentelemetry::nostd::shared_ptr GetTracer( + opentelemetry::nostd::string_view library_name, + opentelemetry::nostd::string_view library_version) override { return opentelemetry::nostd::shared_ptr(nullptr); } diff --git a/sdk/include/opentelemetry/sdk/trace/default_tracer_provider.h b/sdk/include/opentelemetry/sdk/trace/default_tracer_provider.h new file mode 100644 index 0000000000..f566d3e64d --- /dev/null +++ b/sdk/include/opentelemetry/sdk/trace/default_tracer_provider.h @@ -0,0 +1,30 @@ +#pragma once + +#include +#include +#include + +#include "opentelemetry/nostd/shared_ptr.h" +#include "opentelemetry/trace/tracer.h" +#include "opentelemetry/trace/tracer_provider.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace trace +{ +class DefaultTracerProvider final : public opentelemetry::trace::TracerProvider +{ +public: + DefaultTracerProvider() noexcept; + + opentelemetry::nostd::shared_ptr GetTracer( + nostd::string_view library_name, + nostd::string_view library_version = "") noexcept override; + +private: + opentelemetry::nostd::shared_ptr tracer_; +}; +} // namespace trace +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/trace/span.h b/sdk/include/opentelemetry/sdk/trace/span.h deleted file mode 100644 index c109acaf40..0000000000 --- a/sdk/include/opentelemetry/sdk/trace/span.h +++ /dev/null @@ -1,25 +0,0 @@ -#pragma once - -#include - -#include "opentelemetry/trace/span.h" - -using opentelemetry::trace::Tracer; - -OPENTELEMETRY_BEGIN_NAMESPACE -namespace sdk -{ -namespace trace -{ -class Span final : public opentelemetry::trace::Span -{ -public: - explicit Span(const std::shared_ptr &tracer) noexcept : tracer_{tracer} {} - Tracer &tracer() const noexcept override; - -private: - std::shared_ptr tracer_; -}; -} // namespace trace -} // namespace sdk -OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/trace/tracer.h b/sdk/include/opentelemetry/sdk/trace/tracer.h deleted file mode 100644 index 876e0c9272..0000000000 --- a/sdk/include/opentelemetry/sdk/trace/tracer.h +++ /dev/null @@ -1,20 +0,0 @@ -#pragma once - -#include "opentelemetry/trace/tracer.h" - -OPENTELEMETRY_BEGIN_NAMESPACE -namespace sdk -{ -namespace trace -{ -class Tracer : public opentelemetry::trace::Tracer -{ -public: - nostd::unique_ptr StartSpan( - nostd::string_view name, - const opentelemetry::trace::StartSpanOptions &options = {}) noexcept override; -}; - -} // namespace trace -} // namespace sdk -OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/trace/tracer_provider.h b/sdk/include/opentelemetry/sdk/trace/tracer_provider.h deleted file mode 100644 index 50624c0d14..0000000000 --- a/sdk/include/opentelemetry/sdk/trace/tracer_provider.h +++ /dev/null @@ -1,27 +0,0 @@ -#pragma once - -#include -#include -#include - -#include "opentelemetry/nostd/shared_ptr.h" -#include "opentelemetry/trace/tracer_provider.h" -#include "opentelemetry/sdk/trace/tracer.h" - -OPENTELEMETRY_BEGIN_NAMESPACE -namespace sdk -{ -namespace trace -{ -class TracerProvider : public opentelemetry::trace::TracerProvider -{ -public: - opentelemetry::nostd::shared_ptr GetTracer(nostd::string_view library_name, - nostd::string_view library_version = "") override; - -private: - std::map, nostd::shared_ptr> tracers_; -}; -} // namespace trace -} // namespace sdk -OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/trace/CMakeLists.txt b/sdk/src/trace/CMakeLists.txt index 455665be68..c1bb321cf9 100644 --- a/sdk/src/trace/CMakeLists.txt +++ b/sdk/src/trace/CMakeLists.txt @@ -1 +1 @@ -add_library(opentelemetry_trace tracer_provider.cc tracer.cc span.cc) +add_library(opentelemetry_trace default_tracer_provider.cc tracer.cc span.cc) diff --git a/sdk/src/trace/default_tracer_provider.cc b/sdk/src/trace/default_tracer_provider.cc new file mode 100644 index 0000000000..8719c01041 --- /dev/null +++ b/sdk/src/trace/default_tracer_provider.cc @@ -0,0 +1,21 @@ +#include "opentelemetry/sdk/trace/default_tracer_provider.h" +#include "src/trace/tracer.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace trace +{ +DefaultTracerProvider::DefaultTracerProvider() noexcept + : tracer_(new Tracer(std::unique_ptr(nullptr))) +{} + +opentelemetry::nostd::shared_ptr DefaultTracerProvider::GetTracer( + nostd::string_view library_name, + nostd::string_view library_version) noexcept +{ + return tracer_; +} +} // namespace trace +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/test/CMakeLists.txt b/sdk/test/CMakeLists.txt new file mode 100644 index 0000000000..2cea47fa7b --- /dev/null +++ b/sdk/test/CMakeLists.txt @@ -0,0 +1 @@ +add_subdirectory(trace) diff --git a/sdk/test/trace/BUILD b/sdk/test/trace/BUILD index 0eb17f1c9d..c448098149 100644 --- a/sdk/test/trace/BUILD +++ b/sdk/test/trace/BUILD @@ -1,7 +1,7 @@ cc_test( - name = "tracer_provider", + name = "default_tracer_provider", srcs = [ - "tracer_provider_test.cc", + "default_tracer_provider_test.cc", ], deps = [ "//sdk", diff --git a/sdk/test/trace/CMakeLists.txt b/sdk/test/trace/CMakeLists.txt new file mode 100644 index 0000000000..b12d584eed --- /dev/null +++ b/sdk/test/trace/CMakeLists.txt @@ -0,0 +1,6 @@ +foreach(testname default_tracer_provider_test) + add_executable(${testname} "${testname}.cc") + target_link_libraries(${testname} ${GTEST_BOTH_LIBRARIES} + ${CMAKE_THREAD_LIBS_INIT} opentelemetry_trace) + gtest_add_tests(TARGET ${testname} TEST_PREFIX trace. TEST_LIST ${testname}) +endforeach() diff --git a/sdk/test/trace/tracer_provider_test.cc b/sdk/test/trace/default_tracer_provider_test.cc similarity index 55% rename from sdk/test/trace/tracer_provider_test.cc rename to sdk/test/trace/default_tracer_provider_test.cc index e2b50b4c9f..044eab0ae4 100644 --- a/sdk/test/trace/tracer_provider_test.cc +++ b/sdk/test/trace/default_tracer_provider_test.cc @@ -1,21 +1,20 @@ -#include "opentelemetry/sdk/trace/tracer_provider.h" +#include "opentelemetry/sdk/trace/default_tracer_provider.h" #include -using opentelemetry::sdk::trace::TracerProvider; +using opentelemetry::sdk::trace::DefaultTracerProvider; TEST(TracerProvider, GetTracer) { - /*auto tf = TracerProvider(); + auto tf = DefaultTracerProvider(); auto t1 = tf.GetTracer("test"); auto t2 = tf.GetTracer("test"); - auto t3 = tf.GetTracer("different"); + auto t3 = tf.GetTracer("different", "1.0.0"); ASSERT_NE(nullptr, t1); ASSERT_NE(nullptr, t2); ASSERT_NE(nullptr, t3); // Should return a new instance each time ASSERT_EQ(t1, t2); - ASSERT_NE(t1, t3); - ASSERT_NE(t2, t3);*/ + ASSERT_EQ(t1, t3); } From 5f45b146fbdb451295b284b12fa7597beb245aee Mon Sep 17 00:00:00 2001 From: Johannes Tax Date: Sat, 14 Mar 2020 22:21:04 -0700 Subject: [PATCH 45/47] Use atomic flag --- api/include/opentelemetry/trace/noop.h | 23 ++++++ api/include/opentelemetry/trace/provider.h | 70 ++++++++----------- .../opentelemetry/trace/tracer_provider.h | 11 ++- api/test/trace/provider_test.cc | 6 -- 4 files changed, 61 insertions(+), 49 deletions(-) diff --git a/api/include/opentelemetry/trace/noop.h b/api/include/opentelemetry/trace/noop.h index a3af68a55e..4e40f957af 100644 --- a/api/include/opentelemetry/trace/noop.h +++ b/api/include/opentelemetry/trace/noop.h @@ -8,6 +8,7 @@ #include "opentelemetry/nostd/unique_ptr.h" #include "opentelemetry/trace/span.h" #include "opentelemetry/trace/tracer.h" +#include "opentelemetry/trace/tracer_provider.h" #include "opentelemetry/version.h" #include @@ -54,5 +55,27 @@ class NoopTracer final : public Tracer, public std::enable_shared_from_this{new (std::nothrow) NoopSpan{this->shared_from_this()}}; } }; + +/** + * No-op implementation of a TracerProvider. + */ +class NoopTracerProvider final : public opentelemetry::trace::TracerProvider +{ +public: + NoopTracerProvider() + : tracer_{nostd::shared_ptr( + new opentelemetry::trace::NoopTracer)} + {} + + nostd::shared_ptr GetTracer( + nostd::string_view library_name, + nostd::string_view library_version) override + { + return nostd::shared_ptr(tracer_); + } + +private: + nostd::shared_ptr tracer_; +}; } // namespace trace OPENTELEMETRY_END_NAMESPACE diff --git a/api/include/opentelemetry/trace/provider.h b/api/include/opentelemetry/trace/provider.h index b6731ae4e8..0cfed6d165 100644 --- a/api/include/opentelemetry/trace/provider.h +++ b/api/include/opentelemetry/trace/provider.h @@ -9,64 +9,50 @@ OPENTELEMETRY_BEGIN_NAMESPACE namespace trace { - -class DefaultTracerProvider final : public opentelemetry::trace::TracerProvider -{ -public: - nostd::shared_ptr GetTracer( - nostd::string_view library_name, - nostd::string_view library_version) override - { - return nostd::shared_ptr(tracer_); - } - -private: - DefaultTracerProvider() - : tracer_{nostd::shared_ptr( - new opentelemetry::trace::NoopTracer)} - {} - nostd::shared_ptr tracer_; - - friend class Provider; -}; - +/** + * Stores the singleton global TracerProvider. + */ class Provider { public: + /** + * Returns the singleton TracerProvider. + * + * By default, a no-op TracerProvider is returned. This will never return a + * nullptr TracerProvider. + */ static nostd::shared_ptr GetTracerProvider() noexcept { - nostd::shared_ptr *ptr = GetProvider().load(); + while (GetLock().test_and_set(std::memory_order_acquire)) + ; + auto provider = nostd::shared_ptr(GetProvider()); + GetLock().clear(std::memory_order_release); - if (nullptr == ptr) - { - SetTracerProvider(nostd::shared_ptr(new DefaultTracerProvider)); - - ptr = GetProvider().load(); - } - - return nostd::shared_ptr(*ptr); + return provider; } + /** + * Changes the singleton TracerProvider. + */ static void SetTracerProvider(nostd::shared_ptr tp) noexcept { - delete GetProvider().load(); - - GetProvider().exchange(new nostd::shared_ptr(tp), std::memory_order_acq_rel); + while (GetLock().test_and_set(std::memory_order_acquire)) + ; + GetProvider() = tp; + GetLock().clear(std::memory_order_release); } - static void SetTracerProvider(std::nullptr_t) noexcept +private: + static nostd::shared_ptr &GetProvider() noexcept { - delete GetProvider().load(); - - GetProvider().exchange(nullptr, std::memory_order_acq_rel); + static nostd::shared_ptr provider(new NoopTracerProvider); + return provider; } -private: - static std::atomic *> &GetProvider() noexcept + static std::atomic_flag &GetLock() noexcept { - static std::atomic *> provider( - new nostd::shared_ptr(new DefaultTracerProvider)); - return provider; + static std::atomic_flag lock = ATOMIC_FLAG_INIT; + return lock; } }; diff --git a/api/include/opentelemetry/trace/tracer_provider.h b/api/include/opentelemetry/trace/tracer_provider.h index 21ace21130..9c25cd94c5 100644 --- a/api/include/opentelemetry/trace/tracer_provider.h +++ b/api/include/opentelemetry/trace/tracer_provider.h @@ -7,10 +7,19 @@ OPENTELEMETRY_BEGIN_NAMESPACE namespace trace { +/** + * Creates new Tracer instances. + */ class TracerProvider { public: - virtual ~TracerProvider() = default; + virtual ~TracerProvider() = default; + /** + * Gets or creates a named tracer instance. + * + * Optionally a version can be passed to create a named and versioned tracer + * instance. + */ virtual nostd::shared_ptr GetTracer(nostd::string_view library_name, nostd::string_view library_version = "") = 0; }; diff --git a/api/test/trace/provider_test.cc b/api/test/trace/provider_test.cc index 5eb53ccf34..55b941091d 100644 --- a/api/test/trace/provider_test.cc +++ b/api/test/trace/provider_test.cc @@ -26,12 +26,6 @@ TEST(Provider, GetTracerProviderDefault) TEST(Provider, SetTracerProvider) { auto tf = opentelemetry::nostd::shared_ptr(new TestProvider()); - // Capture the default provider constructed in order to replace it Provider::SetTracerProvider(tf); ASSERT_EQ(tf, Provider::GetTracerProvider()); - - Provider::SetTracerProvider(nullptr); - auto default_provider = Provider::GetTracerProvider(); - - Provider::SetTracerProvider(nullptr); } From 045b107aab220387b5206f117204486bfb99355c Mon Sep 17 00:00:00 2001 From: Johannes Tax Date: Sun, 15 Mar 2020 00:05:58 -0700 Subject: [PATCH 46/47] SDK bazel files --- sdk/BUILD | 4 +--- sdk/src/trace/BUILD | 1 + sdk/test/trace/BUILD | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/sdk/BUILD b/sdk/BUILD index d1e7b7368c..cc62431b53 100644 --- a/sdk/BUILD +++ b/sdk/BUILD @@ -1,9 +1,7 @@ package(default_visibility = ["//visibility:public"]) cc_library( - name = "sdk", - srcs = glob(["src/**/*.cc"]), + name = "headers", hdrs = glob(["include/**/*.h"]), strip_include_prefix = "include", - deps = ["//api"], ) diff --git a/sdk/src/trace/BUILD b/sdk/src/trace/BUILD index f990c57425..49699e4c44 100644 --- a/sdk/src/trace/BUILD +++ b/sdk/src/trace/BUILD @@ -21,5 +21,6 @@ cc_library( include_prefix = "src/trace", deps = [ "//api", + "//sdk:headers", ], ) diff --git a/sdk/test/trace/BUILD b/sdk/test/trace/BUILD index c448098149..858ff28601 100644 --- a/sdk/test/trace/BUILD +++ b/sdk/test/trace/BUILD @@ -4,7 +4,7 @@ cc_test( "default_tracer_provider_test.cc", ], deps = [ - "//sdk", + "//sdk/src/trace", "@com_google_googletest//:gtest_main", ], ) From e3f463e23feb1e8622d965bbf00509b065e19c60 Mon Sep 17 00:00:00 2001 From: Johannes Tax Date: Mon, 16 Mar 2020 09:45:23 -0700 Subject: [PATCH 47/47] Small fixes --- api/include/opentelemetry/trace/noop.h | 2 +- sdk/test/trace/default_tracer_provider_test.cc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/api/include/opentelemetry/trace/noop.h b/api/include/opentelemetry/trace/noop.h index 4e40f957af..b8374bbea9 100644 --- a/api/include/opentelemetry/trace/noop.h +++ b/api/include/opentelemetry/trace/noop.h @@ -71,7 +71,7 @@ class NoopTracerProvider final : public opentelemetry::trace::TracerProvider nostd::string_view library_name, nostd::string_view library_version) override { - return nostd::shared_ptr(tracer_); + return tracer_; } private: diff --git a/sdk/test/trace/default_tracer_provider_test.cc b/sdk/test/trace/default_tracer_provider_test.cc index 044eab0ae4..e76cf7426c 100644 --- a/sdk/test/trace/default_tracer_provider_test.cc +++ b/sdk/test/trace/default_tracer_provider_test.cc @@ -14,7 +14,7 @@ TEST(TracerProvider, GetTracer) ASSERT_NE(nullptr, t2); ASSERT_NE(nullptr, t3); - // Should return a new instance each time + // Should return the same instance each time. ASSERT_EQ(t1, t2); ASSERT_EQ(t1, t3); }