Skip to content

Commit aaf3aa6

Browse files
committed
refactor: FDv2Builder starts empty; add Default() for spec config
1 parent 3cbd19b commit aaf3aa6

3 files changed

Lines changed: 29 additions & 26 deletions

File tree

libs/server-sdk/include/launchdarkly/server_side/config/builders/data_system/fdv2_builder.hpp

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,22 @@ class FDv2Builder {
3838
std::optional<std::string> base_url_override_;
3939
};
4040

41+
/**
42+
* Constructs a builder with no initializers, no synchronizers, and no
43+
* FDv1 fallback. Use Default() for the spec-recommended configuration.
44+
*/
4145
FDv2Builder();
4246

4347
/**
44-
* @brief Appends a polling initializer to the initializers list. The
45-
* first call to this method on a default-constructed builder replaces
46-
* the spec-default initializer list; subsequent calls append.
48+
* @return A builder pre-populated with the spec-recommended initializers,
49+
* synchronizers, and FDv1 fallback. Equivalent to calling
50+
* Initializer(), Synchronizer(), and FDv1Fallback() with the
51+
* standard sources.
52+
*/
53+
static FDv2Builder Default();
54+
55+
/**
56+
* @brief Appends a polling initializer to the initializers list.
4757
* @param source Polling source configuration for the initializer.
4858
* @return Reference to this.
4959
*/
@@ -52,18 +62,15 @@ class FDv2Builder {
5262
/**
5363
* @brief Appends a streaming synchronizer to the synchronizers list.
5464
* Order in the list determines preference: the first entry is the
55-
* primary synchronizer, subsequent entries are fallbacks. The first
56-
* call to a Synchronizer overload on a default-constructed builder
57-
* replaces the spec-default synchronizer list; subsequent calls append.
65+
* primary synchronizer, subsequent entries are fallbacks.
5866
* @param source Streaming source configuration.
5967
* @return Reference to this.
6068
*/
6169
FDv2Builder& Synchronizer(Streaming source);
6270

6371
/**
6472
* @brief Appends a polling synchronizer to the synchronizers list. See
65-
* Synchronizer(Streaming) for ordering and default-replacement
66-
* semantics.
73+
* Synchronizer(Streaming) for ordering semantics.
6774
* @param source Polling source configuration.
6875
* @return Reference to this.
6976
*/
@@ -130,8 +137,6 @@ class FDv2Builder {
130137

131138
private:
132139
built::FDv2Config config_;
133-
bool initializers_explicit_;
134-
bool synchronizers_explicit_;
135140
};
136141

137142
} // namespace launchdarkly::server_side::config::builders

libs/server-sdk/src/config/builders/data_system/fdv2_builder.cpp

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -45,33 +45,31 @@ built::FDv2Config::PollingConfig FDv2Builder::Polling::Build() const {
4545
}
4646

4747
FDv2Builder::FDv2Builder()
48-
: config_(Defaults::FDv2Config()),
49-
initializers_explicit_(false),
50-
synchronizers_explicit_(false) {}
48+
: config_{{},
49+
{},
50+
std::nullopt,
51+
std::chrono::minutes{2},
52+
std::chrono::minutes{5}} {}
53+
54+
FDv2Builder FDv2Builder::Default() {
55+
return FDv2Builder()
56+
.Initializer(Polling{})
57+
.Synchronizer(Streaming{})
58+
.Synchronizer(Polling{})
59+
.FDv1Fallback(FDv1Streaming{});
60+
}
5161

5262
FDv2Builder& FDv2Builder::Initializer(Polling source) {
53-
if (!initializers_explicit_) {
54-
config_.initializers.clear();
55-
initializers_explicit_ = true;
56-
}
5763
config_.initializers.push_back(source.Build());
5864
return *this;
5965
}
6066

6167
FDv2Builder& FDv2Builder::Synchronizer(Streaming source) {
62-
if (!synchronizers_explicit_) {
63-
config_.synchronizers.clear();
64-
synchronizers_explicit_ = true;
65-
}
6668
config_.synchronizers.push_back(source.Build());
6769
return *this;
6870
}
6971

7072
FDv2Builder& FDv2Builder::Synchronizer(Polling source) {
71-
if (!synchronizers_explicit_) {
72-
config_.synchronizers.clear();
73-
synchronizers_explicit_ = true;
74-
}
7573
config_.synchronizers.push_back(source.Build());
7674
return *this;
7775
}

libs/server-sdk/tests/config_builder_test.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ TEST_F(ConfigBuilderTest, CanSetPollingPayloadFilterKey) {
104104

105105
TEST_F(ConfigBuilderTest, FDv2_DefaultsAreUsed) {
106106
ConfigBuilder builder("sdk-123");
107-
builder.DataSystem().Method(builders::DataSystemBuilder::FDv2());
107+
builder.DataSystem().Method(builders::DataSystemBuilder::FDv2::Default());
108108

109109
auto cfg = builder.Build();
110110

0 commit comments

Comments
 (0)