Skip to content

Commit 20a23ce

Browse files
committed
refactor: use BigSegmentsStatus::kNone sentinel in EvaluationStack
1 parent a969b91 commit 20a23ce

4 files changed

Lines changed: 21 additions & 15 deletions

File tree

libs/server-sdk/src/evaluation/evaluation_stack.cpp

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,16 @@ namespace {
99
// independent of the enum's underlying values.
1010
int Precedence(enum EvaluationReason::BigSegmentsStatus status) {
1111
switch (status) {
12-
case EvaluationReason::BigSegmentsStatus::kHealthy:
12+
case EvaluationReason::BigSegmentsStatus::kNone:
1313
return 0;
14-
case EvaluationReason::BigSegmentsStatus::kStale:
14+
case EvaluationReason::BigSegmentsStatus::kHealthy:
1515
return 1;
16-
case EvaluationReason::BigSegmentsStatus::kStoreError:
16+
case EvaluationReason::BigSegmentsStatus::kStale:
1717
return 2;
18-
case EvaluationReason::BigSegmentsStatus::kNotConfigured:
18+
case EvaluationReason::BigSegmentsStatus::kStoreError:
1919
return 3;
20+
case EvaluationReason::BigSegmentsStatus::kNotConfigured:
21+
return 4;
2022
}
2123
return 0;
2224
}
@@ -56,14 +58,14 @@ data_components::BigSegmentStoreWrapper* EvaluationStack::BigSegmentStore()
5658
return big_segment_store_;
5759
}
5860

59-
void EvaluationStack::RecordBigSegmentsStatus(enum EvaluationReason::BigSegmentsStatus status) {
60-
if (!big_segments_status_ ||
61-
Precedence(status) > Precedence(*big_segments_status_)) {
61+
void EvaluationStack::RecordBigSegmentsStatus(
62+
enum EvaluationReason::BigSegmentsStatus status) {
63+
if (Precedence(status) > Precedence(big_segments_status_)) {
6264
big_segments_status_ = status;
6365
}
6466
}
6567

66-
std::optional<enum EvaluationReason::BigSegmentsStatus>
68+
enum EvaluationReason::BigSegmentsStatus
6769
EvaluationStack::BigSegmentsStatus() const {
6870
return big_segments_status_;
6971
}

libs/server-sdk/src/evaluation/evaluation_stack.hpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,10 +84,11 @@ class EvaluationStack {
8484
void RecordBigSegmentsStatus(enum EvaluationReason::BigSegmentsStatus status);
8585

8686
/**
87-
* @return The aggregated Big Segments status, or std::nullopt if no Big
88-
* Segment was queried during this evaluation.
87+
* @return The aggregated Big Segments status, or kNone if no Big Segment
88+
* was queried during this evaluation.
8989
*/
90-
[[nodiscard]] std::optional<enum EvaluationReason::BigSegmentsStatus> BigSegmentsStatus() const;
90+
[[nodiscard]] enum EvaluationReason::BigSegmentsStatus BigSegmentsStatus()
91+
const;
9192

9293
/**
9394
* Returns the cached membership for a context key looked up earlier in this
@@ -121,7 +122,8 @@ class EvaluationStack {
121122
std::unordered_set<std::string> segments_seen_;
122123

123124
data_components::BigSegmentStoreWrapper* big_segment_store_;
124-
std::optional<enum EvaluationReason::BigSegmentsStatus> big_segments_status_;
125+
enum EvaluationReason::BigSegmentsStatus big_segments_status_ =
126+
EvaluationReason::BigSegmentsStatus::kNone;
125127
// Keyed by unhashed context key. Empty until the first Big Segment lookup.
126128
std::unordered_map<std::string, integrations::Membership> memberships_;
127129
std::unordered_set<std::string> store_error_keys_;

libs/server-sdk/src/evaluation/evaluator.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,9 @@ EvaluationDetail<Value> Evaluator::Evaluate(
5353
EventScope const& event_scope) {
5454
EvaluationStack stack{big_segment_store_};
5555
auto detail = Evaluate(std::nullopt, flag, context, stack, event_scope);
56-
if (auto status = stack.BigSegmentsStatus()) {
57-
return WithBigSegmentsStatus(std::move(detail), *status);
56+
auto status = stack.BigSegmentsStatus();
57+
if (status != EvaluationReason::BigSegmentsStatus::kNone) {
58+
return WithBigSegmentsStatus(std::move(detail), status);
5859
}
5960
return detail;
6061
}

libs/server-sdk/tests/big_segment_evaluator_test.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,8 @@ TEST_F(BigSegmentEvaluatorTest, ContextLacksUnboundedKindDoesNotQuery) {
207207
eval.Evaluate(store_.GetFlag("flag")->item.value(), AliceUser());
208208

209209
EXPECT_EQ(*detail, Value(true));
210-
EXPECT_EQ(detail.Reason()->BigSegmentsStatus(), std::nullopt);
210+
EXPECT_EQ(detail.Reason()->BigSegmentsStatus(),
211+
EvaluationReason::BigSegmentsStatus::kNone);
211212
EXPECT_EQ(fake_->MembershipCalls(), 0);
212213
}
213214

0 commit comments

Comments
 (0)