Skip to content

Commit e20dfea

Browse files
committed
fix: exclude User nodes from metadata holders
1 parent 89809d2 commit e20dfea

1 file changed

Lines changed: 31 additions & 5 deletions

File tree

operations/src/metadata/projector.rs

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -717,15 +717,23 @@ fn expand_create_event_holders(
717717
) -> Result<MetadataCreateEventRecord, MetadataProjectionError> {
718718
event.record.last_event_id = event.event_id;
719719
let mut holders = event.record.holder_node_ids.clone();
720-
if !holders.contains(&event.node_id) {
721-
holders.push(event.node_id);
722-
}
723-
sort_node_ids(&mut holders);
724720

725721
let Some(realm_config) = realm_config else {
722+
if !holders.contains(&event.node_id) {
723+
holders.push(event.node_id);
724+
}
725+
sort_node_ids(&mut holders);
726726
event.record.holder_node_ids = holders;
727727
return Ok(event);
728728
};
729+
730+
let candidates = realm_config.sync_eligible_node_ids()?;
731+
holders.retain(|node_id| candidates.contains(node_id));
732+
if candidates.contains(&event.node_id) && !holders.contains(&event.node_id) {
733+
holders.push(event.node_id);
734+
}
735+
sort_node_ids(&mut holders);
736+
729737
if local_node_id != Some(event.node_id) {
730738
event.record.holder_node_ids = holders;
731739
return Ok(event);
@@ -738,7 +746,6 @@ fn expand_create_event_holders(
738746
event.record.group_id,
739747
Some(event.record.document_path.as_str()),
740748
);
741-
let candidates = realm_config.sync_eligible_node_ids()?;
742749

743750
event.record.holder_node_ids =
744751
complete_authoritative_holders(&target, &candidates, &holders, desired_holder_count);
@@ -1192,6 +1199,25 @@ mod tests {
11921199
assert_eq!(expanded.record.last_event_id, event.event_id);
11931200
}
11941201

1202+
#[test]
1203+
fn metadata_origin_excludes_user_node_from_holders() {
1204+
let mut event = create_event();
1205+
event.node_id = node(1);
1206+
event.record.holder_node_ids = vec![node(1)];
1207+
let mut config = RealmConfigDocument::new(event.record.realm_id, Vec::new(), 3);
1208+
config.ensure_node(node(1), RealmNodeKind::User);
1209+
config.ensure_node(node(2), RealmNodeKind::Server);
1210+
config.ensure_node(node(3), RealmNodeKind::Server);
1211+
config.ensure_node(node(4), RealmNodeKind::Server);
1212+
1213+
let expanded = expand_create_event_holders(event, Some(node(1)), Some(&config))
1214+
.expect("holders expand");
1215+
1216+
let mut expected = vec![node(2), node(3), node(4)];
1217+
sort_node_ids(&mut expected);
1218+
assert_eq!(expanded.record.holder_node_ids, expected);
1219+
}
1220+
11951221
#[test]
11961222
fn metadata_recipient_preserves_authoritative_holders() {
11971223
let mut event = create_event();

0 commit comments

Comments
 (0)