From e78578e5757e4f55e726ff1dc42bf0dea6b234a2 Mon Sep 17 00:00:00 2001 From: Matthew Keeler Date: Fri, 19 Jan 2024 16:53:12 -0500 Subject: [PATCH 1/2] feat: always inline contexts for feature events --- contract-tests/client-contract-tests/src/main.cpp | 1 + contract-tests/server-contract-tests/src/main.cpp | 1 + .../include/launchdarkly/events/data/common_events.hpp | 2 +- libs/internal/src/events/asio_event_processor.cpp | 2 +- libs/internal/src/serialization/events/json_events.cpp | 3 +-- libs/internal/tests/event_serialization_test.cpp | 7 +++++-- 6 files changed, 10 insertions(+), 6 deletions(-) diff --git a/contract-tests/client-contract-tests/src/main.cpp b/contract-tests/client-contract-tests/src/main.cpp index 78d2b3afe..5ab6d34b6 100644 --- a/contract-tests/client-contract-tests/src/main.cpp +++ b/contract-tests/client-contract-tests/src/main.cpp @@ -40,6 +40,7 @@ int main(int argc, char* argv[]) { srv.add_capability("context-type"); srv.add_capability("service-endpoints"); srv.add_capability("tags"); + srv.add_capability("inline-context"); net::signal_set signals{ioc, SIGINT, SIGTERM}; diff --git a/contract-tests/server-contract-tests/src/main.cpp b/contract-tests/server-contract-tests/src/main.cpp index 61245d1af..1f0c1c0b9 100644 --- a/contract-tests/server-contract-tests/src/main.cpp +++ b/contract-tests/server-contract-tests/src/main.cpp @@ -40,6 +40,7 @@ int main(int argc, char* argv[]) { srv.add_capability("service-endpoints"); srv.add_capability("tags"); srv.add_capability("server-side-polling"); + srv.add_capability("inline-context"); net::signal_set signals{ioc, SIGINT, SIGTERM}; diff --git a/libs/internal/include/launchdarkly/events/data/common_events.hpp b/libs/internal/include/launchdarkly/events/data/common_events.hpp index c9670df30..8b2ea48ca 100644 --- a/libs/internal/include/launchdarkly/events/data/common_events.hpp +++ b/libs/internal/include/launchdarkly/events/data/common_events.hpp @@ -81,7 +81,7 @@ struct FeatureEventBase { struct FeatureEvent { FeatureEventBase base; - ContextKeys context_keys; + EventContext context; }; struct DebugEvent { diff --git a/libs/internal/src/events/asio_event_processor.cpp b/libs/internal/src/events/asio_event_processor.cpp index d8512af47..d41737bd8 100644 --- a/libs/internal/src/events/asio_event_processor.cpp +++ b/libs/internal/src/events/asio_event_processor.cpp @@ -255,7 +255,7 @@ std::vector AsioEventProcessor::Process( if (event.require_full_event) { out.emplace_back(FeatureEvent{std::move(base), - event.context.KindsToKeys()}); + filter_.filter(event.context)}); } }, [&](IdentifyEventParams&& event) { diff --git a/libs/internal/src/serialization/events/json_events.cpp b/libs/internal/src/serialization/events/json_events.cpp index a7ccaf303..0e52228bc 100644 --- a/libs/internal/src/serialization/events/json_events.cpp +++ b/libs/internal/src/serialization/events/json_events.cpp @@ -8,8 +8,7 @@ void tag_invoke(boost::json::value_from_tag const& tag, FeatureEvent const& event) { auto base = boost::json::value_from(event.base); base.as_object().emplace("kind", "feature"); - base.as_object().emplace("contextKeys", - boost::json::value_from(event.context_keys)); + base.as_object().emplace("context", boost::json::value_from(event.context)); json_value = std::move(base); } diff --git a/libs/internal/tests/event_serialization_test.cpp b/libs/internal/tests/event_serialization_test.cpp index f1f1cddfc..0fbcecae6 100644 --- a/libs/internal/tests/event_serialization_test.cpp +++ b/libs/internal/tests/event_serialization_test.cpp @@ -11,6 +11,9 @@ namespace launchdarkly::events { TEST(EventSerialization, FeatureEvent) { auto creation_date = std::chrono::system_clock::from_time_t({}); + AttributeReference::SetType attrs; + ContextFilter filter(false, attrs); + auto context = ContextBuilder().Kind("foo", "bar").Build(); auto event = events::FeatureEvent{ events::FeatureEventBase(events::FeatureEventParams{ creation_date, @@ -25,12 +28,12 @@ TEST(EventSerialization, FeatureEvent) { std::nullopt, }), - std::map{{"foo", "bar"}}}; + filter.filter(context)}; auto event_json = boost::json::value_from(event); auto result = boost::json::parse( - R"({"creationDate":0,"key":"key","version":1,"variation":2,"value":4.2E1,"default":3E0,"kind":"feature","contextKeys":{"foo":"bar"}})"); + R"({"creationDate":0,"key":"key","version":1,"variation":2,"value":4.2E1,"default":3E0,"kind":"feature","context":{"key":"bar","kind":"foo"}})"); ASSERT_EQ(result, event_json); } From c2f68d207fccfdd0ef095d8898b298afb9b328a9 Mon Sep 17 00:00:00 2001 From: Matthew Keeler Date: Mon, 22 Jan 2024 15:01:43 -0500 Subject: [PATCH 2/2] Formatting --- libs/internal/src/events/asio_event_processor.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/internal/src/events/asio_event_processor.cpp b/libs/internal/src/events/asio_event_processor.cpp index d41737bd8..143f0bfd4 100644 --- a/libs/internal/src/events/asio_event_processor.cpp +++ b/libs/internal/src/events/asio_event_processor.cpp @@ -254,8 +254,8 @@ std::vector AsioEventProcessor::Process( } if (event.require_full_event) { - out.emplace_back(FeatureEvent{std::move(base), - filter_.filter(event.context)}); + out.emplace_back(FeatureEvent{ + std::move(base), filter_.filter(event.context)}); } }, [&](IdentifyEventParams&& event) {