@@ -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