From 73d9d9dc91875245a01b29b8ed6fc8e4907ddc28 Mon Sep 17 00:00:00 2001 From: Ryan Burn Date: Fri, 10 Apr 2020 22:17:55 -0700 Subject: [PATCH 01/53] Setup dispatcher interface --- WORKSPACE | 21 ++++++++++++++ bazel/libevent.BUILD | 23 +++++++++++++++ .../sdk/common/file_descriptor.h | 17 +++++++++++ .../opentelemetry/sdk/event/dispatcher.h | 29 +++++++++++++++++++ .../opentelemetry/sdk/event/file_event.h | 29 +++++++++++++++++++ sdk/include/opentelemetry/sdk/event/timer.h | 23 +++++++++++++++ 6 files changed, 142 insertions(+) create mode 100644 bazel/libevent.BUILD create mode 100644 sdk/include/opentelemetry/sdk/common/file_descriptor.h create mode 100644 sdk/include/opentelemetry/sdk/event/dispatcher.h create mode 100644 sdk/include/opentelemetry/sdk/event/file_event.h create mode 100644 sdk/include/opentelemetry/sdk/event/timer.h diff --git a/WORKSPACE b/WORKSPACE index 1dd2ea37fc..0b7b0354e4 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -37,6 +37,27 @@ new_local_repository( path = "third_party/opentelemetry-proto", ) +http_archive( + name = "rules_foreign_cc", + strip_prefix = "rules_foreign_cc-ed3db61a55c13da311d875460938c42ee8bbc2a5", + url = "https://github.com/bazelbuild/rules_foreign_cc/archive/ed3db61a55c13da311d875460938c42ee8bbc2a5.zip", +) + +load("@rules_foreign_cc//:workspace_definitions.bzl", "rules_foreign_cc_dependencies") + +rules_foreign_cc_dependencies([ +]) + +http_archive( + name = "com_github_libevent_libevent", + urls = [ + "https://github.com/libevent/libevent/archive/release-2.1.8-stable.zip" + ], + sha256 = "70158101eab7ed44fd9cc34e7f247b3cae91a8e4490745d9d6eb7edc184e4d96", + strip_prefix = "libevent-release-2.1.8-stable", + build_file = "//bazel:libevent.BUILD", +) + # GoogleTest framework. # Only needed for tests, not to build the OpenTelemetry library. http_archive( diff --git a/bazel/libevent.BUILD b/bazel/libevent.BUILD new file mode 100644 index 0000000000..92723238ce --- /dev/null +++ b/bazel/libevent.BUILD @@ -0,0 +1,23 @@ +load("@rules_foreign_cc//tools/build_defs:cmake.bzl", "cmake_external") + + +filegroup( + name = "srcs", + srcs = glob(["**"]), +) + +cmake_external( + name = "libevent", + cache_entries = { + "CMAKE_BUILD_TYPE": "Release", + "CMAKE_POSITION_INDEPENDENT_CODE" : "on", + "BUILD_SHARED_LIBS": "off", + "BUILD_STATIC_LIBS": "on", + "EVENT__DISABLE_OPENSSL": "on", + "EVENT__DISABLE_REGRESS": "on", + "EVENT__DISABLE_TESTS": "on", + }, + lib_source = ":srcs", + static_libraries = ["libevent.a"], + visibility = ["//visibility:public"], +) diff --git a/sdk/include/opentelemetry/sdk/common/file_descriptor.h b/sdk/include/opentelemetry/sdk/common/file_descriptor.h new file mode 100644 index 0000000000..dba8607d88 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/common/file_descriptor.h @@ -0,0 +1,17 @@ +#pragma once + +#include + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk { +namespace common { +#ifdef _WIN32 +using FileDescriptor = intptr_t; +#else +using FileDescriptor = int; +#endif +} // namespace common +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/event/dispatcher.h b/sdk/include/opentelemetry/sdk/event/dispatcher.h new file mode 100644 index 0000000000..48f92497bd --- /dev/null +++ b/sdk/include/opentelemetry/sdk/event/dispatcher.h @@ -0,0 +1,29 @@ +#pragma once + +#include + +#include "opentelemetry/sdk/common/file_descriptor.h" +#include "opentelemetry/sdk/event/file_event.h" +#include "opentelemetry/sdk/event/timer.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk { +namespace event { +class Dispatcher { + public: + virtual ~Dispatcher() = default; + + virtual std::unique_ptr CreateFileEvent(FileDescriptor file_descriptor, + FileReadyCallback callback, + uint32_t events) noexcept = 0; + + virtual std::unique_ptr CreateTimer(TimerCallback callback) noexcept = 0; + + virtual void Exit() noexcept = 0; + + virtual void Run() noexcept = 0; +}; +} // namespace event +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/event/file_event.h b/sdk/include/opentelemetry/sdk/event/file_event.h new file mode 100644 index 0000000000..078a4a77e1 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/event/file_event.h @@ -0,0 +1,29 @@ +#pragma once + +#include +#include +#include +#include + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk { +namespace event { +struct FileReadyType { + static const uint32_t kRead = 1; + static const uint32_t kWrite = 2; + static const uint32_t kClosed = 3; + static const uint32_t kTimeout = 4; +}; + +using FileReadyCallback = std::function; + +class FileEvent { + public: + virtual ~FileEvent() = default; + +}; +} // namespace event +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/event/timer.h b/sdk/include/opentelemetry/sdk/event/timer.h new file mode 100644 index 0000000000..7de9a94ac4 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/event/timer.h @@ -0,0 +1,23 @@ +#pragma once + +#include +#include +#include + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk { +namespace event { +using TimerCallback = std::function; + +class Timer { + public: + virtual ~Timer() = default; + + virtual void EnableTimer(std::chrono::microseconds timeout, + std::error_code &error_code) noexcept = 0; +}; +} // namespace event +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE From 9685fb27ebad6dbae5f9433be9e16c9abd10dbdd Mon Sep 17 00:00:00 2001 From: Ryan Burn Date: Mon, 13 Apr 2020 18:42:47 -0700 Subject: [PATCH 02/53] Start libevent implementation --- WORKSPACE | 13 +++++++-- sdk/BUILD | 3 +++ .../sdk/common/file_descriptor.h | 2 -- sdk/src/event/libevent/BUILD | 27 +++++++++++++++++++ sdk/src/event/libevent/libevent_dispatcher.cc | 11 ++++++++ sdk/src/event/libevent/libevent_dispatcher.h | 25 +++++++++++++++++ 6 files changed, 77 insertions(+), 4 deletions(-) create mode 100644 sdk/src/event/libevent/BUILD create mode 100644 sdk/src/event/libevent/libevent_dispatcher.cc create mode 100644 sdk/src/event/libevent/libevent_dispatcher.h diff --git a/WORKSPACE b/WORKSPACE index 0b7b0354e4..b5736bda5f 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -37,10 +37,19 @@ new_local_repository( path = "third_party/opentelemetry-proto", ) +http_archive( + name = "bazel_skylib", + urls = [ + "https://github.com/bazelbuild/bazel-skylib/archive/1.0.2.zip", + ], + sha256 = "64ad2728ccdd2044216e4cec7815918b7bb3bb28c95b7e9d951f9d4eccb07625", + strip_prefix = "bazel-skylib-1.0.2", +) + http_archive( name = "rules_foreign_cc", - strip_prefix = "rules_foreign_cc-ed3db61a55c13da311d875460938c42ee8bbc2a5", - url = "https://github.com/bazelbuild/rules_foreign_cc/archive/ed3db61a55c13da311d875460938c42ee8bbc2a5.zip", + strip_prefix = "rules_foreign_cc-456425521973736ef346d93d3d6ba07d807047df", + url = "https://github.com/bazelbuild/rules_foreign_cc/archive/456425521973736ef346d93d3d6ba07d807047df.zip", ) load("@rules_foreign_cc//:workspace_definitions.bzl", "rules_foreign_cc_dependencies") diff --git a/sdk/BUILD b/sdk/BUILD index cc62431b53..e380eb7661 100644 --- a/sdk/BUILD +++ b/sdk/BUILD @@ -4,4 +4,7 @@ cc_library( name = "headers", hdrs = glob(["include/**/*.h"]), strip_include_prefix = "include", + deps = [ + "//api", + ], ) diff --git a/sdk/include/opentelemetry/sdk/common/file_descriptor.h b/sdk/include/opentelemetry/sdk/common/file_descriptor.h index dba8607d88..4eaf69d195 100644 --- a/sdk/include/opentelemetry/sdk/common/file_descriptor.h +++ b/sdk/include/opentelemetry/sdk/common/file_descriptor.h @@ -6,12 +6,10 @@ OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { -namespace common { #ifdef _WIN32 using FileDescriptor = intptr_t; #else using FileDescriptor = int; #endif -} // namespace common } // namespace sdk OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/event/libevent/BUILD b/sdk/src/event/libevent/BUILD new file mode 100644 index 0000000000..1d4e7bc922 --- /dev/null +++ b/sdk/src/event/libevent/BUILD @@ -0,0 +1,27 @@ +# Copyright 2020, OpenTelemetry Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "libevent", + srcs = glob(["**/*.cc"]), + hdrs = glob(["**/*.h"]), + include_prefix = "src/event/libevent", + deps = [ + "//sdk:headers", + "@com_github_libevent_libevent//:libevent", + ], +) + diff --git a/sdk/src/event/libevent/libevent_dispatcher.cc b/sdk/src/event/libevent/libevent_dispatcher.cc new file mode 100644 index 0000000000..b1747aa688 --- /dev/null +++ b/sdk/src/event/libevent/libevent_dispatcher.cc @@ -0,0 +1,11 @@ +#include "src/event/libevent/libevent_dispatcher.h" + +#include "event2/event.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace event { +} // namespace event +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/event/libevent/libevent_dispatcher.h b/sdk/src/event/libevent/libevent_dispatcher.h new file mode 100644 index 0000000000..84856d13a0 --- /dev/null +++ b/sdk/src/event/libevent/libevent_dispatcher.h @@ -0,0 +1,25 @@ +#pragma once + +#include "opentelemetry/sdk/event/dispatcher.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace event { +class LibeventDispatcher final : public Dispatcher { + public: + // Dispatcher + std::unique_ptr CreateFileEvent(FileDescriptor file_descriptor, + FileReadyCallback callback, + uint32_t events) noexcept override; + + std::unique_ptr CreateTimer(TimerCallback callback) noexcept override; + + void Exit() noexcept override; + + void Run() noexcept override; +}; +} // namespace event +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE From d6b175f6ee2ee44fb77ff4b0bd9c78efc3726c74 Mon Sep 17 00:00:00 2001 From: Ryan Burn Date: Mon, 13 Apr 2020 20:10:11 -0700 Subject: [PATCH 03/53] Add EventBase class --- sdk/src/event/libevent/BUILD | 1 - sdk/src/event/libevent/dispatcher.cc | 32 ++++++++++ .../{libevent_dispatcher.h => dispatcher.h} | 15 +++-- sdk/src/event/libevent/event_base.cc | 64 +++++++++++++++++++ sdk/src/event/libevent/event_base.h | 53 +++++++++++++++ sdk/src/event/libevent/libevent_dispatcher.cc | 11 ---- 6 files changed, 159 insertions(+), 17 deletions(-) create mode 100644 sdk/src/event/libevent/dispatcher.cc rename sdk/src/event/libevent/{libevent_dispatcher.h => dispatcher.h} (62%) create mode 100644 sdk/src/event/libevent/event_base.cc create mode 100644 sdk/src/event/libevent/event_base.h delete mode 100644 sdk/src/event/libevent/libevent_dispatcher.cc diff --git a/sdk/src/event/libevent/BUILD b/sdk/src/event/libevent/BUILD index 1d4e7bc922..e68237f18f 100644 --- a/sdk/src/event/libevent/BUILD +++ b/sdk/src/event/libevent/BUILD @@ -24,4 +24,3 @@ cc_library( "@com_github_libevent_libevent//:libevent", ], ) - diff --git a/sdk/src/event/libevent/dispatcher.cc b/sdk/src/event/libevent/dispatcher.cc new file mode 100644 index 0000000000..10679d3e4d --- /dev/null +++ b/sdk/src/event/libevent/dispatcher.cc @@ -0,0 +1,32 @@ +#include "src/event/libevent/dispatcher.h" + +#include "event2/event.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace event { +namespace libevent { +std::unique_ptr Dispatcher::CreateFileEvent(FileDescriptor file_descriptor, + FileReadyCallback callback, + uint32_t events) noexcept +{ + (void)file_descriptor; + (void)callback; + (void)events; + return nullptr; +} + +std::unique_ptr Dispatcher::CreateTimer(TimerCallback callback) noexcept { + (void)callback; + return nullptr; +} + +void Dispatcher::Exit() noexcept {} + + +void Dispatcher::Run() noexcept {} +} // namespace libevent +} // namespace event +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/event/libevent/libevent_dispatcher.h b/sdk/src/event/libevent/dispatcher.h similarity index 62% rename from sdk/src/event/libevent/libevent_dispatcher.h rename to sdk/src/event/libevent/dispatcher.h index 84856d13a0..ffdc2bbd67 100644 --- a/sdk/src/event/libevent/libevent_dispatcher.h +++ b/sdk/src/event/libevent/dispatcher.h @@ -6,13 +6,17 @@ OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { -namespace event { -class LibeventDispatcher final : public Dispatcher { - public: +namespace event +{ +namespace libevent +{ +class Dispatcher final : public event::Dispatcher +{ +public: // Dispatcher std::unique_ptr CreateFileEvent(FileDescriptor file_descriptor, - FileReadyCallback callback, - uint32_t events) noexcept override; + FileReadyCallback callback, + uint32_t events) noexcept override; std::unique_ptr CreateTimer(TimerCallback callback) noexcept override; @@ -20,6 +24,7 @@ class LibeventDispatcher final : public Dispatcher { void Run() noexcept override; }; +} // namespace libevent } // namespace event } // namespace sdk OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/event/libevent/event_base.cc b/sdk/src/event/libevent/event_base.cc new file mode 100644 index 0000000000..0c4425629a --- /dev/null +++ b/sdk/src/event/libevent/event_base.cc @@ -0,0 +1,64 @@ +#include "src/event/libevent/event_base.h" + +#include +#include + +#include + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace event +{ +namespace libevent +{ +//------------------------------------------------------------------------------ +// constructor +//------------------------------------------------------------------------------ +EventBase::EventBase() noexcept +{ + event_base_ = ::event_base_new(); + if (event_base_ == nullptr) + { + std::cerr << "event_base_new failed\n"; + std::terminate(); + } +} + +//------------------------------------------------------------------------------ +// destructor +//------------------------------------------------------------------------------ +EventBase::~EventBase() +{ + ::event_base_free(event_base_); +} + +//------------------------------------------------------------------------------ +// Dispatch +//------------------------------------------------------------------------------ +void EventBase::Dispatch() const noexcept +{ + auto rcode = ::event_base_dispatch(event_base_); + if (rcode == -1) + { + std::cerr << "event_base_dispatch failed\n"; + std::terminate(); + } +} + +//------------------------------------------------------------------------------ +// LoopBreak +//------------------------------------------------------------------------------ +void EventBase::LoopBreak() const noexcept +{ + auto rcode = ::event_base_loopbreak(event_base_); + if (rcode == -1) + { + std::cerr << "event_base_loopbreak failed\n"; + std::terminate(); + } +} +} // namespace libevent +} // namespace event +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/event/libevent/event_base.h b/sdk/src/event/libevent/event_base.h new file mode 100644 index 0000000000..67cedf43fd --- /dev/null +++ b/sdk/src/event/libevent/event_base.h @@ -0,0 +1,53 @@ +#pragma once + +#include + +struct event_base; + +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace event +{ +namespace libevent +{ +/** + * Wrapper for libevent's event_base struct. + */ +class EventBase +{ +public: + EventBase() noexcept; + + EventBase(EventBase &&other) = delete; + EventBase(const EventBase &) = delete; + + ~EventBase(); + + EventBase &operator=(EventBase &&other) noexcept = delete; + EventBase &operator=(const EventBase &) = delete; + + /** + * @return the underlying event_base. + */ + event_base *libevent_handle() const noexcept { return event_base_; } + + /** + * Run the dispatch event loop. + */ + void Dispatch() const noexcept; + + /** + * Break out of the dispatch event loop. + */ + void LoopBreak() const noexcept; + +private: + event_base *event_base_; +}; +} // namespace libevent +} // namespace event +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/event/libevent/libevent_dispatcher.cc b/sdk/src/event/libevent/libevent_dispatcher.cc deleted file mode 100644 index b1747aa688..0000000000 --- a/sdk/src/event/libevent/libevent_dispatcher.cc +++ /dev/null @@ -1,11 +0,0 @@ -#include "src/event/libevent/libevent_dispatcher.h" - -#include "event2/event.h" - -OPENTELEMETRY_BEGIN_NAMESPACE -namespace sdk -{ -namespace event { -} // namespace event -} // namespace sdk -OPENTELEMETRY_END_NAMESPACE From 2b86e11ac2c6b69e9d44bd1762940df2b9556b1d Mon Sep 17 00:00:00 2001 From: Ryan Burn Date: Tue, 14 Apr 2020 20:19:00 -0700 Subject: [PATCH 04/53] Integrate EventBase --- sdk/src/event/libevent/dispatcher.cc | 8 ++++++-- sdk/src/event/libevent/dispatcher.h | 4 ++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/sdk/src/event/libevent/dispatcher.cc b/sdk/src/event/libevent/dispatcher.cc index 10679d3e4d..d7ca8a73fa 100644 --- a/sdk/src/event/libevent/dispatcher.cc +++ b/sdk/src/event/libevent/dispatcher.cc @@ -22,10 +22,14 @@ std::unique_ptr Dispatcher::CreateTimer(TimerCallback callback) noexcept return nullptr; } -void Dispatcher::Exit() noexcept {} +void Dispatcher::Exit() noexcept { + event_base_.LoopBreak(); +} -void Dispatcher::Run() noexcept {} +void Dispatcher::Run() noexcept { + event_base_.Dispatch(); +} } // namespace libevent } // namespace event } // namespace sdk diff --git a/sdk/src/event/libevent/dispatcher.h b/sdk/src/event/libevent/dispatcher.h index ffdc2bbd67..da42693608 100644 --- a/sdk/src/event/libevent/dispatcher.h +++ b/sdk/src/event/libevent/dispatcher.h @@ -3,6 +3,8 @@ #include "opentelemetry/sdk/event/dispatcher.h" #include "opentelemetry/version.h" +#include "src/event/libevent/event_base.h" + OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { @@ -23,6 +25,8 @@ class Dispatcher final : public event::Dispatcher void Exit() noexcept override; void Run() noexcept override; +private: + EventBase event_base_; }; } // namespace libevent } // namespace event From 8f387dcd7c7f687bf116d411a3ae099ddb01f75b Mon Sep 17 00:00:00 2001 From: Ryan Burn Date: Tue, 14 Apr 2020 22:13:05 -0700 Subject: [PATCH 05/53] Add Event --- sdk/src/event/libevent/event.cc | 73 +++++++++++++++++++++++++++++++++ sdk/src/event/libevent/event.h | 41 ++++++++++++++++++ 2 files changed, 114 insertions(+) create mode 100644 sdk/src/event/libevent/event.cc create mode 100644 sdk/src/event/libevent/event.h diff --git a/sdk/src/event/libevent/event.cc b/sdk/src/event/libevent/event.cc new file mode 100644 index 0000000000..d7fb399b3d --- /dev/null +++ b/sdk/src/event/libevent/event.cc @@ -0,0 +1,73 @@ +#include "src/event/libevent/event.h" + +#include + +#include + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace event +{ +namespace libevent +{ +static void ToTimeval(std::chrono::microseconds timeout, timeval &tv) noexcept +{ + auto num_microseconds = timeout.count(); + const size_t microseconds_in_second = 1000000; + tv.tv_sec = static_cast(num_microseconds / microseconds_in_second); + tv.tv_usec = static_cast(num_microseconds % microseconds_in_second); +} + +Event::Event(EventBase &event_base, + FileDescriptor file_descriptor, + Callback callback, + short what, + void *context) noexcept +{ + event_ = ::event_new(event_base.libevent_handle(), file_descriptor, what, callback, context); + if (event_ == nullptr) + { + std::cerr << "event_new failed\n"; + std::terminate(); + } +} + +Event::~Event() noexcept +{ + ::event_free(event_); +} + +void Event::Add(std::chrono::microseconds timeout) noexcept +{ + int rcode; + if (timeout.count() == 0) + { + rcode = ::event_add(event_, nullptr); + } + else + { + timeval tv; + ToTimeval(timeout, tv); + rcode = ::event_add(event_, &tv); + } + if (rcode == -1) + { + std::cerr << "event_add failed\n"; + std::terminate(); + } +} + +void Event::Delete() noexcept +{ + auto rcode = ::event_del(event_); + if (rcode == -1) + { + std::cerr << "event_del failed\n"; + std::terminate(); + } +} +} // namespace libevent +} // namespace event +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/event/libevent/event.h b/sdk/src/event/libevent/event.h new file mode 100644 index 0000000000..d7b3a9a0ba --- /dev/null +++ b/sdk/src/event/libevent/event.h @@ -0,0 +1,41 @@ +#pragma once + +#include + +#include "src/event/libevent/event_base.h" + +#include "opentelemetry/sdk/common/file_descriptor.h" +#include "opentelemetry/version.h" + +struct event; + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace event +{ +namespace libevent +{ +class Event { + public: + using Callback = void (*)(FileDescriptor, short what, void *context); + + Event(EventBase &event_base, + FileDescriptor file_descriptor, + Callback callback, + short what, + void *context) noexcept; + + ~Event() noexcept; + + virtual void Add(std::chrono::microseconds timeout = std::chrono::microseconds{0}) noexcept; + + virtual void Delete() noexcept; + + private: + ::event* event_; +}; +} // namespace libevent +} // namespace event +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE From bd576396a11e44b2f8e0d3c113e477d0ea6b07e0 Mon Sep 17 00:00:00 2001 From: Ryan Burn Date: Wed, 15 Apr 2020 00:07:32 -0700 Subject: [PATCH 06/53] Add Timer --- sdk/include/opentelemetry/sdk/event/timer.h | 5 +-- sdk/src/event/libevent/timer.cc | 29 ++++++++++++++++ sdk/src/event/libevent/timer.h | 38 +++++++++++++++++++++ 3 files changed, 70 insertions(+), 2 deletions(-) create mode 100644 sdk/src/event/libevent/timer.cc create mode 100644 sdk/src/event/libevent/timer.h diff --git a/sdk/include/opentelemetry/sdk/event/timer.h b/sdk/include/opentelemetry/sdk/event/timer.h index 7de9a94ac4..8403f60c49 100644 --- a/sdk/include/opentelemetry/sdk/event/timer.h +++ b/sdk/include/opentelemetry/sdk/event/timer.h @@ -15,8 +15,9 @@ class Timer { public: virtual ~Timer() = default; - virtual void EnableTimer(std::chrono::microseconds timeout, - std::error_code &error_code) noexcept = 0; + virtual void EnableTimer(std::chrono::microseconds timeout) noexcept = 0; + + virtual void DisableTimer() noexcept = 0; }; } // namespace event } // namespace sdk diff --git a/sdk/src/event/libevent/timer.cc b/sdk/src/event/libevent/timer.cc new file mode 100644 index 0000000000..97c4d3d3d3 --- /dev/null +++ b/sdk/src/event/libevent/timer.cc @@ -0,0 +1,29 @@ +#include "src/event/libevent/timer.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace event +{ +namespace libevent +{ +Timer::Timer(EventBase &event_base, Callback callback) noexcept + : event_{event_base, -1, OnTimeout, 0, this}, callback_{std::move(callback)} +{} + +void Timer::EnableTimer(std::chrono::microseconds timeout) noexcept { + event_.Add(timeout); +} + +void Timer::DisableTimer() noexcept { + event_.Delete(); +} + +void Timer::OnTimeout(FileDescriptor /*file_descriptor*/, short /*what*/, void *context) noexcept +{ + static_cast(context)->callback_(); +} +} // namespace libevent +} // namespace event +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/event/libevent/timer.h b/sdk/src/event/libevent/timer.h new file mode 100644 index 0000000000..c4772dbe8e --- /dev/null +++ b/sdk/src/event/libevent/timer.h @@ -0,0 +1,38 @@ +#pragma once + +#include + +#include "src/event/libevent/event.h" + +#include "opentelemetry/sdk/event/timer.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace event +{ +namespace libevent +{ +class Timer final : public event::Timer { + public: + using Callback = std::function; + + Timer(EventBase& event_base, Callback callback) noexcept; + + void EnableTimer(std::chrono::microseconds timeout) noexcept override; + + void DisableTimer() noexcept override; + + private: + Event event_; + Callback callback_; + + static void OnTimeout(FileDescriptor /*file_descriptor*/, + short /*what*/, + void *context) noexcept; +}; +} // namespace libevent +} // namespace event +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE From 3448df0c67f4d28294bd0a3d27b0e5ef5f48e636 Mon Sep 17 00:00:00 2001 From: Ryan Burn Date: Wed, 15 Apr 2020 18:32:37 -0700 Subject: [PATCH 07/53] Add Timer test --- sdk/include/opentelemetry/sdk/event/timer.h | 6 ++++++ sdk/src/event/libevent/dispatcher.cc | 7 ++++--- sdk/src/event/libevent/dispatcher.h | 8 ++++---- sdk/test/event/libevent/BUILD | 11 +++++++++++ sdk/test/event/libevent/dispatcher_test.cc | 20 ++++++++++++++++++++ 5 files changed, 45 insertions(+), 7 deletions(-) create mode 100644 sdk/test/event/libevent/BUILD create mode 100644 sdk/test/event/libevent/dispatcher_test.cc diff --git a/sdk/include/opentelemetry/sdk/event/timer.h b/sdk/include/opentelemetry/sdk/event/timer.h index 8403f60c49..908308ef40 100644 --- a/sdk/include/opentelemetry/sdk/event/timer.h +++ b/sdk/include/opentelemetry/sdk/event/timer.h @@ -17,6 +17,12 @@ class Timer { virtual void EnableTimer(std::chrono::microseconds timeout) noexcept = 0; + template + void EnableTimer(std::chrono::duration timeout) noexcept + { + this->EnableTimer(std::chrono::duration_cast(timeout)); + } + virtual void DisableTimer() noexcept = 0; }; } // namespace event diff --git a/sdk/src/event/libevent/dispatcher.cc b/sdk/src/event/libevent/dispatcher.cc index d7ca8a73fa..6c4bcfa561 100644 --- a/sdk/src/event/libevent/dispatcher.cc +++ b/sdk/src/event/libevent/dispatcher.cc @@ -1,4 +1,5 @@ #include "src/event/libevent/dispatcher.h" +#include "src/event/libevent/timer.h" #include "event2/event.h" @@ -17,9 +18,9 @@ std::unique_ptr Dispatcher::CreateFileEvent(FileDescriptor file_descr return nullptr; } -std::unique_ptr Dispatcher::CreateTimer(TimerCallback callback) noexcept { - (void)callback; - return nullptr; +std::unique_ptr Dispatcher::CreateTimer(TimerCallback callback) noexcept +{ + return std::unique_ptr{new (std::nothrow) Timer{event_base_, callback}}; } void Dispatcher::Exit() noexcept { diff --git a/sdk/src/event/libevent/dispatcher.h b/sdk/src/event/libevent/dispatcher.h index da42693608..1582246251 100644 --- a/sdk/src/event/libevent/dispatcher.h +++ b/sdk/src/event/libevent/dispatcher.h @@ -16,11 +16,11 @@ class Dispatcher final : public event::Dispatcher { public: // Dispatcher - std::unique_ptr CreateFileEvent(FileDescriptor file_descriptor, - FileReadyCallback callback, - uint32_t events) noexcept override; + std::unique_ptr CreateFileEvent(FileDescriptor file_descriptor, + FileReadyCallback callback, + uint32_t events) noexcept override; - std::unique_ptr CreateTimer(TimerCallback callback) noexcept override; + std::unique_ptr CreateTimer(TimerCallback callback) noexcept override; void Exit() noexcept override; diff --git a/sdk/test/event/libevent/BUILD b/sdk/test/event/libevent/BUILD new file mode 100644 index 0000000000..0e918a4d41 --- /dev/null +++ b/sdk/test/event/libevent/BUILD @@ -0,0 +1,11 @@ +cc_test( + name = "dispatcher_test", + srcs = [ + "dispatcher_test.cc", + ], + deps = [ + "//sdk/src/event/libevent", + "@com_google_googletest//:gtest_main", + ], +) + diff --git a/sdk/test/event/libevent/dispatcher_test.cc b/sdk/test/event/libevent/dispatcher_test.cc new file mode 100644 index 0000000000..a5478af67a --- /dev/null +++ b/sdk/test/event/libevent/dispatcher_test.cc @@ -0,0 +1,20 @@ +#include "src/event/libevent/dispatcher.h" + +#include + +#include +using opentelemetry::sdk::event::libevent::Dispatcher; + +TEST(DispatcherTest, Timer) { + Dispatcher dispatcher; + std::chrono::steady_clock::time_point t1, t2; + auto timer = dispatcher.CreateTimer([&] { + t2 = std::chrono::steady_clock::now(); + }); + timer->EnableTimer(std::chrono::milliseconds{10}); + t1 = std::chrono::steady_clock::now(); + dispatcher.Run(); + auto duration = t2 - t1; + EXPECT_TRUE(duration >= std::chrono::milliseconds{10}); + EXPECT_TRUE(duration < std::chrono::milliseconds{20}); +} From 2d2ea8ed12784d1a0b9e9a46ffcf0560c2fd4476 Mon Sep 17 00:00:00 2001 From: Ryan Burn Date: Wed, 15 Apr 2020 20:13:17 -0700 Subject: [PATCH 08/53] Add FileEvent --- sdk/src/event/libevent/dispatcher.cc | 13 +++--- sdk/src/event/libevent/file_event.cc | 69 ++++++++++++++++++++++++++++ sdk/src/event/libevent/file_event.h | 35 ++++++++++++++ sdk/src/event/libevent/timer.cc | 6 ++- 4 files changed, 115 insertions(+), 8 deletions(-) create mode 100644 sdk/src/event/libevent/file_event.cc create mode 100644 sdk/src/event/libevent/file_event.h diff --git a/sdk/src/event/libevent/dispatcher.cc b/sdk/src/event/libevent/dispatcher.cc index 6c4bcfa561..b1b4a1ccb1 100644 --- a/sdk/src/event/libevent/dispatcher.cc +++ b/sdk/src/event/libevent/dispatcher.cc @@ -1,5 +1,6 @@ #include "src/event/libevent/dispatcher.h" #include "src/event/libevent/timer.h" +#include "src/event/libevent/file_event.h" #include "event2/event.h" @@ -8,14 +9,12 @@ namespace sdk { namespace event { namespace libevent { -std::unique_ptr Dispatcher::CreateFileEvent(FileDescriptor file_descriptor, - FileReadyCallback callback, - uint32_t events) noexcept +std::unique_ptr Dispatcher::CreateFileEvent(FileDescriptor file_descriptor, + FileReadyCallback callback, + uint32_t events) noexcept { - (void)file_descriptor; - (void)callback; - (void)events; - return nullptr; + return std::unique_ptr{ + new (std::nothrow) FileEvent{event_base_, file_descriptor, events, callback}}; } std::unique_ptr Dispatcher::CreateTimer(TimerCallback callback) noexcept diff --git a/sdk/src/event/libevent/file_event.cc b/sdk/src/event/libevent/file_event.cc new file mode 100644 index 0000000000..9f5937caff --- /dev/null +++ b/sdk/src/event/libevent/file_event.cc @@ -0,0 +1,69 @@ +#include "src/event/libevent/file_event.h" + +#include + +#include "event2/event.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace event +{ +namespace libevent +{ +static short ToLibeventWhat(uint32_t events) noexcept +{ + short result = 0; + if (events & FileReadyType::kRead) + { + result |= EV_READ; + } + if (events & FileReadyType::kWrite) + { + result |= EV_WRITE; + } + if (events & FileReadyType::kClosed) + { + result |= EV_CLOSED; + } + assert(events != 0); + return result; +} + +static uint32_t FromLibeventWhat(short what) noexcept +{ + uint32_t result = 0; + if (what & EV_READ) + { + result |= FileReadyType::kRead; + } + if (what & EV_WRITE) + { + result |= FileReadyType::kWrite; + } + if (what & EV_CLOSED) + { + result |= FileReadyType::kClosed; + } + return result; +} + +FileEvent::FileEvent(EventBase &event_base, + FileDescriptor file_descriptor, + uint32_t events, + Callback callback) noexcept + : event_{event_base, file_descriptor, OnFileEvent, ToLibeventWhat(events), this}, + callback_{std::move(callback)} +{ + assert(callback_); + event_.Add(); +} + +void FileEvent::OnFileEvent(FileDescriptor /*file_descriptor*/, short what, void *context) noexcept +{ + static_cast(context)->callback_(FromLibeventWhat(what)); +} +} // namespace libevent +} // namespace event +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/event/libevent/file_event.h b/sdk/src/event/libevent/file_event.h new file mode 100644 index 0000000000..bad8509b54 --- /dev/null +++ b/sdk/src/event/libevent/file_event.h @@ -0,0 +1,35 @@ +#pragma once + +#include + +#include "src/event/libevent/event.h" + +#include "opentelemetry/sdk/event/file_event.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace event +{ +namespace libevent +{ +class FileEvent final : public event::FileEvent { + public: + using Callback = std::function; + + FileEvent(EventBase &event_base, + FileDescriptor file_descriptor, + uint32_t events, + Callback callback) noexcept; + + private: + Event event_; + Callback callback_; + + static void OnFileEvent(FileDescriptor file_descriptor, short what, void *context) noexcept; +}; +} // namespace libevent +} // namespace event +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/event/libevent/timer.cc b/sdk/src/event/libevent/timer.cc index 97c4d3d3d3..3bfed9508d 100644 --- a/sdk/src/event/libevent/timer.cc +++ b/sdk/src/event/libevent/timer.cc @@ -1,5 +1,7 @@ #include "src/event/libevent/timer.h" +#include + OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { @@ -9,7 +11,9 @@ namespace libevent { Timer::Timer(EventBase &event_base, Callback callback) noexcept : event_{event_base, -1, OnTimeout, 0, this}, callback_{std::move(callback)} -{} +{ + assert(callback_); +} void Timer::EnableTimer(std::chrono::microseconds timeout) noexcept { event_.Add(timeout); From dc35d6ea0faef371a9eda7b0395cdf72743a4d19 Mon Sep 17 00:00:00 2001 From: Ryan Burn Date: Wed, 15 Apr 2020 22:37:51 -0700 Subject: [PATCH 09/53] Add Exit test --- sdk/test/event/libevent/dispatcher_test.cc | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/sdk/test/event/libevent/dispatcher_test.cc b/sdk/test/event/libevent/dispatcher_test.cc index a5478af67a..7e45c8800f 100644 --- a/sdk/test/event/libevent/dispatcher_test.cc +++ b/sdk/test/event/libevent/dispatcher_test.cc @@ -3,14 +3,14 @@ #include #include +using opentelemetry::sdk::event::Timer; using opentelemetry::sdk::event::libevent::Dispatcher; -TEST(DispatcherTest, Timer) { +TEST(DispatcherTest, Timer) +{ Dispatcher dispatcher; std::chrono::steady_clock::time_point t1, t2; - auto timer = dispatcher.CreateTimer([&] { - t2 = std::chrono::steady_clock::now(); - }); + auto timer = dispatcher.CreateTimer([&] { t2 = std::chrono::steady_clock::now(); }); timer->EnableTimer(std::chrono::milliseconds{10}); t1 = std::chrono::steady_clock::now(); dispatcher.Run(); @@ -18,3 +18,15 @@ TEST(DispatcherTest, Timer) { EXPECT_TRUE(duration >= std::chrono::milliseconds{10}); EXPECT_TRUE(duration < std::chrono::milliseconds{20}); } + +TEST(DispatcherTest, Exit) +{ + Dispatcher dispatcher; + std::unique_ptr timer; + auto f = [&] { + timer->EnableTimer(std::chrono::milliseconds{1}); + dispatcher.Exit(); + }; + timer = dispatcher.CreateTimer(f); + dispatcher.Run(); +} From fb83a8d2c058f943b39f903484295a6e2a30de86 Mon Sep 17 00:00:00 2001 From: Ryan Burn Date: Wed, 15 Apr 2020 23:56:08 -0700 Subject: [PATCH 10/53] Integrate libevent with cmake --- CMakeLists.txt | 9 +++++ ci/Dockerfile | 2 ++ ci/install_libevent.sh | 7 ++++ cmake/Modules/FindLibevent.cmake | 48 ++++++++++++++++++++++++++ cmake/TBD | 0 sdk/src/CMakeLists.txt | 1 + sdk/src/event/CMakeLists.txt | 3 ++ sdk/src/event/libevent/CMakeLists.txt | 7 ++++ sdk/test/CMakeLists.txt | 1 + sdk/test/event/CMakeLists.txt | 3 ++ sdk/test/event/libevent/CMakeLists.txt | 6 ++++ 11 files changed, 87 insertions(+) create mode 100755 ci/install_libevent.sh create mode 100644 cmake/Modules/FindLibevent.cmake delete mode 100644 cmake/TBD create mode 100644 sdk/src/event/CMakeLists.txt create mode 100644 sdk/src/event/libevent/CMakeLists.txt create mode 100644 sdk/test/event/CMakeLists.txt create mode 100644 sdk/test/event/libevent/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index 9fbfc1c059..ecca0a9914 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,12 +12,16 @@ endif() option(WITH_OTPROTOCOL "Whether to include the OpenTelemetry Protocol in the SDK" OFF) +option(WITH_LIBEVENT + "Build SDK with libevent support" ON) set(WITH_PROTOBUF OFF) if(WITH_OTPROTOCOL) set(WITH_PROTOBUF ON) endif() +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/") + include(CTest) find_package(Threads) @@ -42,6 +46,11 @@ if(WITH_OTPROTOCOL) include(third_party/opentelemetry-proto/Protobuf.cmake) endif() +if(WITH_LIBEVENT) + find_package(Libevent REQUIRED) + include_directories(SYSTEM ${LIBEVENT_INCLUDE_DIRS}) +endif() + if(BUILD_TESTING) find_package(GTest REQUIRED) find_package(benchmark REQUIRED) diff --git a/ci/Dockerfile b/ci/Dockerfile index a1f43af928..888eeb8de3 100644 --- a/ci/Dockerfile +++ b/ci/Dockerfile @@ -6,6 +6,7 @@ ADD setup_ci_environment.sh /setup-ci ADD setup_cmake.sh /setup-ci ADD install_gcc48.sh /setup-ci ADD install_bazelisk.sh /setup-ci +ADD install_libevent.sh /setup-ci ADD install_protobuf.sh /setup-ci ADD install_format_tools.sh /setup-ci @@ -13,5 +14,6 @@ RUN /setup-ci/setup_ci_environment.sh \ && /setup-ci/setup_cmake.sh \ && /setup-ci/install_gcc48.sh \ && /setup-ci/install_bazelisk.sh \ + && /setup-ci/install_libevent.sh \ && /setup-ci/install_protobuf.sh \ && /setup-ci/install_format_tools.sh diff --git a/ci/install_libevent.sh b/ci/install_libevent.sh new file mode 100755 index 0000000000..da40ec61c8 --- /dev/null +++ b/ci/install_libevent.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +set -e + +apt-get install --no-install-recommends --no-install-suggests -y \ + libevent-dev + diff --git a/cmake/Modules/FindLibevent.cmake b/cmake/Modules/FindLibevent.cmake new file mode 100644 index 0000000000..91932b3b87 --- /dev/null +++ b/cmake/Modules/FindLibevent.cmake @@ -0,0 +1,48 @@ +# find LibEvent +# an event notification library (http://libevent.org/) +# +# Usage: +# LIBEVENT_INCLUDE_DIRS, where to find LibEvent headers +# LIBEVENT_LIBRARIES, LibEvent libraries +# Libevent_FOUND, If false, do not try to use libevent +# +# Taken from https://github.com/apache/thrift/blob/7edc8faefd391ce11eca3023a35cc54bcb2eb1af/build/cmake/FindLibevent.cmake +# with modification. + +set(LIBEVENT_ROOT CACHE PATH "Root directory of libevent installation") +set(LibEvent_EXTRA_PREFIXES /usr/local /opt/local "$ENV{HOME}" ${LIBEVENT_ROOT}) +foreach(prefix ${LibEvent_EXTRA_PREFIXES}) + list(APPEND LibEvent_INCLUDE_PATHS "${prefix}/include") + list(APPEND LibEvent_LIBRARIES_PATHS "${prefix}/lib") +endforeach() + +# Looking for "event.h" will find the Platform SDK include dir on windows +# so we also look for a peer header like evhttp.h to get the right path +find_path(LIBEVENT_INCLUDE_DIRS evhttp.h event.h PATHS ${LibEvent_INCLUDE_PATHS}) + +# "lib" prefix is needed on Windows in some cases +# newer versions of libevent use three libraries +find_library(LIBEVENT_LIBRARIES NAMES event_core PATHS ${LibEvent_LIBRARIES_PATHS}) + +if (LIBEVENT_LIBRARIES AND LIBEVENT_INCLUDE_DIRS) + set(Libevent_FOUND TRUE) + set(LIBEVENT_LIBRARIES ${LIBEVENT_LIBRARIES}) +else () + set(Libevent_FOUND FALSE) +endif () + +if (Libevent_FOUND) + if (NOT Libevent_FIND_QUIETLY) + message(STATUS "Found libevent: ${LIBEVENT_LIBRARIES}") + endif () +else () + if (LibEvent_FIND_REQUIRED) + message(FATAL_ERROR "Could NOT find libevent.") + endif () + message(STATUS "libevent NOT found.") +endif () + +mark_as_advanced( + LIBEVENT_LIBRARIES + LIBEVENT_INCLUDE_DIRS + ) diff --git a/cmake/TBD b/cmake/TBD deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/sdk/src/CMakeLists.txt b/sdk/src/CMakeLists.txt index 8c8b199946..c96a933b88 100644 --- a/sdk/src/CMakeLists.txt +++ b/sdk/src/CMakeLists.txt @@ -1,2 +1,3 @@ add_subdirectory(common) +add_subdirectory(event) add_subdirectory(trace) diff --git a/sdk/src/event/CMakeLists.txt b/sdk/src/event/CMakeLists.txt new file mode 100644 index 0000000000..b7892a965c --- /dev/null +++ b/sdk/src/event/CMakeLists.txt @@ -0,0 +1,3 @@ +if(WITH_LIBEVENT) + add_subdirectory(libevent) +endif() diff --git a/sdk/src/event/libevent/CMakeLists.txt b/sdk/src/event/libevent/CMakeLists.txt new file mode 100644 index 0000000000..d2add4325e --- /dev/null +++ b/sdk/src/event/libevent/CMakeLists.txt @@ -0,0 +1,7 @@ +add_library(opentelemetry_event_libevent + dispatcher.cc + event.cc + event_base.cc + file_event.cc + timer.cc) +target_link_libraries(opentelemetry_event_libevent ${LIBEVENT_LIBRARIES}) diff --git a/sdk/test/CMakeLists.txt b/sdk/test/CMakeLists.txt index 8c8b199946..c96a933b88 100644 --- a/sdk/test/CMakeLists.txt +++ b/sdk/test/CMakeLists.txt @@ -1,2 +1,3 @@ add_subdirectory(common) +add_subdirectory(event) add_subdirectory(trace) diff --git a/sdk/test/event/CMakeLists.txt b/sdk/test/event/CMakeLists.txt new file mode 100644 index 0000000000..b7892a965c --- /dev/null +++ b/sdk/test/event/CMakeLists.txt @@ -0,0 +1,3 @@ +if(WITH_LIBEVENT) + add_subdirectory(libevent) +endif() diff --git a/sdk/test/event/libevent/CMakeLists.txt b/sdk/test/event/libevent/CMakeLists.txt new file mode 100644 index 0000000000..01c7ed9706 --- /dev/null +++ b/sdk/test/event/libevent/CMakeLists.txt @@ -0,0 +1,6 @@ +foreach(testname dispatcher_test) + add_executable(${testname} "${testname}.cc") + target_link_libraries(${testname} ${GTEST_BOTH_LIBRARIES} + ${CMAKE_THREAD_LIBS_INIT} opentelemetry_event_libevent) + gtest_add_tests(TARGET ${testname} TEST_PREFIX event. TEST_LIST ${testname}) +endforeach() From 2d400114d5724f870f75b36ace9b6d933ff3079f Mon Sep 17 00:00:00 2001 From: Ryan Burn Date: Wed, 15 Apr 2020 23:56:53 -0700 Subject: [PATCH 11/53] Drop kTimeout --- sdk/include/opentelemetry/sdk/event/file_event.h | 1 - 1 file changed, 1 deletion(-) diff --git a/sdk/include/opentelemetry/sdk/event/file_event.h b/sdk/include/opentelemetry/sdk/event/file_event.h index 078a4a77e1..4f9e86ba43 100644 --- a/sdk/include/opentelemetry/sdk/event/file_event.h +++ b/sdk/include/opentelemetry/sdk/event/file_event.h @@ -14,7 +14,6 @@ struct FileReadyType { static const uint32_t kRead = 1; static const uint32_t kWrite = 2; static const uint32_t kClosed = 3; - static const uint32_t kTimeout = 4; }; using FileReadyCallback = std::function; From cabab7c64483016d214760593a0857955609366c Mon Sep 17 00:00:00 2001 From: Ryan Burn Date: Thu, 16 Apr 2020 00:08:00 -0700 Subject: [PATCH 12/53] Integrat libevent with CI --- .circleci/config.yml | 2 ++ ci/install_windows_libevent.ps1 | 5 +++++ 2 files changed, 7 insertions(+) create mode 100644 ci/install_windows_libevent.ps1 diff --git a/.circleci/config.yml b/.circleci/config.yml index ea4d74a365..0750cfa46e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -13,6 +13,7 @@ jobs: - run: ./ci/setup_ci_environment.sh - run: ./ci/setup_cmake.sh - run: ./ci/install_protobuf.sh + - run: ./ci/install_libevent.sh - run: ./ci/do_ci.sh cmake.test - run: ./ci/do_ci.sh cmake.exporter.otprotocol.test - store_artifacts: @@ -126,6 +127,7 @@ jobs: - run: command: ./ci/install_windows_protobuf.ps1 no_output_timeout: 15m + - run: ./ci/install_windows_libevent.ps1 - run: ./ci/do_ci.ps1 cmake.test - run: ./ci/do_ci.sh cmake.exporter.otprotocol.test diff --git a/ci/install_windows_libevent.ps1 b/ci/install_windows_libevent.ps1 new file mode 100644 index 0000000000..292c0dd15d --- /dev/null +++ b/ci/install_windows_libevent.ps1 @@ -0,0 +1,5 @@ +$ErrorActionPreference = "Stop" +trap { $host.SetShouldExit(1) } + +cd vcpkg +./vcpkg install libevent:x64-windows From d76fd24fa3fee06be27bdb74ac9312b1790545a2 Mon Sep 17 00:00:00 2001 From: Ryan Burn Date: Thu, 16 Apr 2020 14:06:32 -0700 Subject: [PATCH 13/53] Add commenting --- .../opentelemetry/sdk/event/dispatcher.h | 21 +++++++++++++++++++ .../opentelemetry/sdk/event/file_event.h | 17 +++++++++++---- sdk/include/opentelemetry/sdk/event/timer.h | 14 +++++++++++++ 3 files changed, 48 insertions(+), 4 deletions(-) diff --git a/sdk/include/opentelemetry/sdk/event/dispatcher.h b/sdk/include/opentelemetry/sdk/event/dispatcher.h index 48f92497bd..9a8ca4104a 100644 --- a/sdk/include/opentelemetry/sdk/event/dispatcher.h +++ b/sdk/include/opentelemetry/sdk/event/dispatcher.h @@ -10,18 +10,39 @@ OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { namespace event { +/** + * Interface for managing asynchronous events. + */ class Dispatcher { public: virtual ~Dispatcher() = default; + /** + * Create an event that triggers when a file descriptor becomes readable or writable. + * @param file_descriptor the file descriptor to monitor + * @param callback the callback to call when event triggers + * @param events the events to monitor + * @return a handle for the event + */ virtual std::unique_ptr CreateFileEvent(FileDescriptor file_descriptor, FileReadyCallback callback, uint32_t events) noexcept = 0; + /** + * Create a timer event. + * @callback the callback to call when the event triggers + * @return a handle for the timer + */ virtual std::unique_ptr CreateTimer(TimerCallback callback) noexcept = 0; + /** + * Stop the event loop. + */ virtual void Exit() noexcept = 0; + /** + * Run the event loop until. + */ virtual void Run() noexcept = 0; }; } // namespace event diff --git a/sdk/include/opentelemetry/sdk/event/file_event.h b/sdk/include/opentelemetry/sdk/event/file_event.h index 4f9e86ba43..1e4fa5a1b5 100644 --- a/sdk/include/opentelemetry/sdk/event/file_event.h +++ b/sdk/include/opentelemetry/sdk/event/file_event.h @@ -10,14 +10,23 @@ OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { namespace event { -struct FileReadyType { - static const uint32_t kRead = 1; - static const uint32_t kWrite = 2; - static const uint32_t kClosed = 3; +/** + * Available events that can be monitored on a file descriptor. + */ +struct FileReadyType +{ + static const uint32_t kRead = 1; + static const uint32_t kWrite = (1 << 1); + static const uint32_t kClosed = (1 << 2); }; using FileReadyCallback = std::function; +/** + * Manages an event set on a file descriptor. + * + * Note: Must be freed before the dipatcher is destructed + */ class FileEvent { public: virtual ~FileEvent() = default; diff --git a/sdk/include/opentelemetry/sdk/event/timer.h b/sdk/include/opentelemetry/sdk/event/timer.h index 908308ef40..3e17881ae8 100644 --- a/sdk/include/opentelemetry/sdk/event/timer.h +++ b/sdk/include/opentelemetry/sdk/event/timer.h @@ -11,10 +11,19 @@ namespace sdk { namespace event { using TimerCallback = std::function; +/** + * Manages a timer event. + * + * Note: Must be freed before the dipatcher is destructed + */ class Timer { public: virtual ~Timer() = default; + /** + * Enable a pending timeout. If a timeout is already pending, it will be reset to the new + * timeout. + */ virtual void EnableTimer(std::chrono::microseconds timeout) noexcept = 0; template @@ -23,6 +32,11 @@ class Timer { this->EnableTimer(std::chrono::duration_cast(timeout)); } + /** + * Disable a pending timeout. + * + * If no timeout is active, it does nothing. + */ virtual void DisableTimer() noexcept = 0; }; } // namespace event From fda54ee8c0fe2ad24fbf42645aae21a24d78d155 Mon Sep 17 00:00:00 2001 From: Ryan Burn Date: Thu, 16 Apr 2020 14:07:15 -0700 Subject: [PATCH 14/53] Reformat --- CMakeLists.txt | 3 +- WORKSPACE | 18 +++---- bazel/libevent.BUILD | 4 +- cmake/Modules/FindLibevent.cmake | 2 +- .../sdk/common/file_descriptor.h | 5 +- .../opentelemetry/sdk/event/dispatcher.h | 15 +++--- .../opentelemetry/sdk/event/file_event.h | 20 ++++---- sdk/include/opentelemetry/sdk/event/timer.h | 51 ++++++++++--------- sdk/src/event/libevent/CMakeLists.txt | 8 +-- sdk/src/event/libevent/dispatcher.cc | 17 ++++--- sdk/src/event/libevent/dispatcher.h | 1 + sdk/src/event/libevent/event.h | 27 +++++----- sdk/src/event/libevent/file_event.h | 23 +++++---- sdk/src/event/libevent/timer.cc | 6 ++- sdk/src/event/libevent/timer.h | 23 ++++----- sdk/test/event/libevent/BUILD | 1 - 16 files changed, 117 insertions(+), 107 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ecca0a9914..7ec31bc3f1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,8 +12,7 @@ endif() option(WITH_OTPROTOCOL "Whether to include the OpenTelemetry Protocol in the SDK" OFF) -option(WITH_LIBEVENT - "Build SDK with libevent support" ON) +option(WITH_LIBEVENT "Build SDK with libevent support" ON) set(WITH_PROTOBUF OFF) if(WITH_OTPROTOCOL) diff --git a/WORKSPACE b/WORKSPACE index b5736bda5f..8e0d1dc65b 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -39,17 +39,17 @@ new_local_repository( http_archive( name = "bazel_skylib", + sha256 = "64ad2728ccdd2044216e4cec7815918b7bb3bb28c95b7e9d951f9d4eccb07625", + strip_prefix = "bazel-skylib-1.0.2", urls = [ "https://github.com/bazelbuild/bazel-skylib/archive/1.0.2.zip", ], - sha256 = "64ad2728ccdd2044216e4cec7815918b7bb3bb28c95b7e9d951f9d4eccb07625", - strip_prefix = "bazel-skylib-1.0.2", ) http_archive( - name = "rules_foreign_cc", - strip_prefix = "rules_foreign_cc-456425521973736ef346d93d3d6ba07d807047df", - url = "https://github.com/bazelbuild/rules_foreign_cc/archive/456425521973736ef346d93d3d6ba07d807047df.zip", + name = "rules_foreign_cc", + strip_prefix = "rules_foreign_cc-456425521973736ef346d93d3d6ba07d807047df", + url = "https://github.com/bazelbuild/rules_foreign_cc/archive/456425521973736ef346d93d3d6ba07d807047df.zip", ) load("@rules_foreign_cc//:workspace_definitions.bzl", "rules_foreign_cc_dependencies") @@ -59,12 +59,12 @@ rules_foreign_cc_dependencies([ http_archive( name = "com_github_libevent_libevent", - urls = [ - "https://github.com/libevent/libevent/archive/release-2.1.8-stable.zip" - ], + build_file = "//bazel:libevent.BUILD", sha256 = "70158101eab7ed44fd9cc34e7f247b3cae91a8e4490745d9d6eb7edc184e4d96", strip_prefix = "libevent-release-2.1.8-stable", - build_file = "//bazel:libevent.BUILD", + urls = [ + "https://github.com/libevent/libevent/archive/release-2.1.8-stable.zip", + ], ) # GoogleTest framework. diff --git a/bazel/libevent.BUILD b/bazel/libevent.BUILD index 92723238ce..3c83e5f61e 100644 --- a/bazel/libevent.BUILD +++ b/bazel/libevent.BUILD @@ -2,8 +2,8 @@ load("@rules_foreign_cc//tools/build_defs:cmake.bzl", "cmake_external") filegroup( - name = "srcs", - srcs = glob(["**"]), + name = "srcs", + srcs = glob(["**"]), ) cmake_external( diff --git a/cmake/Modules/FindLibevent.cmake b/cmake/Modules/FindLibevent.cmake index 91932b3b87..1f2e7ff2ea 100644 --- a/cmake/Modules/FindLibevent.cmake +++ b/cmake/Modules/FindLibevent.cmake @@ -1,7 +1,7 @@ # find LibEvent # an event notification library (http://libevent.org/) # -# Usage: +# Usage: # LIBEVENT_INCLUDE_DIRS, where to find LibEvent headers # LIBEVENT_LIBRARIES, LibEvent libraries # Libevent_FOUND, If false, do not try to use libevent diff --git a/sdk/include/opentelemetry/sdk/common/file_descriptor.h b/sdk/include/opentelemetry/sdk/common/file_descriptor.h index 4eaf69d195..08edc008a5 100644 --- a/sdk/include/opentelemetry/sdk/common/file_descriptor.h +++ b/sdk/include/opentelemetry/sdk/common/file_descriptor.h @@ -5,11 +5,12 @@ #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE -namespace sdk { +namespace sdk +{ #ifdef _WIN32 using FileDescriptor = intptr_t; #else using FileDescriptor = int; #endif -} // namespace sdk +} // namespace sdk OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/event/dispatcher.h b/sdk/include/opentelemetry/sdk/event/dispatcher.h index 9a8ca4104a..b375829b12 100644 --- a/sdk/include/opentelemetry/sdk/event/dispatcher.h +++ b/sdk/include/opentelemetry/sdk/event/dispatcher.h @@ -8,13 +8,16 @@ #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE -namespace sdk { -namespace event { +namespace sdk +{ +namespace event +{ /** * Interface for managing asynchronous events. */ -class Dispatcher { - public: +class Dispatcher +{ +public: virtual ~Dispatcher() = default; /** @@ -45,6 +48,6 @@ class Dispatcher { */ virtual void Run() noexcept = 0; }; -} // namespace event -} // namespace sdk +} // namespace event +} // namespace sdk OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/event/file_event.h b/sdk/include/opentelemetry/sdk/event/file_event.h index 1e4fa5a1b5..9b6e8637fc 100644 --- a/sdk/include/opentelemetry/sdk/event/file_event.h +++ b/sdk/include/opentelemetry/sdk/event/file_event.h @@ -1,15 +1,17 @@ #pragma once #include -#include #include #include +#include #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE -namespace sdk { -namespace event { +namespace sdk +{ +namespace event +{ /** * Available events that can be monitored on a file descriptor. */ @@ -27,11 +29,11 @@ using FileReadyCallback = std::function; * * Note: Must be freed before the dipatcher is destructed */ -class FileEvent { - public: - virtual ~FileEvent() = default; - +class FileEvent +{ +public: + virtual ~FileEvent() = default; }; -} // namespace event -} // namespace sdk +} // namespace event +} // namespace sdk OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/event/timer.h b/sdk/include/opentelemetry/sdk/event/timer.h index 3e17881ae8..3f09331381 100644 --- a/sdk/include/opentelemetry/sdk/event/timer.h +++ b/sdk/include/opentelemetry/sdk/event/timer.h @@ -1,14 +1,16 @@ #pragma once #include -#include #include +#include #include "opentelemetry/version.h" OPENTELEMETRY_BEGIN_NAMESPACE -namespace sdk { -namespace event { +namespace sdk +{ +namespace event +{ using TimerCallback = std::function; /** @@ -16,29 +18,30 @@ using TimerCallback = std::function; * * Note: Must be freed before the dipatcher is destructed */ -class Timer { - public: - virtual ~Timer() = default; +class Timer +{ +public: + virtual ~Timer() = default; - /** - * Enable a pending timeout. If a timeout is already pending, it will be reset to the new - * timeout. - */ - virtual void EnableTimer(std::chrono::microseconds timeout) noexcept = 0; + /** + * Enable a pending timeout. If a timeout is already pending, it will be reset to the new + * timeout. + */ + virtual void EnableTimer(std::chrono::microseconds timeout) noexcept = 0; - template - void EnableTimer(std::chrono::duration timeout) noexcept - { - this->EnableTimer(std::chrono::duration_cast(timeout)); - } + template + void EnableTimer(std::chrono::duration timeout) noexcept + { + this->EnableTimer(std::chrono::duration_cast(timeout)); + } - /** - * Disable a pending timeout. - * - * If no timeout is active, it does nothing. - */ - virtual void DisableTimer() noexcept = 0; + /** + * Disable a pending timeout. + * + * If no timeout is active, it does nothing. + */ + virtual void DisableTimer() noexcept = 0; }; -} // namespace event -} // namespace sdk +} // namespace event +} // namespace sdk OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/event/libevent/CMakeLists.txt b/sdk/src/event/libevent/CMakeLists.txt index d2add4325e..693c8b8d81 100644 --- a/sdk/src/event/libevent/CMakeLists.txt +++ b/sdk/src/event/libevent/CMakeLists.txt @@ -1,7 +1,3 @@ -add_library(opentelemetry_event_libevent - dispatcher.cc - event.cc - event_base.cc - file_event.cc - timer.cc) +add_library(opentelemetry_event_libevent dispatcher.cc event.cc event_base.cc + file_event.cc timer.cc) target_link_libraries(opentelemetry_event_libevent ${LIBEVENT_LIBRARIES}) diff --git a/sdk/src/event/libevent/dispatcher.cc b/sdk/src/event/libevent/dispatcher.cc index b1b4a1ccb1..5c11c18fcd 100644 --- a/sdk/src/event/libevent/dispatcher.cc +++ b/sdk/src/event/libevent/dispatcher.cc @@ -1,14 +1,16 @@ #include "src/event/libevent/dispatcher.h" -#include "src/event/libevent/timer.h" #include "src/event/libevent/file_event.h" +#include "src/event/libevent/timer.h" #include "event2/event.h" OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { -namespace event { -namespace libevent { +namespace event +{ +namespace libevent +{ std::unique_ptr Dispatcher::CreateFileEvent(FileDescriptor file_descriptor, FileReadyCallback callback, uint32_t events) noexcept @@ -22,15 +24,16 @@ std::unique_ptr Dispatcher::CreateTimer(TimerCallback callback) no return std::unique_ptr{new (std::nothrow) Timer{event_base_, callback}}; } -void Dispatcher::Exit() noexcept { +void Dispatcher::Exit() noexcept +{ event_base_.LoopBreak(); } - -void Dispatcher::Run() noexcept { +void Dispatcher::Run() noexcept +{ event_base_.Dispatch(); } -} // namespace libevent +} // namespace libevent } // namespace event } // namespace sdk OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/event/libevent/dispatcher.h b/sdk/src/event/libevent/dispatcher.h index 1582246251..b246c0c934 100644 --- a/sdk/src/event/libevent/dispatcher.h +++ b/sdk/src/event/libevent/dispatcher.h @@ -25,6 +25,7 @@ class Dispatcher final : public event::Dispatcher void Exit() noexcept override; void Run() noexcept override; + private: EventBase event_base_; }; diff --git a/sdk/src/event/libevent/event.h b/sdk/src/event/libevent/event.h index d7b3a9a0ba..baf314a46c 100644 --- a/sdk/src/event/libevent/event.h +++ b/sdk/src/event/libevent/event.h @@ -16,24 +16,25 @@ namespace event { namespace libevent { -class Event { - public: - using Callback = void (*)(FileDescriptor, short what, void *context); +class Event +{ +public: + using Callback = void (*)(FileDescriptor, short what, void *context); - Event(EventBase &event_base, - FileDescriptor file_descriptor, - Callback callback, - short what, - void *context) noexcept; + Event(EventBase &event_base, + FileDescriptor file_descriptor, + Callback callback, + short what, + void *context) noexcept; - ~Event() noexcept; + ~Event() noexcept; - virtual void Add(std::chrono::microseconds timeout = std::chrono::microseconds{0}) noexcept; + virtual void Add(std::chrono::microseconds timeout = std::chrono::microseconds{0}) noexcept; - virtual void Delete() noexcept; + virtual void Delete() noexcept; - private: - ::event* event_; +private: + ::event *event_; }; } // namespace libevent } // namespace event diff --git a/sdk/src/event/libevent/file_event.h b/sdk/src/event/libevent/file_event.h index bad8509b54..eca4f10150 100644 --- a/sdk/src/event/libevent/file_event.h +++ b/sdk/src/event/libevent/file_event.h @@ -14,20 +14,21 @@ namespace event { namespace libevent { -class FileEvent final : public event::FileEvent { - public: - using Callback = std::function; +class FileEvent final : public event::FileEvent +{ +public: + using Callback = std::function; - FileEvent(EventBase &event_base, - FileDescriptor file_descriptor, - uint32_t events, - Callback callback) noexcept; + FileEvent(EventBase &event_base, + FileDescriptor file_descriptor, + uint32_t events, + Callback callback) noexcept; - private: - Event event_; - Callback callback_; +private: + Event event_; + Callback callback_; - static void OnFileEvent(FileDescriptor file_descriptor, short what, void *context) noexcept; + static void OnFileEvent(FileDescriptor file_descriptor, short what, void *context) noexcept; }; } // namespace libevent } // namespace event diff --git a/sdk/src/event/libevent/timer.cc b/sdk/src/event/libevent/timer.cc index 3bfed9508d..e8df443635 100644 --- a/sdk/src/event/libevent/timer.cc +++ b/sdk/src/event/libevent/timer.cc @@ -15,11 +15,13 @@ Timer::Timer(EventBase &event_base, Callback callback) noexcept assert(callback_); } -void Timer::EnableTimer(std::chrono::microseconds timeout) noexcept { +void Timer::EnableTimer(std::chrono::microseconds timeout) noexcept +{ event_.Add(timeout); } -void Timer::DisableTimer() noexcept { +void Timer::DisableTimer() noexcept +{ event_.Delete(); } diff --git a/sdk/src/event/libevent/timer.h b/sdk/src/event/libevent/timer.h index c4772dbe8e..720aa251a0 100644 --- a/sdk/src/event/libevent/timer.h +++ b/sdk/src/event/libevent/timer.h @@ -14,23 +14,22 @@ namespace event { namespace libevent { -class Timer final : public event::Timer { - public: - using Callback = std::function; +class Timer final : public event::Timer +{ +public: + using Callback = std::function; - Timer(EventBase& event_base, Callback callback) noexcept; + Timer(EventBase &event_base, Callback callback) noexcept; - void EnableTimer(std::chrono::microseconds timeout) noexcept override; + void EnableTimer(std::chrono::microseconds timeout) noexcept override; - void DisableTimer() noexcept override; + void DisableTimer() noexcept override; - private: - Event event_; - Callback callback_; +private: + Event event_; + Callback callback_; - static void OnTimeout(FileDescriptor /*file_descriptor*/, - short /*what*/, - void *context) noexcept; + static void OnTimeout(FileDescriptor /*file_descriptor*/, short /*what*/, void *context) noexcept; }; } // namespace libevent } // namespace event diff --git a/sdk/test/event/libevent/BUILD b/sdk/test/event/libevent/BUILD index 0e918a4d41..f10804f97f 100644 --- a/sdk/test/event/libevent/BUILD +++ b/sdk/test/event/libevent/BUILD @@ -8,4 +8,3 @@ cc_test( "@com_google_googletest//:gtest_main", ], ) - From f3bb9b9c7a521e5d0eaa6b5a1726ca39b014d65b Mon Sep 17 00:00:00 2001 From: Ryan Burn Date: Thu, 16 Apr 2020 15:45:00 -0700 Subject: [PATCH 15/53] Add cmake depedency to bazel --- WORKSPACE | 1 + bazel/BUILD | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/WORKSPACE b/WORKSPACE index 8e0d1dc65b..1106def6af 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -55,6 +55,7 @@ http_archive( load("@rules_foreign_cc//:workspace_definitions.bzl", "rules_foreign_cc_dependencies") rules_foreign_cc_dependencies([ + "//bazel:built_cmake_toolchain", ]) http_archive( diff --git a/bazel/BUILD b/bazel/BUILD index 2d352a7d30..1b6c851733 100644 --- a/bazel/BUILD +++ b/bazel/BUILD @@ -4,3 +4,13 @@ config_setting( name = "windows", constraint_values = ["@bazel_tools//platforms:windows"], ) + +toolchain( + name = "built_cmake_toolchain", + exec_compatible_with = [ + "@bazel_tools//platforms:osx", + "@bazel_tools//platforms:x86_64", + ], + toolchain = "@rules_foreign_cc//tools/build_defs/native_tools:built_cmake", + toolchain_type = "@rules_foreign_cc//tools/build_defs:cmake_toolchain", +) From e5596d8a0b700354412e82a9fdfbe2576ebee4fb Mon Sep 17 00:00:00 2001 From: Ryan Burn Date: Thu, 16 Apr 2020 16:24:54 -0700 Subject: [PATCH 16/53] Fix cmake toolchain --- WORKSPACE | 2 ++ bazel/BUILD | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/WORKSPACE b/WORKSPACE index 1106def6af..1663a1d0be 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -56,6 +56,8 @@ load("@rules_foreign_cc//:workspace_definitions.bzl", "rules_foreign_cc_dependen rules_foreign_cc_dependencies([ "//bazel:built_cmake_toolchain", + "//bazel:built_ninja_toolchain_osx", + "//bazel:built_ninja_toolchain_linux", ]) http_archive( diff --git a/bazel/BUILD b/bazel/BUILD index 1b6c851733..3fd2898a22 100644 --- a/bazel/BUILD +++ b/bazel/BUILD @@ -14,3 +14,23 @@ toolchain( toolchain = "@rules_foreign_cc//tools/build_defs/native_tools:built_cmake", toolchain_type = "@rules_foreign_cc//tools/build_defs:cmake_toolchain", ) + +toolchain( + name = "built_ninja_toolchain_osx", + exec_compatible_with = [ + "@bazel_tools//platforms:osx", + "@bazel_tools//platforms:x86_64", + ], + toolchain = "@rules_foreign_cc//tools/build_defs/native_tools:built_ninja", + toolchain_type = "@rules_foreign_cc//tools/build_defs:ninja_toolchain", +) + +toolchain( + name = "built_ninja_toolchain_linux", + exec_compatible_with = [ + "@bazel_tools//platforms:linux", + "@bazel_tools//platforms:x86_64", + ], + toolchain = "@rules_foreign_cc//tools/build_defs/native_tools:built_ninja", + toolchain_type = "@rules_foreign_cc//tools/build_defs:ninja_toolchain", +) From fe208d1dfc26cce6d8b9a1f1857a0286467b834f Mon Sep 17 00:00:00 2001 From: Ryan Burn Date: Thu, 16 Apr 2020 16:39:55 -0700 Subject: [PATCH 17/53] Fix cmake toolchain --- WORKSPACE | 3 ++- bazel/BUILD | 12 +++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 1663a1d0be..3270f100e9 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -55,8 +55,9 @@ http_archive( load("@rules_foreign_cc//:workspace_definitions.bzl", "rules_foreign_cc_dependencies") rules_foreign_cc_dependencies([ - "//bazel:built_cmake_toolchain", + "//bazel:built_cmake_toolchain_osx", "//bazel:built_ninja_toolchain_osx", + "//bazel:built_cmake_toolchain_linux", "//bazel:built_ninja_toolchain_linux", ]) diff --git a/bazel/BUILD b/bazel/BUILD index 3fd2898a22..a0f906485b 100644 --- a/bazel/BUILD +++ b/bazel/BUILD @@ -6,7 +6,7 @@ config_setting( ) toolchain( - name = "built_cmake_toolchain", + name = "built_cmake_toolchain_osx", exec_compatible_with = [ "@bazel_tools//platforms:osx", "@bazel_tools//platforms:x86_64", @@ -25,6 +25,16 @@ toolchain( toolchain_type = "@rules_foreign_cc//tools/build_defs:ninja_toolchain", ) +toolchain( + name = "built_cmake_toolchain_linux", + exec_compatible_with = [ + "@bazel_tools//platforms:linux", + "@bazel_tools//platforms:x86_64", + ], + toolchain = "@rules_foreign_cc//tools/build_defs/native_tools:built_cmake", + toolchain_type = "@rules_foreign_cc//tools/build_defs:cmake_toolchain", +) + toolchain( name = "built_ninja_toolchain_linux", exec_compatible_with = [ From 3ac2aa54fda3fa77e43e5acc05ccba7824ff5011 Mon Sep 17 00:00:00 2001 From: Ryan Burn Date: Thu, 16 Apr 2020 20:11:38 -0700 Subject: [PATCH 18/53] Fix ci issues --- .circleci/config.yml | 10 +++++++++- WORKSPACE | 4 ---- bazel/BUILD | 40 -------------------------------------- ci/install_osx_bazelisk.sh | 6 ------ ci/install_osx_cmake.sh | 5 +++++ 5 files changed, 14 insertions(+), 51 deletions(-) delete mode 100755 ci/install_osx_bazelisk.sh create mode 100755 ci/install_osx_cmake.sh diff --git a/.circleci/config.yml b/.circleci/config.yml index 0750cfa46e..6bddcc95ea 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -43,9 +43,10 @@ jobs: steps: - checkout - run: ./ci/setup_ci_environment.sh + - run: ./ci/setup_cmake.sh - run: ./ci/install_bazelisk.sh - run: ./ci/install_gcc48.sh - - run: CC=/usr/bin/gcc-4.8 ./ci/do_ci.sh bazel.legacy.test + - run: CC=/usr/bin/gcc-4.8 CXX=/usr/bin/g++-4.8 ./ci/do_ci.sh bazel.legacy.test bazel_test: resource_class: xlarge @@ -54,6 +55,7 @@ jobs: steps: - checkout - run: ./ci/setup_ci_environment.sh + - run: ./ci/setup_cmake.sh - run: ./ci/install_bazelisk.sh - run: ./ci/do_ci.sh bazel.test @@ -64,6 +66,7 @@ jobs: steps: - checkout - run: ./ci/setup_ci_environment.sh + - run: ./ci/setup_cmake.sh - run: ./ci/install_bazelisk.sh - run: ./ci/do_ci.sh bazel.noexcept @@ -74,6 +77,7 @@ jobs: steps: - checkout - run: ./ci/setup_ci_environment.sh + - run: ./ci/setup_cmake.sh - run: ./ci/install_bazelisk.sh - run: ./ci/do_ci.sh bazel.asan @@ -84,6 +88,7 @@ jobs: steps: - checkout - run: ./ci/setup_ci_environment.sh + - run: ./ci/setup_cmake.sh - run: ./ci/install_bazelisk.sh - run: ./ci/do_ci.sh bazel.tsan @@ -94,6 +99,7 @@ jobs: steps: - checkout - run: ./ci/setup_ci_environment.sh + - run: ./ci/setup_cmake.sh - run: ./ci/install_bazelisk.sh - run: env BENCHMARK_DIR=/benchmark ./ci/do_ci.sh benchmark - store_artifacts: @@ -115,6 +121,7 @@ jobs: xcode: "11.0.0" steps: - checkout + - run: ./ci/install_osx_cmake.sh - run: ./ci/install_osx_bazelisk.sh - run: ./ci/do_ci.sh bazel.test @@ -135,6 +142,7 @@ jobs: executor: win/vs2019 steps: - checkout + - run: ./ci/setup_windows_cmake.ps1 - run: ./ci/install_windows_bazelisk.ps1 - run: ./ci/do_ci.ps1 bazel.build diff --git a/WORKSPACE b/WORKSPACE index 3270f100e9..8e0d1dc65b 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -55,10 +55,6 @@ http_archive( load("@rules_foreign_cc//:workspace_definitions.bzl", "rules_foreign_cc_dependencies") rules_foreign_cc_dependencies([ - "//bazel:built_cmake_toolchain_osx", - "//bazel:built_ninja_toolchain_osx", - "//bazel:built_cmake_toolchain_linux", - "//bazel:built_ninja_toolchain_linux", ]) http_archive( diff --git a/bazel/BUILD b/bazel/BUILD index a0f906485b..2d352a7d30 100644 --- a/bazel/BUILD +++ b/bazel/BUILD @@ -4,43 +4,3 @@ config_setting( name = "windows", constraint_values = ["@bazel_tools//platforms:windows"], ) - -toolchain( - name = "built_cmake_toolchain_osx", - exec_compatible_with = [ - "@bazel_tools//platforms:osx", - "@bazel_tools//platforms:x86_64", - ], - toolchain = "@rules_foreign_cc//tools/build_defs/native_tools:built_cmake", - toolchain_type = "@rules_foreign_cc//tools/build_defs:cmake_toolchain", -) - -toolchain( - name = "built_ninja_toolchain_osx", - exec_compatible_with = [ - "@bazel_tools//platforms:osx", - "@bazel_tools//platforms:x86_64", - ], - toolchain = "@rules_foreign_cc//tools/build_defs/native_tools:built_ninja", - toolchain_type = "@rules_foreign_cc//tools/build_defs:ninja_toolchain", -) - -toolchain( - name = "built_cmake_toolchain_linux", - exec_compatible_with = [ - "@bazel_tools//platforms:linux", - "@bazel_tools//platforms:x86_64", - ], - toolchain = "@rules_foreign_cc//tools/build_defs/native_tools:built_cmake", - toolchain_type = "@rules_foreign_cc//tools/build_defs:cmake_toolchain", -) - -toolchain( - name = "built_ninja_toolchain_linux", - exec_compatible_with = [ - "@bazel_tools//platforms:linux", - "@bazel_tools//platforms:x86_64", - ], - toolchain = "@rules_foreign_cc//tools/build_defs/native_tools:built_ninja", - toolchain_type = "@rules_foreign_cc//tools/build_defs:ninja_toolchain", -) diff --git a/ci/install_osx_bazelisk.sh b/ci/install_osx_bazelisk.sh deleted file mode 100755 index 9c09285051..0000000000 --- a/ci/install_osx_bazelisk.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash - -set -e - -brew install bazelisk -sudo ln -s /usr/local/bin/bazelisk /usr/local/bin/bazel diff --git a/ci/install_osx_cmake.sh b/ci/install_osx_cmake.sh new file mode 100755 index 0000000000..5bbe1eda01 --- /dev/null +++ b/ci/install_osx_cmake.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +set -e + +brew install cmake From 919d396e43b0efc1e0fd632f040f41e071cc8718 Mon Sep 17 00:00:00 2001 From: Ryan Burn Date: Thu, 16 Apr 2020 20:18:57 -0700 Subject: [PATCH 19/53] Put back removed file --- ci/install_osx_bazelisk.sh | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100755 ci/install_osx_bazelisk.sh diff --git a/ci/install_osx_bazelisk.sh b/ci/install_osx_bazelisk.sh new file mode 100755 index 0000000000..9c09285051 --- /dev/null +++ b/ci/install_osx_bazelisk.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +set -e + +brew install bazelisk +sudo ln -s /usr/local/bin/bazelisk /usr/local/bin/bazel From 03eb0775a5726ea726da7fc64ed4f68676ed1402 Mon Sep 17 00:00:00 2001 From: Ryan Burn Date: Thu, 16 Apr 2020 20:58:52 -0700 Subject: [PATCH 20/53] Fix bazel build on windows --- bazel/libevent.BUILD | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/bazel/libevent.BUILD b/bazel/libevent.BUILD index 3c83e5f61e..11590e52cd 100644 --- a/bazel/libevent.BUILD +++ b/bazel/libevent.BUILD @@ -19,5 +19,9 @@ cmake_external( }, lib_source = ":srcs", static_libraries = ["libevent.a"], + make_commands = select({ + "//bazel:windows": None, + "//conditions:default" : ["MSBuild.exe INSTALL.vcxproj"] + }), visibility = ["//visibility:public"], ) From 7d343ce6317872cc01437918addbba6a1e243ede Mon Sep 17 00:00:00 2001 From: Ryan Burn Date: Thu, 16 Apr 2020 21:12:47 -0700 Subject: [PATCH 21/53] Fix bazel build --- bazel/libevent.BUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bazel/libevent.BUILD b/bazel/libevent.BUILD index 11590e52cd..193e7ac932 100644 --- a/bazel/libevent.BUILD +++ b/bazel/libevent.BUILD @@ -20,8 +20,8 @@ cmake_external( lib_source = ":srcs", static_libraries = ["libevent.a"], make_commands = select({ - "//bazel:windows": None, - "//conditions:default" : ["MSBuild.exe INSTALL.vcxproj"] + "@io_opentelemetry_cpp//bazel:windows": ["MSBuild.exe INSTALL.vcxproj"], + "//conditions:default" : None, }), visibility = ["//visibility:public"], ) From 7bbbe29ec1f4205dffd711e86ab1735f3cda37ce Mon Sep 17 00:00:00 2001 From: Ryan Burn Date: Fri, 17 Apr 2020 00:16:38 -0700 Subject: [PATCH 22/53] Fix windows library name --- bazel/libevent.BUILD | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/bazel/libevent.BUILD b/bazel/libevent.BUILD index 193e7ac932..35d1b84860 100644 --- a/bazel/libevent.BUILD +++ b/bazel/libevent.BUILD @@ -18,7 +18,10 @@ cmake_external( "EVENT__DISABLE_TESTS": "on", }, lib_source = ":srcs", - static_libraries = ["libevent.a"], + static_libraries = select({ + "@io_opentelemetry_cpp//bazel:windows": ["libevent.lib"], + "//conditions:default": ["libevent.a"], + }), make_commands = select({ "@io_opentelemetry_cpp//bazel:windows": ["MSBuild.exe INSTALL.vcxproj"], "//conditions:default" : None, From 11f0e463804236808d44c05d833e031cd797d0ef Mon Sep 17 00:00:00 2001 From: Ryan Burn Date: Fri, 17 Apr 2020 00:21:31 -0700 Subject: [PATCH 23/53] Fix windows bazel build --- bazel/libevent.BUILD | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/bazel/libevent.BUILD b/bazel/libevent.BUILD index 35d1b84860..109f7aa6b9 100644 --- a/bazel/libevent.BUILD +++ b/bazel/libevent.BUILD @@ -18,8 +18,12 @@ cmake_external( "EVENT__DISABLE_TESTS": "on", }, lib_source = ":srcs", + generate_crosstool_file = select({ + "@io_opentelemetry_cpp//bazel:windows": True, + "//conditions:default": None, + }), static_libraries = select({ - "@io_opentelemetry_cpp//bazel:windows": ["libevent.lib"], + "@io_opentelemetry_cpp//bazel:windows": None, "//conditions:default": ["libevent.a"], }), make_commands = select({ From 515d01cf21f24690fc8b49526da12f034932a5d8 Mon Sep 17 00:00:00 2001 From: Ryan Burn Date: Fri, 17 Apr 2020 00:39:26 -0700 Subject: [PATCH 24/53] Fix windows library name --- bazel/libevent.BUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bazel/libevent.BUILD b/bazel/libevent.BUILD index 109f7aa6b9..2a10360084 100644 --- a/bazel/libevent.BUILD +++ b/bazel/libevent.BUILD @@ -23,7 +23,7 @@ cmake_external( "//conditions:default": None, }), static_libraries = select({ - "@io_opentelemetry_cpp//bazel:windows": None, + "@io_opentelemetry_cpp//bazel:windows": ["event.lib"], "//conditions:default": ["libevent.a"], }), make_commands = select({ From 18791c1806b9c51d096e50d13695552ad7075c46 Mon Sep 17 00:00:00 2001 From: Ryan Burn Date: Fri, 17 Apr 2020 01:41:08 -0700 Subject: [PATCH 25/53] Fix osx build --- sdk/test/event/libevent/BUILD | 1 + 1 file changed, 1 insertion(+) diff --git a/sdk/test/event/libevent/BUILD b/sdk/test/event/libevent/BUILD index f10804f97f..124de5dddd 100644 --- a/sdk/test/event/libevent/BUILD +++ b/sdk/test/event/libevent/BUILD @@ -3,6 +3,7 @@ cc_test( srcs = [ "dispatcher_test.cc", ], + linkstatic = 1, deps = [ "//sdk/src/event/libevent", "@com_google_googletest//:gtest_main", From 68ce934c4f29d8a3f159a85ebfe78ba85ec1e277 Mon Sep 17 00:00:00 2001 From: Ryan Burn Date: Fri, 17 Apr 2020 01:51:15 -0700 Subject: [PATCH 26/53] Tweak test parameters --- sdk/test/event/libevent/dispatcher_test.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/test/event/libevent/dispatcher_test.cc b/sdk/test/event/libevent/dispatcher_test.cc index 7e45c8800f..ff8cd3332e 100644 --- a/sdk/test/event/libevent/dispatcher_test.cc +++ b/sdk/test/event/libevent/dispatcher_test.cc @@ -15,7 +15,7 @@ TEST(DispatcherTest, Timer) t1 = std::chrono::steady_clock::now(); dispatcher.Run(); auto duration = t2 - t1; - EXPECT_TRUE(duration >= std::chrono::milliseconds{10}); + EXPECT_TRUE(duration > std::chrono::milliseconds{5}); EXPECT_TRUE(duration < std::chrono::milliseconds{20}); } From 72fd4df87bf902ca58b907eaa691395f443a1f10 Mon Sep 17 00:00:00 2001 From: Ryan Burn Date: Mon, 20 Apr 2020 14:24:42 -0700 Subject: [PATCH 27/53] Make test less flaky --- sdk/test/event/libevent/dispatcher_test.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sdk/test/event/libevent/dispatcher_test.cc b/sdk/test/event/libevent/dispatcher_test.cc index ff8cd3332e..e96370354a 100644 --- a/sdk/test/event/libevent/dispatcher_test.cc +++ b/sdk/test/event/libevent/dispatcher_test.cc @@ -11,12 +11,12 @@ TEST(DispatcherTest, Timer) Dispatcher dispatcher; std::chrono::steady_clock::time_point t1, t2; auto timer = dispatcher.CreateTimer([&] { t2 = std::chrono::steady_clock::now(); }); - timer->EnableTimer(std::chrono::milliseconds{10}); + timer->EnableTimer(std::chrono::milliseconds{100}); t1 = std::chrono::steady_clock::now(); dispatcher.Run(); auto duration = t2 - t1; - EXPECT_TRUE(duration > std::chrono::milliseconds{5}); - EXPECT_TRUE(duration < std::chrono::milliseconds{20}); + EXPECT_TRUE(duration > std::chrono::milliseconds{50}); + EXPECT_TRUE(duration < std::chrono::milliseconds{200}); } TEST(DispatcherTest, Exit) From 30cff7996306d651b622c4d2c0e88a29b1b8eb5f Mon Sep 17 00:00:00 2001 From: Ryan Burn Date: Mon, 20 Apr 2020 14:44:38 -0700 Subject: [PATCH 28/53] Fix ci --- CMakeLists.txt | 19 +++++++++++-------- ci/do_ci.ps1 | 2 ++ ci/do_ci.sh | 2 ++ 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7ec31bc3f1..5540b8d757 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,6 +10,7 @@ if(NOT DEFINED CMAKE_CXX_STANDARD) set(CMAKE_CXX_STANDARD 11) endif() +option(WITH_SDK "Whether to build the SDK or just the API" ON) option(WITH_OTPROTOCOL "Whether to include the OpenTelemetry Protocol in the SDK" OFF) option(WITH_LIBEVENT "Build SDK with libevent support" ON) @@ -32,7 +33,7 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zc:__cplusplus") endif() -if(WITH_PROTOBUF) +if(WITH_SDK AND WITH_PROTOBUF) set(protobuf_MODULE_COMPATIBLE ON) find_package(Protobuf CONFIG NAMES protobuf) # Older versions of protobuf don't use cmake config files. @@ -41,11 +42,11 @@ if(WITH_PROTOBUF) endif() endif() -if(WITH_OTPROTOCOL) +if(WITH_SDK AND WITH_OTPROTOCOL) include(third_party/opentelemetry-proto/Protobuf.cmake) endif() -if(WITH_LIBEVENT) +if(WITH_SDK AND WITH_LIBEVENT) find_package(Libevent REQUIRED) include_directories(SYSTEM ${LIBEVENT_INCLUDE_DIRS}) endif() @@ -56,11 +57,13 @@ if(BUILD_TESTING) include_directories(SYSTEM ${GTEST_INCLUDE_DIRS}) endif() +include_directories(.) include_directories(api/include) add_subdirectory(api) -include_directories(sdk/include) -include_directories(sdk) -add_subdirectory(sdk) -include_directories(.) -add_subdirectory(exporters) +if (WITH_SDK) + include_directories(sdk/include) + include_directories(sdk) + add_subdirectory(sdk) + add_subdirectory(exporters) +endif() add_subdirectory(examples) diff --git a/ci/do_ci.ps1 b/ci/do_ci.ps1 index 367d76e080..9a53c50526 100644 --- a/ci/do_ci.ps1 +++ b/ci/do_ci.ps1 @@ -74,6 +74,7 @@ switch ($action) { cmake $SRC_DIR ` -DVCPKG_TARGET_TRIPLET=x64-windows ` "-DCMAKE_TOOLCHAIN_FILE=$VCPKG_DIR\scripts\buildsystems\vcpkg.cmake" + -DWITH_SDK=OFF \ $exit = $LASTEXITCODE if ($exit -ne 0) { exit $exit @@ -90,6 +91,7 @@ switch ($action) { cmake $SRC_DIR ` -DVCPKG_TARGET_TRIPLET=x64-windows ` "-DCMAKE_TOOLCHAIN_FILE=$VCPKG_DIR\scripts\buildsystems\vcpkg.cmake" + -DWITH_SDK=OFF \ $exit = $LASTEXITCODE if ($exit -ne 0) { exit $exit diff --git a/ci/do_ci.sh b/ci/do_ci.sh index b6d23f763f..a53d13c9e4 100755 --- a/ci/do_ci.sh +++ b/ci/do_ci.sh @@ -61,6 +61,7 @@ EOF -DCMAKE_CXX_FLAGS="-Werror" \ -DCMAKE_EXE_LINKER_FLAGS="$LINKER_FLAGS" \ -DCMAKE_SHARED_LINKER_FLAGS="$LINKER_FLAGS" \ + -DWITH_SDK=OFF \ "${SRC_DIR}" make example_plugin cp examples/plugin/plugin/libexample_plugin.so ${PLUGIN_DIR} @@ -70,6 +71,7 @@ EOF rm -rf * cmake -DCMAKE_BUILD_TYPE=Debug \ -DCMAKE_CXX_FLAGS="-Werror" \ + -DWITH_SDK=OFF \ "${SRC_DIR}" make load_plugin_example examples/plugin/load/load_plugin_example ${PLUGIN_DIR}/libexample_plugin.so /dev/null From e79b5f6b741ec94b9fa68cc4cb76962ed5d2ef39 Mon Sep 17 00:00:00 2001 From: Ryan Burn Date: Mon, 20 Apr 2020 14:45:05 -0700 Subject: [PATCH 29/53] Reformat --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5540b8d757..995f5c559b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -60,7 +60,7 @@ endif() include_directories(.) include_directories(api/include) add_subdirectory(api) -if (WITH_SDK) +if(WITH_SDK) include_directories(sdk/include) include_directories(sdk) add_subdirectory(sdk) From 9b62085673de71b4ebea048f501adcec4ab93540 Mon Sep 17 00:00:00 2001 From: Ryan Burn Date: Mon, 20 Apr 2020 14:51:19 -0700 Subject: [PATCH 30/53] Fix windows ci --- ci/do_ci.ps1 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ci/do_ci.ps1 b/ci/do_ci.ps1 index 9a53c50526..f892eef725 100644 --- a/ci/do_ci.ps1 +++ b/ci/do_ci.ps1 @@ -73,8 +73,8 @@ switch ($action) { cd "$BUILD_DIR" cmake $SRC_DIR ` -DVCPKG_TARGET_TRIPLET=x64-windows ` - "-DCMAKE_TOOLCHAIN_FILE=$VCPKG_DIR\scripts\buildsystems\vcpkg.cmake" - -DWITH_SDK=OFF \ + "-DCMAKE_TOOLCHAIN_FILE=$VCPKG_DIR\scripts\buildsystems\vcpkg.cmake" ` + -DWITH_SDK=OFF $exit = $LASTEXITCODE if ($exit -ne 0) { exit $exit @@ -90,8 +90,8 @@ switch ($action) { cd "$BUILD_DIR" cmake $SRC_DIR ` -DVCPKG_TARGET_TRIPLET=x64-windows ` - "-DCMAKE_TOOLCHAIN_FILE=$VCPKG_DIR\scripts\buildsystems\vcpkg.cmake" - -DWITH_SDK=OFF \ + "-DCMAKE_TOOLCHAIN_FILE=$VCPKG_DIR\scripts\buildsystems\vcpkg.cmake" ` + -DWITH_SDK=OFF $exit = $LASTEXITCODE if ($exit -ne 0) { exit $exit From c120b8d6af16231b37bf5998487929ceb626654b Mon Sep 17 00:00:00 2001 From: Ryan Burn Date: Wed, 22 Apr 2020 13:56:17 -0700 Subject: [PATCH 31/53] Fix comments --- sdk/include/opentelemetry/sdk/event/dispatcher.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sdk/include/opentelemetry/sdk/event/dispatcher.h b/sdk/include/opentelemetry/sdk/event/dispatcher.h index b375829b12..c9c4fa6d30 100644 --- a/sdk/include/opentelemetry/sdk/event/dispatcher.h +++ b/sdk/include/opentelemetry/sdk/event/dispatcher.h @@ -33,7 +33,7 @@ class Dispatcher /** * Create a timer event. - * @callback the callback to call when the event triggers + * @callback the callback to call when the event triggers * @return a handle for the timer */ virtual std::unique_ptr CreateTimer(TimerCallback callback) noexcept = 0; @@ -44,7 +44,7 @@ class Dispatcher virtual void Exit() noexcept = 0; /** - * Run the event loop until. + * Run the event loop until all events have been processed or Exit is called. */ virtual void Run() noexcept = 0; }; From 61b6b941717ce2f11e628cb257c4f7842af77ca8 Mon Sep 17 00:00:00 2001 From: Ryan Burn Date: Wed, 22 Apr 2020 14:46:50 -0700 Subject: [PATCH 32/53] Separate out IoDispatcher --- .../opentelemetry/sdk/event/dispatcher.h | 11 -------- .../opentelemetry/sdk/event/io_dispatcher.h | 26 +++++++++++++++++++ .../{dispatcher.cc => io_dispatcher.cc} | 14 +++++----- .../{dispatcher.h => io_dispatcher.h} | 4 +-- sdk/test/event/libevent/BUILD | 4 +-- sdk/test/event/libevent/CMakeLists.txt | 2 +- ...spatcher_test.cc => io_dispatcher_test.cc} | 8 +++--- 7 files changed, 42 insertions(+), 27 deletions(-) create mode 100644 sdk/include/opentelemetry/sdk/event/io_dispatcher.h rename sdk/src/event/libevent/{dispatcher.cc => io_dispatcher.cc} (54%) rename sdk/src/event/libevent/{dispatcher.h => io_dispatcher.h} (87%) rename sdk/test/event/libevent/{dispatcher_test.cc => io_dispatcher_test.cc} (82%) diff --git a/sdk/include/opentelemetry/sdk/event/dispatcher.h b/sdk/include/opentelemetry/sdk/event/dispatcher.h index c9c4fa6d30..5b98f708ea 100644 --- a/sdk/include/opentelemetry/sdk/event/dispatcher.h +++ b/sdk/include/opentelemetry/sdk/event/dispatcher.h @@ -20,17 +20,6 @@ class Dispatcher public: virtual ~Dispatcher() = default; - /** - * Create an event that triggers when a file descriptor becomes readable or writable. - * @param file_descriptor the file descriptor to monitor - * @param callback the callback to call when event triggers - * @param events the events to monitor - * @return a handle for the event - */ - virtual std::unique_ptr CreateFileEvent(FileDescriptor file_descriptor, - FileReadyCallback callback, - uint32_t events) noexcept = 0; - /** * Create a timer event. * @callback the callback to call when the event triggers diff --git a/sdk/include/opentelemetry/sdk/event/io_dispatcher.h b/sdk/include/opentelemetry/sdk/event/io_dispatcher.h new file mode 100644 index 0000000000..3ccb73c580 --- /dev/null +++ b/sdk/include/opentelemetry/sdk/event/io_dispatcher.h @@ -0,0 +1,26 @@ +#pragma once + +#include "opentelemetry/sdk/event/dispatcher.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace event +{ +class IoDispatcher : public Dispatcher +{ +public: + /** + * Create an event that triggers when a file descriptor becomes readable or writable. + * @param file_descriptor the file descriptor to monitor + * @param callback the callback to call when event triggers + * @param events the events to monitor + * @return a handle for the event + */ + virtual std::unique_ptr CreateFileEvent(FileDescriptor file_descriptor, + FileReadyCallback callback, + uint32_t events) noexcept = 0; +}; +} // namespace event +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/event/libevent/dispatcher.cc b/sdk/src/event/libevent/io_dispatcher.cc similarity index 54% rename from sdk/src/event/libevent/dispatcher.cc rename to sdk/src/event/libevent/io_dispatcher.cc index 5c11c18fcd..1a3baa3db3 100644 --- a/sdk/src/event/libevent/dispatcher.cc +++ b/sdk/src/event/libevent/io_dispatcher.cc @@ -1,4 +1,4 @@ -#include "src/event/libevent/dispatcher.h" +#include "src/event/libevent/io_dispatcher.h" #include "src/event/libevent/file_event.h" #include "src/event/libevent/timer.h" @@ -11,25 +11,25 @@ namespace event { namespace libevent { -std::unique_ptr Dispatcher::CreateFileEvent(FileDescriptor file_descriptor, - FileReadyCallback callback, - uint32_t events) noexcept +std::unique_ptr IoDispatcher::CreateFileEvent(FileDescriptor file_descriptor, + FileReadyCallback callback, + uint32_t events) noexcept { return std::unique_ptr{ new (std::nothrow) FileEvent{event_base_, file_descriptor, events, callback}}; } -std::unique_ptr Dispatcher::CreateTimer(TimerCallback callback) noexcept +std::unique_ptr IoDispatcher::CreateTimer(TimerCallback callback) noexcept { return std::unique_ptr{new (std::nothrow) Timer{event_base_, callback}}; } -void Dispatcher::Exit() noexcept +void IoDispatcher::Exit() noexcept { event_base_.LoopBreak(); } -void Dispatcher::Run() noexcept +void IoDispatcher::Run() noexcept { event_base_.Dispatch(); } diff --git a/sdk/src/event/libevent/dispatcher.h b/sdk/src/event/libevent/io_dispatcher.h similarity index 87% rename from sdk/src/event/libevent/dispatcher.h rename to sdk/src/event/libevent/io_dispatcher.h index b246c0c934..c20f636150 100644 --- a/sdk/src/event/libevent/dispatcher.h +++ b/sdk/src/event/libevent/io_dispatcher.h @@ -1,6 +1,6 @@ #pragma once -#include "opentelemetry/sdk/event/dispatcher.h" +#include "opentelemetry/sdk/event/io_dispatcher.h" #include "opentelemetry/version.h" #include "src/event/libevent/event_base.h" @@ -12,7 +12,7 @@ namespace event { namespace libevent { -class Dispatcher final : public event::Dispatcher +class IoDispatcher final : public event::IoDispatcher { public: // Dispatcher diff --git a/sdk/test/event/libevent/BUILD b/sdk/test/event/libevent/BUILD index 124de5dddd..048cef122e 100644 --- a/sdk/test/event/libevent/BUILD +++ b/sdk/test/event/libevent/BUILD @@ -1,7 +1,7 @@ cc_test( - name = "dispatcher_test", + name = "io_dispatcher_test", srcs = [ - "dispatcher_test.cc", + "io_dispatcher_test.cc", ], linkstatic = 1, deps = [ diff --git a/sdk/test/event/libevent/CMakeLists.txt b/sdk/test/event/libevent/CMakeLists.txt index 01c7ed9706..7f7add8d03 100644 --- a/sdk/test/event/libevent/CMakeLists.txt +++ b/sdk/test/event/libevent/CMakeLists.txt @@ -1,4 +1,4 @@ -foreach(testname dispatcher_test) +foreach(testname io_dispatcher_test) add_executable(${testname} "${testname}.cc") target_link_libraries(${testname} ${GTEST_BOTH_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} opentelemetry_event_libevent) diff --git a/sdk/test/event/libevent/dispatcher_test.cc b/sdk/test/event/libevent/io_dispatcher_test.cc similarity index 82% rename from sdk/test/event/libevent/dispatcher_test.cc rename to sdk/test/event/libevent/io_dispatcher_test.cc index e96370354a..f7b88c6e82 100644 --- a/sdk/test/event/libevent/dispatcher_test.cc +++ b/sdk/test/event/libevent/io_dispatcher_test.cc @@ -1,14 +1,14 @@ -#include "src/event/libevent/dispatcher.h" +#include "src/event/libevent/io_dispatcher.h" #include #include using opentelemetry::sdk::event::Timer; -using opentelemetry::sdk::event::libevent::Dispatcher; +using opentelemetry::sdk::event::libevent::IoDispatcher; TEST(DispatcherTest, Timer) { - Dispatcher dispatcher; + IoDispatcher dispatcher; std::chrono::steady_clock::time_point t1, t2; auto timer = dispatcher.CreateTimer([&] { t2 = std::chrono::steady_clock::now(); }); timer->EnableTimer(std::chrono::milliseconds{100}); @@ -21,7 +21,7 @@ TEST(DispatcherTest, Timer) TEST(DispatcherTest, Exit) { - Dispatcher dispatcher; + IoDispatcher dispatcher; std::unique_ptr timer; auto f = [&] { timer->EnableTimer(std::chrono::milliseconds{1}); From 29a6b2ffa4d795dee47609192c8e7205f80ae5a3 Mon Sep 17 00:00:00 2001 From: Ryan Burn Date: Wed, 22 Apr 2020 15:07:32 -0700 Subject: [PATCH 33/53] Fix cmake build --- sdk/src/event/libevent/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/src/event/libevent/CMakeLists.txt b/sdk/src/event/libevent/CMakeLists.txt index 693c8b8d81..fdad5facfa 100644 --- a/sdk/src/event/libevent/CMakeLists.txt +++ b/sdk/src/event/libevent/CMakeLists.txt @@ -1,3 +1,3 @@ -add_library(opentelemetry_event_libevent dispatcher.cc event.cc event_base.cc +add_library(opentelemetry_event_libevent io_dispatcher.cc event.cc event_base.cc file_event.cc timer.cc) target_link_libraries(opentelemetry_event_libevent ${LIBEVENT_LIBRARIES}) From 7b593147a944e62de494124f15b51506aae0ea55 Mon Sep 17 00:00:00 2001 From: Ryan Burn Date: Wed, 22 Apr 2020 15:21:29 -0700 Subject: [PATCH 34/53] Fix formatting --- bazel/libevent.BUILD | 33 +++++++++++++-------------- bazel/opentelemetry_proto.BUILD | 12 +++++----- sdk/src/event/libevent/CMakeLists.txt | 4 ++-- tools/format.sh | 4 ++-- 4 files changed, 26 insertions(+), 27 deletions(-) diff --git a/bazel/libevent.BUILD b/bazel/libevent.BUILD index 2a10360084..e27b3d9335 100644 --- a/bazel/libevent.BUILD +++ b/bazel/libevent.BUILD @@ -1,6 +1,5 @@ load("@rules_foreign_cc//tools/build_defs:cmake.bzl", "cmake_external") - filegroup( name = "srcs", srcs = glob(["**"]), @@ -9,26 +8,26 @@ filegroup( cmake_external( name = "libevent", cache_entries = { - "CMAKE_BUILD_TYPE": "Release", - "CMAKE_POSITION_INDEPENDENT_CODE" : "on", - "BUILD_SHARED_LIBS": "off", - "BUILD_STATIC_LIBS": "on", - "EVENT__DISABLE_OPENSSL": "on", - "EVENT__DISABLE_REGRESS": "on", - "EVENT__DISABLE_TESTS": "on", + "CMAKE_BUILD_TYPE": "Release", + "CMAKE_POSITION_INDEPENDENT_CODE": "on", + "BUILD_SHARED_LIBS": "off", + "BUILD_STATIC_LIBS": "on", + "EVENT__DISABLE_OPENSSL": "on", + "EVENT__DISABLE_REGRESS": "on", + "EVENT__DISABLE_TESTS": "on", }, - lib_source = ":srcs", generate_crosstool_file = select({ - "@io_opentelemetry_cpp//bazel:windows": True, - "//conditions:default": None, - }), - static_libraries = select({ - "@io_opentelemetry_cpp//bazel:windows": ["event.lib"], - "//conditions:default": ["libevent.a"], + "@io_opentelemetry_cpp//bazel:windows": True, + "//conditions:default": None, }), + lib_source = ":srcs", make_commands = select({ - "@io_opentelemetry_cpp//bazel:windows": ["MSBuild.exe INSTALL.vcxproj"], - "//conditions:default" : None, + "@io_opentelemetry_cpp//bazel:windows": ["MSBuild.exe INSTALL.vcxproj"], + "//conditions:default": None, + }), + static_libraries = select({ + "@io_opentelemetry_cpp//bazel:windows": ["event.lib"], + "//conditions:default": ["libevent.a"], }), visibility = ["//visibility:public"], ) diff --git a/bazel/opentelemetry_proto.BUILD b/bazel/opentelemetry_proto.BUILD index ddb9915bf2..d96eefe8e3 100644 --- a/bazel/opentelemetry_proto.BUILD +++ b/bazel/opentelemetry_proto.BUILD @@ -19,7 +19,7 @@ load("@rules_proto//proto:defs.bzl", "proto_library") proto_library( name = "common_proto", srcs = [ - "opentelemetry/proto/common/v1/common.proto", + "opentelemetry/proto/common/v1/common.proto", ], ) @@ -31,10 +31,10 @@ cc_proto_library( proto_library( name = "resource_proto", srcs = [ - "opentelemetry/proto/resource/v1/resource.proto", + "opentelemetry/proto/resource/v1/resource.proto", ], deps = [ - ":common_proto", + ":common_proto", ], ) @@ -46,11 +46,11 @@ cc_proto_library( proto_library( name = "trace_proto", srcs = [ - "opentelemetry/proto/trace/v1/trace.proto", + "opentelemetry/proto/trace/v1/trace.proto", ], deps = [ - ":common_proto", - ":resource_proto", + ":common_proto", + ":resource_proto", ], ) diff --git a/sdk/src/event/libevent/CMakeLists.txt b/sdk/src/event/libevent/CMakeLists.txt index fdad5facfa..2ec6925b91 100644 --- a/sdk/src/event/libevent/CMakeLists.txt +++ b/sdk/src/event/libevent/CMakeLists.txt @@ -1,3 +1,3 @@ -add_library(opentelemetry_event_libevent io_dispatcher.cc event.cc event_base.cc - file_event.cc timer.cc) +add_library(opentelemetry_event_libevent io_dispatcher.cc event.cc + event_base.cc file_event.cc timer.cc) target_link_libraries(opentelemetry_event_libevent ${LIBEVENT_LIBRARIES}) diff --git a/tools/format.sh b/tools/format.sh index 1b150dbca3..48323e45a3 100755 --- a/tools/format.sh +++ b/tools/format.sh @@ -50,8 +50,8 @@ if [[ -z "$BUILDIFIER" ]]; then fi if which "$BUILDIFIER" >/dev/null; then echo "Running $BUILDIFIER" - "$BUILDIFIER" $($FIND -name WORKSPACE -print -o -name BUILD -print -o \ - -name '*.BUILD' -o -name '*.bzl' -print) + "$BUILDIFIER" $($FIND -name WORKSPACE -print -o -name BUILD -print -o -name '*.BUILD' -print -o \ + -name '*.bzl' -print) else echo "Can't find buildifier. It can be installed with:" echo " go get github.com/bazelbuild/buildtools/buildifier" From 23009af346cbe66e787e1a3da04d8498f6e4b302 Mon Sep 17 00:00:00 2001 From: Ryan Burn Date: Wed, 22 Apr 2020 15:26:47 -0700 Subject: [PATCH 35/53] Drop unused header --- sdk/include/opentelemetry/sdk/event/file_event.h | 1 - 1 file changed, 1 deletion(-) diff --git a/sdk/include/opentelemetry/sdk/event/file_event.h b/sdk/include/opentelemetry/sdk/event/file_event.h index 9b6e8637fc..b69c1772f5 100644 --- a/sdk/include/opentelemetry/sdk/event/file_event.h +++ b/sdk/include/opentelemetry/sdk/event/file_event.h @@ -1,6 +1,5 @@ #pragma once -#include #include #include #include From d14c11fb66dc6a190a3aa5034a0197fc8866b4bc Mon Sep 17 00:00:00 2001 From: Ryan Burn Date: Wed, 22 Apr 2020 17:24:09 -0700 Subject: [PATCH 36/53] Renaming --- sdk/src/event/libevent/BUILD | 2 +- sdk/test/event/libevent/BUILD | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sdk/src/event/libevent/BUILD b/sdk/src/event/libevent/BUILD index e68237f18f..c6a3139fa0 100644 --- a/sdk/src/event/libevent/BUILD +++ b/sdk/src/event/libevent/BUILD @@ -15,7 +15,7 @@ package(default_visibility = ["//visibility:public"]) cc_library( - name = "libevent", + name = "io_dispatcher", srcs = glob(["**/*.cc"]), hdrs = glob(["**/*.h"]), include_prefix = "src/event/libevent", diff --git a/sdk/test/event/libevent/BUILD b/sdk/test/event/libevent/BUILD index 048cef122e..50b7a261a8 100644 --- a/sdk/test/event/libevent/BUILD +++ b/sdk/test/event/libevent/BUILD @@ -5,7 +5,7 @@ cc_test( ], linkstatic = 1, deps = [ - "//sdk/src/event/libevent", + "//sdk/src/event/libevent:io_dispatcher", "@com_google_googletest//:gtest_main", ], ) From 0cef1d876811a425826e264e56c96957cc2ff458 Mon Sep 17 00:00:00 2001 From: Ryan Burn Date: Fri, 24 Apr 2020 15:28:43 -0700 Subject: [PATCH 37/53] Work on async_timer --- sdk/src/event/async_timer/BUILD | 26 +++++++++++++++++++ sdk/src/event/async_timer/dispatcher.cc | 23 +++++++++++++++++ sdk/src/event/async_timer/dispatcher.h | 34 +++++++++++++++++++++++++ sdk/src/event/async_timer/timer.cc | 21 +++++++++++++++ sdk/src/event/async_timer/timer.h | 27 ++++++++++++++++++++ sdk/src/event/libevent/timer.h | 1 + 6 files changed, 132 insertions(+) create mode 100644 sdk/src/event/async_timer/BUILD create mode 100644 sdk/src/event/async_timer/dispatcher.cc create mode 100644 sdk/src/event/async_timer/dispatcher.h create mode 100644 sdk/src/event/async_timer/timer.cc create mode 100644 sdk/src/event/async_timer/timer.h diff --git a/sdk/src/event/async_timer/BUILD b/sdk/src/event/async_timer/BUILD new file mode 100644 index 0000000000..50e72656d7 --- /dev/null +++ b/sdk/src/event/async_timer/BUILD @@ -0,0 +1,26 @@ +# Copyright 2020, OpenTelemetry Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "dispatcher", + srcs = glob(["**/*.cc"]), + hdrs = glob(["**/*.h"]), + include_prefix = "src/event/async_timer", + deps = [ + "//sdk:headers", + ], +) + diff --git a/sdk/src/event/async_timer/dispatcher.cc b/sdk/src/event/async_timer/dispatcher.cc new file mode 100644 index 0000000000..65392bfa2b --- /dev/null +++ b/sdk/src/event/async_timer/dispatcher.cc @@ -0,0 +1,23 @@ +#include "src/event/async_timer/dispatcher.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace event +{ +namespace async_timer +{ +std::unique_ptr Dispatcher::CreateTimer(TimerCallback callback) noexcept +{ + (void)callback; + return nullptr; +} + +void Dispatcher::Exit() noexcept {} + +void Dispatcher::Run() noexcept {} +} // namespace async_timer +} // namespace event +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE + diff --git a/sdk/src/event/async_timer/dispatcher.h b/sdk/src/event/async_timer/dispatcher.h new file mode 100644 index 0000000000..d7e8f2c136 --- /dev/null +++ b/sdk/src/event/async_timer/dispatcher.h @@ -0,0 +1,34 @@ +#pragma once + +#include + +#include "opentelemetry/sdk/event/dispatcher.h" +#include "opentelemetry/version.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace event +{ +namespace async_timer +{ +class Dispatcher final : public event::Dispatcher +{ +public: + using EventIterator = + std::map::const_iterator; + + // event::Dispatcher + std::unique_ptr CreateTimer(TimerCallback callback) noexcept override; + + void Exit() noexcept override; + + void Run() noexcept override; + +private: + std::map events_; +}; +} // namespace async_timer +} // namespace event +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/event/async_timer/timer.cc b/sdk/src/event/async_timer/timer.cc new file mode 100644 index 0000000000..0104cd94c4 --- /dev/null +++ b/sdk/src/event/async_timer/timer.cc @@ -0,0 +1,21 @@ +#include "src/event/async_timer/timer.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace event +{ +namespace async_timer +{ +Timer::Timer(Dispatcher::EventIterator iterator) noexcept : iterator_{iterator} {} + +void Timer::EnableTimer(std::chrono::microseconds timeout) noexcept +{ + (void)timeout; +} + +void Timer::DisableTimer() noexcept {} +} // namespace async_timer +} // namespace event +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/event/async_timer/timer.h b/sdk/src/event/async_timer/timer.h new file mode 100644 index 0000000000..6e96c42157 --- /dev/null +++ b/sdk/src/event/async_timer/timer.h @@ -0,0 +1,27 @@ +#pragma once + +#include "opentelemetry/sdk/event/timer.h" +#include "opentelemetry/version.h" + +#include "src/event/async_timer/dispatcher.h" + +OPENTELEMETRY_BEGIN_NAMESPACE +namespace sdk +{ +namespace event +{ +namespace async_timer { +class Timer final : event::Timer { + public: + explicit Timer(Dispatcher::EventIterator iterator) noexcept; + + void EnableTimer(std::chrono::microseconds timeout) noexcept override; + + void DisableTimer() noexcept override; + private: + Dispatcher::EventIterator iterator_; +}; +} // namespace async_timer +} // namespace event +} // namespace sdk +OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/src/event/libevent/timer.h b/sdk/src/event/libevent/timer.h index 720aa251a0..ed221fbe87 100644 --- a/sdk/src/event/libevent/timer.h +++ b/sdk/src/event/libevent/timer.h @@ -21,6 +21,7 @@ class Timer final : public event::Timer Timer(EventBase &event_base, Callback callback) noexcept; + // event::Timer void EnableTimer(std::chrono::microseconds timeout) noexcept override; void DisableTimer() noexcept override; From 8c2b945934620112d409e8f0c6e0541b3b48a0bc Mon Sep 17 00:00:00 2001 From: Ryan Burn Date: Mon, 4 May 2020 08:20:58 -0700 Subject: [PATCH 38/53] Fill in async timer --- sdk/src/event/async_timer/dispatcher.cc | 17 +++++++++++++++-- sdk/src/event/async_timer/dispatcher.h | 4 +++- sdk/src/event/async_timer/timer.cc | 22 +++++++++++++++++++--- sdk/src/event/async_timer/timer.h | 14 +++++++++----- 4 files changed, 46 insertions(+), 11 deletions(-) diff --git a/sdk/src/event/async_timer/dispatcher.cc b/sdk/src/event/async_timer/dispatcher.cc index 65392bfa2b..7567b158ef 100644 --- a/sdk/src/event/async_timer/dispatcher.cc +++ b/sdk/src/event/async_timer/dispatcher.cc @@ -1,5 +1,7 @@ #include "src/event/async_timer/dispatcher.h" +#include + OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { @@ -13,9 +15,20 @@ std::unique_ptr Dispatcher::CreateTimer(TimerCallback callback) no return nullptr; } -void Dispatcher::Exit() noexcept {} +void Dispatcher::Exit() noexcept { + running_ = false; +} -void Dispatcher::Run() noexcept {} +void Dispatcher::Run() noexcept { + while (running_ && !events_.empty()) { + auto next_event = events_.begin(); + std::this_thread::sleep_until(next_event->first); + if (next_event->second) { + next_event->second(); + } + events_.erase(next_event); + } +} } // namespace async_timer } // namespace event } // namespace sdk diff --git a/sdk/src/event/async_timer/dispatcher.h b/sdk/src/event/async_timer/dispatcher.h index d7e8f2c136..52bbe637f5 100644 --- a/sdk/src/event/async_timer/dispatcher.h +++ b/sdk/src/event/async_timer/dispatcher.h @@ -26,7 +26,9 @@ class Dispatcher final : public event::Dispatcher void Run() noexcept override; private: - std::map events_; + friend class Timer; + bool running_{true}; + std::multimap events_; }; } // namespace async_timer } // namespace event diff --git a/sdk/src/event/async_timer/timer.cc b/sdk/src/event/async_timer/timer.cc index 0104cd94c4..3859df017b 100644 --- a/sdk/src/event/async_timer/timer.cc +++ b/sdk/src/event/async_timer/timer.cc @@ -7,14 +7,30 @@ namespace event { namespace async_timer { -Timer::Timer(Dispatcher::EventIterator iterator) noexcept : iterator_{iterator} {} +Timer::Timer(TimerCallback callback, Dispatcher &dispatcher) noexcept + : callback_{callback}, dispatcher_{dispatcher}, event_{dispatcher.events_.end()} +{} + +Timer::~Timer() +{ + this->DisableTimer(); +} void Timer::EnableTimer(std::chrono::microseconds timeout) noexcept { - (void)timeout; + this->DisableTimer(); + auto time_point = std::chrono::steady_clock::now() + timeout; + // Note: terminates on std::bad_alloc + event_ = dispatcher_.events_.emplace(time_point, callback_); } -void Timer::DisableTimer() noexcept {} +void Timer::DisableTimer() noexcept +{ + if (event_ != dispatcher_.events_.end()) + { + dispatcher_.events_.erase(event_); + } +} } // namespace async_timer } // namespace event } // namespace sdk diff --git a/sdk/src/event/async_timer/timer.h b/sdk/src/event/async_timer/timer.h index 6e96c42157..375246662f 100644 --- a/sdk/src/event/async_timer/timer.h +++ b/sdk/src/event/async_timer/timer.h @@ -11,15 +11,19 @@ namespace sdk namespace event { namespace async_timer { -class Timer final : event::Timer { +class Timer final : public event::Timer { public: - explicit Timer(Dispatcher::EventIterator iterator) noexcept; + Timer(TimerCallback callback, Dispatcher &dispatcher) noexcept; - void EnableTimer(std::chrono::microseconds timeout) noexcept override; + ~Timer(); - void DisableTimer() noexcept override; + void EnableTimer(std::chrono::microseconds timeout) noexcept override; + + void DisableTimer() noexcept override; private: - Dispatcher::EventIterator iterator_; + TimerCallback callback_; + Dispatcher& dispatcher_; + Dispatcher::EventIterator event_; }; } // namespace async_timer } // namespace event From 2f0cf961a09f2baf28f318d2e723ff7560f4845b Mon Sep 17 00:00:00 2001 From: Ryan Burn Date: Mon, 4 May 2020 10:01:28 -0700 Subject: [PATCH 39/53] Fill out async timer --- sdk/src/event/async_timer/dispatcher.cc | 10 ++++++---- sdk/src/event/async_timer/dispatcher.h | 14 ++++++++++---- sdk/src/event/async_timer/timer.cc | 2 +- sdk/src/event/async_timer/timer.h | 7 ++++--- 4 files changed, 21 insertions(+), 12 deletions(-) diff --git a/sdk/src/event/async_timer/dispatcher.cc b/sdk/src/event/async_timer/dispatcher.cc index 7567b158ef..2f0d214b09 100644 --- a/sdk/src/event/async_timer/dispatcher.cc +++ b/sdk/src/event/async_timer/dispatcher.cc @@ -2,6 +2,8 @@ #include +#include "src/event/async_timer/timer.h" + OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk { @@ -11,8 +13,7 @@ namespace async_timer { std::unique_ptr Dispatcher::CreateTimer(TimerCallback callback) noexcept { - (void)callback; - return nullptr; + return std::unique_ptr{new (std::nothrow) Timer{callback, *this}}; } void Dispatcher::Exit() noexcept { @@ -23,9 +24,10 @@ void Dispatcher::Run() noexcept { while (running_ && !events_.empty()) { auto next_event = events_.begin(); std::this_thread::sleep_until(next_event->first); - if (next_event->second) { - next_event->second(); + if (next_event->second.callback) { + next_event->second.callback(); } + next_event->second.timer->event_ = events_.end(); events_.erase(next_event); } } diff --git a/sdk/src/event/async_timer/dispatcher.h b/sdk/src/event/async_timer/dispatcher.h index 52bbe637f5..9d223b30a6 100644 --- a/sdk/src/event/async_timer/dispatcher.h +++ b/sdk/src/event/async_timer/dispatcher.h @@ -12,12 +12,11 @@ namespace event { namespace async_timer { +class Timer; + class Dispatcher final : public event::Dispatcher { public: - using EventIterator = - std::map::const_iterator; - // event::Dispatcher std::unique_ptr CreateTimer(TimerCallback callback) noexcept override; @@ -26,9 +25,16 @@ class Dispatcher final : public event::Dispatcher void Run() noexcept override; private: + struct Event { + TimerCallback callback; + Timer* timer; + }; + using EventIterator = + std::map::const_iterator; + friend class Timer; bool running_{true}; - std::multimap events_; + std::multimap events_; }; } // namespace async_timer } // namespace event diff --git a/sdk/src/event/async_timer/timer.cc b/sdk/src/event/async_timer/timer.cc index 3859df017b..99ebe33bcb 100644 --- a/sdk/src/event/async_timer/timer.cc +++ b/sdk/src/event/async_timer/timer.cc @@ -21,7 +21,7 @@ void Timer::EnableTimer(std::chrono::microseconds timeout) noexcept this->DisableTimer(); auto time_point = std::chrono::steady_clock::now() + timeout; // Note: terminates on std::bad_alloc - event_ = dispatcher_.events_.emplace(time_point, callback_); + event_ = dispatcher_.events_.emplace(time_point, Dispatcher::Event{callback_, this}); } void Timer::DisableTimer() noexcept diff --git a/sdk/src/event/async_timer/timer.h b/sdk/src/event/async_timer/timer.h index 375246662f..a97273f042 100644 --- a/sdk/src/event/async_timer/timer.h +++ b/sdk/src/event/async_timer/timer.h @@ -21,9 +21,10 @@ class Timer final : public event::Timer { void DisableTimer() noexcept override; private: - TimerCallback callback_; - Dispatcher& dispatcher_; - Dispatcher::EventIterator event_; + friend class Dispatcher; + TimerCallback callback_; + Dispatcher &dispatcher_; + Dispatcher::EventIterator event_; }; } // namespace async_timer } // namespace event From 76683b0f9f31f7ae8b21ef600d9b3df4bf275ecb Mon Sep 17 00:00:00 2001 From: Ryan Burn Date: Mon, 4 May 2020 10:01:53 -0700 Subject: [PATCH 40/53] Reformat --- sdk/src/event/async_timer/BUILD | 1 - sdk/src/event/async_timer/dispatcher.cc | 13 ++++++----- sdk/src/event/async_timer/dispatcher.h | 8 +++---- sdk/src/event/async_timer/timer.h | 29 ++++++++++++++----------- 4 files changed, 28 insertions(+), 23 deletions(-) diff --git a/sdk/src/event/async_timer/BUILD b/sdk/src/event/async_timer/BUILD index 50e72656d7..47fa1d4541 100644 --- a/sdk/src/event/async_timer/BUILD +++ b/sdk/src/event/async_timer/BUILD @@ -23,4 +23,3 @@ cc_library( "//sdk:headers", ], ) - diff --git a/sdk/src/event/async_timer/dispatcher.cc b/sdk/src/event/async_timer/dispatcher.cc index 2f0d214b09..5a03a344e9 100644 --- a/sdk/src/event/async_timer/dispatcher.cc +++ b/sdk/src/event/async_timer/dispatcher.cc @@ -16,15 +16,19 @@ std::unique_ptr Dispatcher::CreateTimer(TimerCallback callback) no return std::unique_ptr{new (std::nothrow) Timer{callback, *this}}; } -void Dispatcher::Exit() noexcept { +void Dispatcher::Exit() noexcept +{ running_ = false; } -void Dispatcher::Run() noexcept { - while (running_ && !events_.empty()) { +void Dispatcher::Run() noexcept +{ + while (running_ && !events_.empty()) + { auto next_event = events_.begin(); std::this_thread::sleep_until(next_event->first); - if (next_event->second.callback) { + if (next_event->second.callback) + { next_event->second.callback(); } next_event->second.timer->event_ = events_.end(); @@ -35,4 +39,3 @@ void Dispatcher::Run() noexcept { } // namespace event } // namespace sdk OPENTELEMETRY_END_NAMESPACE - diff --git a/sdk/src/event/async_timer/dispatcher.h b/sdk/src/event/async_timer/dispatcher.h index 9d223b30a6..69be620bca 100644 --- a/sdk/src/event/async_timer/dispatcher.h +++ b/sdk/src/event/async_timer/dispatcher.h @@ -25,12 +25,12 @@ class Dispatcher final : public event::Dispatcher void Run() noexcept override; private: - struct Event { + struct Event + { TimerCallback callback; - Timer* timer; + Timer *timer; }; - using EventIterator = - std::map::const_iterator; + using EventIterator = std::map::const_iterator; friend class Timer; bool running_{true}; diff --git a/sdk/src/event/async_timer/timer.h b/sdk/src/event/async_timer/timer.h index a97273f042..0d48ad9e90 100644 --- a/sdk/src/event/async_timer/timer.h +++ b/sdk/src/event/async_timer/timer.h @@ -10,23 +10,26 @@ namespace sdk { namespace event { -namespace async_timer { -class Timer final : public event::Timer { - public: - Timer(TimerCallback callback, Dispatcher &dispatcher) noexcept; +namespace async_timer +{ +class Timer final : public event::Timer +{ +public: + Timer(TimerCallback callback, Dispatcher &dispatcher) noexcept; + + ~Timer(); - ~Timer(); + void EnableTimer(std::chrono::microseconds timeout) noexcept override; - void EnableTimer(std::chrono::microseconds timeout) noexcept override; + void DisableTimer() noexcept override; - void DisableTimer() noexcept override; - private: - friend class Dispatcher; - TimerCallback callback_; - Dispatcher &dispatcher_; - Dispatcher::EventIterator event_; +private: + friend class Dispatcher; + TimerCallback callback_; + Dispatcher &dispatcher_; + Dispatcher::EventIterator event_; }; -} // namespace async_timer +} // namespace async_timer } // namespace event } // namespace sdk OPENTELEMETRY_END_NAMESPACE From 53bcda4f3cca2e49a656003b34f3ad5b8aff52c3 Mon Sep 17 00:00:00 2001 From: Ryan Burn Date: Mon, 4 May 2020 13:19:26 -0700 Subject: [PATCH 41/53] Add async timer tests --- sdk/test/event/async_timer/BUILD | 11 ++++++ sdk/test/event/async_timer/dispatcher_test.cc | 39 +++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 sdk/test/event/async_timer/BUILD create mode 100644 sdk/test/event/async_timer/dispatcher_test.cc diff --git a/sdk/test/event/async_timer/BUILD b/sdk/test/event/async_timer/BUILD new file mode 100644 index 0000000000..ea7fee99e9 --- /dev/null +++ b/sdk/test/event/async_timer/BUILD @@ -0,0 +1,11 @@ +cc_test( + name = "dispatcher_test", + srcs = [ + "dispatcher_test.cc", + ], + linkstatic = 1, + deps = [ + "//sdk/src/event/async_timer:dispatcher", + "@com_google_googletest//:gtest_main", + ], +) diff --git a/sdk/test/event/async_timer/dispatcher_test.cc b/sdk/test/event/async_timer/dispatcher_test.cc new file mode 100644 index 0000000000..cda295ae3a --- /dev/null +++ b/sdk/test/event/async_timer/dispatcher_test.cc @@ -0,0 +1,39 @@ +#include "src/event/async_timer/dispatcher.h" + +#include + +#include +using opentelemetry::sdk::event::Timer; +using opentelemetry::sdk::event::async_timer::Dispatcher; + +TEST(DispatcherTest, Timer) +{ + Dispatcher dispatcher; + std::chrono::steady_clock::time_point t1, t2; + auto timer = dispatcher.CreateTimer([&] { t2 = std::chrono::steady_clock::now(); }); + timer->EnableTimer(std::chrono::milliseconds{100}); + t1 = std::chrono::steady_clock::now(); + dispatcher.Run(); + auto duration = t2 - t1; + EXPECT_TRUE(duration > std::chrono::milliseconds{50}); + EXPECT_TRUE(duration < std::chrono::milliseconds{200}); +} + +TEST(DispatcherTest, TimerOrder) +{ + Dispatcher dispatcher; + std::vector order; + + auto t1 = dispatcher.CreateTimer([&] { order.push_back(1); }); + t1->EnableTimer(std::chrono::milliseconds{5}); + + auto t2 = dispatcher.CreateTimer([&] { order.push_back(2); }); + t2->EnableTimer(std::chrono::milliseconds{2}); + + auto t3 = dispatcher.CreateTimer([&] { order.push_back(3); }); + t3->EnableTimer(std::chrono::milliseconds{7}); + + dispatcher.Run(); + + EXPECT_EQ(order, (std::vector{2, 1, 3})); +} From 4b162e4f10c9da2024cdc873121f6a460d02f106 Mon Sep 17 00:00:00 2001 From: Ryan Burn Date: Mon, 4 May 2020 13:34:32 -0700 Subject: [PATCH 42/53] Fix for gcc-4.8 --- sdk/src/event/async_timer/timer.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/src/event/async_timer/timer.cc b/sdk/src/event/async_timer/timer.cc index 99ebe33bcb..f9b403a278 100644 --- a/sdk/src/event/async_timer/timer.cc +++ b/sdk/src/event/async_timer/timer.cc @@ -8,7 +8,7 @@ namespace event namespace async_timer { Timer::Timer(TimerCallback callback, Dispatcher &dispatcher) noexcept - : callback_{callback}, dispatcher_{dispatcher}, event_{dispatcher.events_.end()} + : callback_(callback), dispatcher_(dispatcher), event_(dispatcher.events_.end()) {} Timer::~Timer() From 3212ed4db7c2b486fda8d0d18a1df024c33623a7 Mon Sep 17 00:00:00 2001 From: Ryan Burn Date: Sun, 10 May 2020 17:31:04 -0700 Subject: [PATCH 43/53] Add test coverage --- sdk/test/event/async_timer/dispatcher_test.cc | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/sdk/test/event/async_timer/dispatcher_test.cc b/sdk/test/event/async_timer/dispatcher_test.cc index cda295ae3a..e573a4cae0 100644 --- a/sdk/test/event/async_timer/dispatcher_test.cc +++ b/sdk/test/event/async_timer/dispatcher_test.cc @@ -19,6 +19,20 @@ TEST(DispatcherTest, Timer) EXPECT_TRUE(duration < std::chrono::milliseconds{200}); } +TEST(DispatcherTest, ResetTimer) +{ + Dispatcher dispatcher; + std::chrono::steady_clock::time_point t1, t2; + auto timer = dispatcher.CreateTimer([&] { t2 = std::chrono::steady_clock::now(); }); + timer->EnableTimer(std::chrono::milliseconds{500}); + timer->EnableTimer(std::chrono::milliseconds{100}); + t1 = std::chrono::steady_clock::now(); + dispatcher.Run(); + auto duration = t2 - t1; + EXPECT_TRUE(duration > std::chrono::milliseconds{50}); + EXPECT_TRUE(duration < std::chrono::milliseconds{200}); +} + TEST(DispatcherTest, TimerOrder) { Dispatcher dispatcher; From 8f358c92ca7303d9bbc3d67056e632eedeaee37a Mon Sep 17 00:00:00 2001 From: Ryan Burn Date: Sun, 10 May 2020 17:41:04 -0700 Subject: [PATCH 44/53] Add commenting --- sdk/src/event/libevent/io_dispatcher.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/sdk/src/event/libevent/io_dispatcher.h b/sdk/src/event/libevent/io_dispatcher.h index c20f636150..b92be1e6e5 100644 --- a/sdk/src/event/libevent/io_dispatcher.h +++ b/sdk/src/event/libevent/io_dispatcher.h @@ -12,6 +12,13 @@ namespace event { namespace libevent { +/** + * Manages asynchronous events on a file descriptor. + * + * IoDispatcher enables an efficient design where SDKs use non-blocking sockets and a single + * background thread manages events by making successive calls to the OS's IO multiplexing polling + * function. + */ class IoDispatcher final : public event::IoDispatcher { public: From e086e7718754afb64032cdc04a9be0c98550cd9e Mon Sep 17 00:00:00 2001 From: Ryan Burn Date: Sun, 10 May 2020 17:41:12 -0700 Subject: [PATCH 45/53] Add more test coverage --- sdk/test/event/async_timer/dispatcher_test.cc | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/sdk/test/event/async_timer/dispatcher_test.cc b/sdk/test/event/async_timer/dispatcher_test.cc index e573a4cae0..367e338c75 100644 --- a/sdk/test/event/async_timer/dispatcher_test.cc +++ b/sdk/test/event/async_timer/dispatcher_test.cc @@ -51,3 +51,20 @@ TEST(DispatcherTest, TimerOrder) EXPECT_EQ(order, (std::vector{2, 1, 3})); } + +TEST(DispatcherTest, ReuseTimer) +{ + Dispatcher dispatcher; + std::vector order; + + auto t1 = dispatcher.CreateTimer([&] { order.push_back(1); }); + t1->EnableTimer(std::chrono::milliseconds{5}); + + dispatcher.Run(); + + t1->EnableTimer(std::chrono::milliseconds{5}); + + dispatcher.Run(); + + EXPECT_EQ(order, (std::vector{1, 1})); +} From ea0e87cdc0f620a9e485e917e4b49009186fc51f Mon Sep 17 00:00:00 2001 From: Ryan Burn Date: Sun, 10 May 2020 17:50:27 -0700 Subject: [PATCH 46/53] Add commenting --- sdk/include/opentelemetry/sdk/event/dispatcher.h | 4 ++++ sdk/src/event/async_timer/dispatcher.h | 6 ++++++ sdk/src/event/libevent/io_dispatcher.h | 4 +--- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/sdk/include/opentelemetry/sdk/event/dispatcher.h b/sdk/include/opentelemetry/sdk/event/dispatcher.h index 5b98f708ea..a271a8785d 100644 --- a/sdk/include/opentelemetry/sdk/event/dispatcher.h +++ b/sdk/include/opentelemetry/sdk/event/dispatcher.h @@ -14,6 +14,10 @@ namespace event { /** * Interface for managing asynchronous events. + * + * IoDispatcher enables an efficient design where SDKs use non-blocking sockets and a single + * background thread manages events by making successive calls to the OS's IO multiplexing polling + * function. */ class Dispatcher { diff --git a/sdk/src/event/async_timer/dispatcher.h b/sdk/src/event/async_timer/dispatcher.h index 69be620bca..0f87243e98 100644 --- a/sdk/src/event/async_timer/dispatcher.h +++ b/sdk/src/event/async_timer/dispatcher.h @@ -14,6 +14,12 @@ namespace async_timer { class Timer; +/** + * Implements the timer portion of the dispatcher interface. + * + * SDKs that don't use asynchronous networking can use this Dispatcher to avoid requiring an + * external depency on an event library such as libevent. + */ class Dispatcher final : public event::Dispatcher { public: diff --git a/sdk/src/event/libevent/io_dispatcher.h b/sdk/src/event/libevent/io_dispatcher.h index b92be1e6e5..c09877aa88 100644 --- a/sdk/src/event/libevent/io_dispatcher.h +++ b/sdk/src/event/libevent/io_dispatcher.h @@ -15,9 +15,7 @@ namespace libevent /** * Manages asynchronous events on a file descriptor. * - * IoDispatcher enables an efficient design where SDKs use non-blocking sockets and a single - * background thread manages events by making successive calls to the OS's IO multiplexing polling - * function. + * Built on top of libevent https://libevent.org/ */ class IoDispatcher final : public event::IoDispatcher { From 6234ee683cd19dcf985d8091eb45e01c48d6705c Mon Sep 17 00:00:00 2001 From: Johannes Tax Date: Tue, 7 Jul 2020 10:06:39 -0700 Subject: [PATCH 47/53] Update GH Actions --- .github/workflows/ci.yml | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a5d36c4a61..d35d2b89fb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,8 +16,11 @@ jobs: run: | sudo ./ci/setup_cmake.sh sudo ./ci/setup_ci_environment.sh + sudo ./ci/install_libevent.sh - name: run tests - run: ./ci/do_ci.sh cmake.test + run: | + ./ci/do_ci.sh cmake.test + ./ci/do_ci.sh cmake.exporter.otprotocol.test cmake_test_cxx20: name: CMake C++20 test @@ -28,6 +31,7 @@ jobs: run: | sudo ./ci/setup_ci_environment.sh sudo ./ci/setup_cmake.sh + sudo ./ci/install_libevent.sh - name: run tests run: ./ci/do_ci.sh cmake.c++20.test @@ -50,6 +54,7 @@ jobs: - uses: actions/checkout@v2 - name: setup run: | + sudo ./ci/setup_cmake.sh sudo ./ci/setup_ci_environment.sh sudo ./ci/install_bazelisk.sh sudo ./ci/install_gcc48.sh @@ -143,6 +148,8 @@ jobs: runs-on: macos-latest steps: - uses: actions/checkout@v2 + - name: setup + run: sudo ./ci/install_osx_cmake.sh - name: run tests run: ./ci/do_ci.sh bazel.test @@ -156,6 +163,7 @@ jobs: ./ci/setup_windows_cmake.ps1 ./ci/setup_windows_ci_environment.ps1 ./ci/install_windows_protobuf.ps1 + ./ci/install_windows_libevent.ps1 - name: run cmake test run: ./ci/do_ci.ps1 cmake.test - name: run otprotocol test @@ -167,7 +175,9 @@ jobs: steps: - uses: actions/checkout@v2 - name: setup - run: ./ci/install_windows_bazelisk.ps1 + run: | + ./ci/setup_windows_cmake.ps1 + ./ci/install_windows_bazelisk.ps1 - name: run tests run: ./ci/do_ci.ps1 bazel.build From faf297319f1d0947ae74b719564ed25f1828247e Mon Sep 17 00:00:00 2001 From: Johannes Tax Date: Tue, 7 Jul 2020 11:19:32 -0700 Subject: [PATCH 48/53] Fix CI --- .github/workflows/ci.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d35d2b89fb..1122860a65 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,6 +16,7 @@ jobs: run: | sudo ./ci/setup_cmake.sh sudo ./ci/setup_ci_environment.sh + sudo ./ci/install_protobuf.sh sudo ./ci/install_libevent.sh - name: run tests run: | @@ -149,7 +150,7 @@ jobs: steps: - uses: actions/checkout@v2 - name: setup - run: sudo ./ci/install_osx_cmake.sh + run: ./ci/install_osx_cmake.sh - name: run tests run: ./ci/do_ci.sh bazel.test From 1de581b781dc07ffe97650aa5fd9b5ed9d84692c Mon Sep 17 00:00:00 2001 From: Johannes Tax Date: Tue, 7 Jul 2020 14:01:42 -0700 Subject: [PATCH 49/53] Build examples only with SDK --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 995f5c559b..7270371635 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -65,5 +65,5 @@ if(WITH_SDK) include_directories(sdk) add_subdirectory(sdk) add_subdirectory(exporters) + add_subdirectory(examples) endif() -add_subdirectory(examples) From 2cbf66ca2938df2326465e07999d30b8cc227275 Mon Sep 17 00:00:00 2001 From: Johannes Tax Date: Tue, 7 Jul 2020 14:19:48 -0700 Subject: [PATCH 50/53] Add libevent --- .github/workflows/ci.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1122860a65..ceefc8f468 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -164,7 +164,8 @@ jobs: ./ci/setup_windows_cmake.ps1 ./ci/setup_windows_ci_environment.ps1 ./ci/install_windows_protobuf.ps1 - ./ci/install_windows_libevent.ps1 + - name: setup libevent + run: ./ci/install_windows_libevent.ps1 - name: run cmake test run: ./ci/do_ci.ps1 cmake.test - name: run otprotocol test From 8248ddd574bdec2eb7db0fc4f870457cf01230e1 Mon Sep 17 00:00:00 2001 From: Johannes Tax Date: Tue, 7 Jul 2020 14:25:59 -0700 Subject: [PATCH 51/53] Fix WITH_SDK flag --- CMakeLists.txt | 2 +- examples/CMakeLists.txt | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7270371635..995f5c559b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -65,5 +65,5 @@ if(WITH_SDK) include_directories(sdk) add_subdirectory(sdk) add_subdirectory(exporters) - add_subdirectory(examples) endif() +add_subdirectory(examples) diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index dcb04ccf4e..462e46fcad 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -1,2 +1,5 @@ -add_subdirectory(plugin) -add_subdirectory(simple) +if(WITH_SDK) + add_subdirectory(simple) +else() + add_subdirectory(plugin) +endif() From 708f7b0c483ca2713320f66595626e5403ca5337 Mon Sep 17 00:00:00 2001 From: Johannes Tax Date: Tue, 7 Jul 2020 14:31:12 -0700 Subject: [PATCH 52/53] Increase timeout to avoid flaky tests --- sdk/test/event/async_timer/dispatcher_test.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/test/event/async_timer/dispatcher_test.cc b/sdk/test/event/async_timer/dispatcher_test.cc index 367e338c75..afd105ddf9 100644 --- a/sdk/test/event/async_timer/dispatcher_test.cc +++ b/sdk/test/event/async_timer/dispatcher_test.cc @@ -30,7 +30,7 @@ TEST(DispatcherTest, ResetTimer) dispatcher.Run(); auto duration = t2 - t1; EXPECT_TRUE(duration > std::chrono::milliseconds{50}); - EXPECT_TRUE(duration < std::chrono::milliseconds{200}); + EXPECT_TRUE(duration < std::chrono::milliseconds{300}); } TEST(DispatcherTest, TimerOrder) From cc34479373512e7090a706a76fa843af75af8cbe Mon Sep 17 00:00:00 2001 From: Johannes Tax Date: Tue, 7 Jul 2020 15:16:43 -0700 Subject: [PATCH 53/53] Fix Windows dependencies --- .github/workflows/ci.yml | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ceefc8f468..f1e6dc3a7b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -161,7 +161,6 @@ jobs: - uses: actions/checkout@v2 - name: setup run: | - ./ci/setup_windows_cmake.ps1 ./ci/setup_windows_ci_environment.ps1 ./ci/install_windows_protobuf.ps1 - name: setup libevent @@ -176,10 +175,6 @@ jobs: runs-on: windows-2019 steps: - uses: actions/checkout@v2 - - name: setup - run: | - ./ci/setup_windows_cmake.ps1 - ./ci/install_windows_bazelisk.ps1 - name: run tests run: ./ci/do_ci.ps1 bazel.build @@ -189,9 +184,7 @@ jobs: steps: - uses: actions/checkout@v2 - name: setup - run: | - ./ci/setup_windows_cmake.ps1 - ./ci/setup_windows_ci_environment.ps1 + run: ./ci/setup_windows_ci_environment.ps1 - name: run tests run: ./ci/do_ci.ps1 cmake.test_example_plugin @@ -204,6 +197,7 @@ jobs: run: | sudo ./ci/setup_cmake.sh sudo ./ci/setup_ci_environment.sh + sudo ./ci/install_libevent.sh - name: run tests and generate report run: ./ci/do_ci.sh code.coverage - name: upload report