3 #include "../../data_components/change_notifier/change_notifier.hpp"
4 #include "../../data_components/memory_store/memory_store.hpp"
5 #include "../../data_components/status_notifications/data_source_status_manager.hpp"
6 #include "../../data_interfaces/source/ifdv2_condition.hpp"
7 #include "../../data_interfaces/source/ifdv2_initializer_factory.hpp"
8 #include "../../data_interfaces/source/ifdv2_synchronizer_factory.hpp"
9 #include "../../data_interfaces/system/idata_system.hpp"
10 #include "conditions.hpp"
11 #include "source_manager.hpp"
13 #include <launchdarkly/async/cancellation.hpp>
14 #include <launchdarkly/data_model/selector.hpp>
15 #include <launchdarkly/logging/logger.hpp>
17 #include <boost/asio/any_io_executor.hpp>
26 namespace launchdarkly::server_side::data_systems {
162 std::vector<std::unique_ptr<data_interfaces::IFDv2InitializerFactory>>
163 initializer_factories,
164 std::vector<std::unique_ptr<data_interfaces::IFDv2SynchronizerFactory>>
165 synchronizer_factories,
166 std::unique_ptr<data_interfaces::IFDv2ConditionFactory>
167 fallback_condition_factory,
168 std::unique_ptr<data_interfaces::IFDv2ConditionFactory>
169 recovery_condition_factory,
170 boost::asio::any_io_executor ioc,
172 Logger
const& logger);
185 std::shared_ptr<data_model::FlagDescriptor>
GetFlag(
186 std::string
const& key)
const override;
192 std::shared_ptr<data_model::SegmentDescriptor>
GetSegment(
193 std::string
const& key)
const override;
199 std::unordered_map<std::string, std::shared_ptr<data_model::FlagDescriptor>>
207 std::unordered_map<std::string,
208 std::shared_ptr<data_model::SegmentDescriptor>>
215 std::string
const&
Identity()
const override;
245 void RunNextInitializer();
247 void StartSynchronizers();
248 void RunSynchronizerNext();
254 void ScheduleFDv2RetryLocked(std::chrono::seconds ttl);
258 void OnFDv1RetryTimer();
262 std::unique_ptr<Conditions> BuildActiveConditions()
const;
267 data_model::ChangeSet<data_interfaces::ChangeSetData> change_set);
273 boost::asio::any_io_executor
const ioc_;
274 std::vector<std::unique_ptr<data_interfaces::IFDv2InitializerFactory>>
const
275 initializer_factories_;
276 std::unique_ptr<data_interfaces::IFDv2ConditionFactory>
const
277 fallback_condition_factory_;
278 std::unique_ptr<data_interfaces::IFDv2ConditionFactory>
const
279 recovery_condition_factory_;
290 std::atomic_bool initialize_called_;
293 std::atomic_bool last_logged_synchronizer_interrupted_;
298 data_model::Selector selector_;
299 std::size_t initializer_index_;
301 std::unique_ptr<data_interfaces::IFDv2Initializer> active_initializer_;
302 std::unique_ptr<data_interfaces::IFDv2Synchronizer> active_synchronizer_;
303 std::unique_ptr<Conditions> active_conditions_;
306 async::CancellationSource fdv1_fallback_retry_cancel_;
Definition: change_notifier.hpp:17
Definition: data_source_status_manager.hpp:16
Definition: memory_store.hpp:17
IDataSystem obtains data used for flag evaluations and makes it available to other components.
Definition: idata_system.hpp:11
Type
Definition: ifdv2_condition.hpp:38
Definition: fdv2_data_system.hpp:138
bool Initialized() const override
Definition: fdv2_data_system.cpp:486
std::string const & Identity() const override
Definition: fdv2_data_system.cpp:95
void Initialize() override
Definition: fdv2_data_system.cpp:100
FDv2DataSystem(std::vector< std::unique_ptr< data_interfaces::IFDv2InitializerFactory >> initializer_factories, std::vector< std::unique_ptr< data_interfaces::IFDv2SynchronizerFactory >> synchronizer_factories, std::unique_ptr< data_interfaces::IFDv2ConditionFactory > fallback_condition_factory, std::unique_ptr< data_interfaces::IFDv2ConditionFactory > recovery_condition_factory, boost::asio::any_io_executor ioc, data_components::DataSourceStatusManager *status_manager, Logger const &logger)
Definition: fdv2_data_system.cpp:26
std::shared_ptr< data_model::FlagDescriptor > GetFlag(std::string const &key) const override
Definition: fdv2_data_system.cpp:75
std::unordered_map< std::string, std::shared_ptr< data_model::SegmentDescriptor > > AllSegments() const override
Definition: fdv2_data_system.cpp:91
std::unordered_map< std::string, std::shared_ptr< data_model::FlagDescriptor > > AllFlags() const override
Definition: fdv2_data_system.cpp:86
std::shared_ptr< data_model::SegmentDescriptor > GetSegment(std::string const &key) const override
Definition: fdv2_data_system.cpp:80
Definition: source_manager.hpp:30
Definition: fdv2_source_result.hpp:56