Skip to content

Commit 0946e7f

Browse files
authored
Merge branch 'main' into release-plz-2026-02-24T15-53-50Z
2 parents bc1139e + 935ba92 commit 0946e7f

File tree

1 file changed

+58
-0
lines changed
  • crates/enterprise/unleash-edge-delta/src

1 file changed

+58
-0
lines changed

crates/enterprise/unleash-edge-delta/src/cache.rs

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ pub struct DeltaCache {
1616

1717
impl DeltaCache {
1818
pub fn new(hydration_event: DeltaHydrationEvent, max_length: usize) -> Self {
19+
let mut hydration_event = hydration_event;
20+
hydration_event.segments.sort_by_key(|segment| segment.id);
21+
1922
let mut cache = DeltaCache {
2023
max_length,
2124
events: Vec::new(),
@@ -101,6 +104,9 @@ impl DeltaCache {
101104
*existing = segment.clone();
102105
} else {
103106
self.hydration_event.segments.push(segment.clone());
107+
self.hydration_event
108+
.segments
109+
.sort_by_key(|existing_segment| existing_segment.id);
104110
}
105111
}
106112
DeltaEvent::SegmentRemoved { segment_id, .. } => {
@@ -256,4 +262,56 @@ mod tests {
256262
assert_eq!(delta_cache.get_events()[1], initial_feature_event);
257263
assert_eq!(delta_cache.get_events()[2], updated_feature_event);
258264
}
265+
266+
#[test]
267+
fn keeps_hydration_segments_sorted_by_id_after_segment_changes() {
268+
let base_event = DeltaHydrationEvent {
269+
event_id: 1,
270+
features: vec![ClientFeature {
271+
name: "base-flag".to_string(),
272+
..ClientFeature::default()
273+
}],
274+
segments: vec![
275+
Segment {
276+
id: 10,
277+
constraints: vec![],
278+
},
279+
Segment {
280+
id: 2,
281+
constraints: vec![],
282+
},
283+
],
284+
};
285+
let mut delta_cache = DeltaCache::new(base_event, 10);
286+
287+
delta_cache.add_events(&[
288+
DeltaEvent::SegmentUpdated {
289+
event_id: 2,
290+
segment: Segment {
291+
id: 7,
292+
constraints: vec![],
293+
},
294+
},
295+
DeltaEvent::SegmentUpdated {
296+
event_id: 3,
297+
segment: Segment {
298+
id: 1,
299+
constraints: vec![],
300+
},
301+
},
302+
DeltaEvent::SegmentRemoved {
303+
event_id: 4,
304+
segment_id: 7,
305+
},
306+
]);
307+
308+
let segment_ids: Vec<i32> = delta_cache
309+
.get_hydration_event()
310+
.segments
311+
.iter()
312+
.map(|s| s.id)
313+
.collect();
314+
315+
assert_eq!(segment_ids, vec![1, 2, 10]);
316+
}
259317
}

0 commit comments

Comments
 (0)