C++ Server-Side SDK
LaunchDarkly SDK
source_manager.hpp
1 #pragma once
2 
3 #include "../../data_interfaces/source/ifdv2_synchronizer.hpp"
4 #include "../../data_interfaces/source/ifdv2_synchronizer_factory.hpp"
5 
6 #include <cstddef>
7 #include <memory>
8 #include <vector>
9 
10 namespace launchdarkly::server_side::data_systems {
11 
31  public:
32  explicit SourceManager(
33  std::vector<std::unique_ptr<data_interfaces::IFDv2SynchronizerFactory>>
34  factories);
35 
42  std::unique_ptr<data_interfaces::IFDv2Synchronizer> NextSynchronizer();
43 
49 
54  void ResetSourceIndex();
55 
62  void SwitchToFDv1Fallback();
63 
68  void SwitchBackToFDv2();
69 
74  [[nodiscard]] bool IsPrimeSynchronizer() const;
75 
79  [[nodiscard]] std::size_t AvailableSynchronizerCount() const;
80 
86  [[nodiscard]] std::size_t SynchronizerCount() const;
87 
92  [[nodiscard]] bool IsCurrentSynchronizerFDv1Fallback() const;
93 
94  SourceManager(SourceManager const&) = delete;
95  SourceManager(SourceManager&&) = delete;
96  SourceManager& operator=(SourceManager const&) = delete;
97  SourceManager& operator=(SourceManager&&) = delete;
98  ~SourceManager() = default;
99 
100  private:
101  enum class State { kAvailable, kBlocked };
102 
103  struct SynchronizerFactoryWithState {
104  std::unique_ptr<data_interfaces::IFDv2SynchronizerFactory> factory;
105  State state = State::kAvailable;
106  bool is_fdv1_fallback = false;
107  };
108 
109  std::vector<SynchronizerFactoryWithState> synchronizers_;
110  // Iteration cursor; -1 means "start at 0 on next call".
111  int synchronizer_index_ = -1;
112  // Index of the most recently returned factory; -1 if none.
113  int current_factory_index_ = -1;
114 };
115 
116 } // namespace launchdarkly::server_side::data_systems
void SwitchToFDv1Fallback()
Definition: source_manager.cpp:49
void ResetSourceIndex()
Definition: source_manager.cpp:45
void BlockCurrentSynchronizer()
Definition: source_manager.cpp:39
bool IsCurrentSynchronizerFDv1Fallback() const
Definition: source_manager.cpp:88
void SwitchBackToFDv2()
Definition: source_manager.cpp:57
std::unique_ptr< data_interfaces::IFDv2Synchronizer > NextSynchronizer()
Definition: source_manager.cpp:22
bool IsPrimeSynchronizer() const
Definition: source_manager.cpp:65
std::size_t AvailableSynchronizerCount() const
Definition: source_manager.cpp:74
std::size_t SynchronizerCount() const
Definition: source_manager.cpp:84