@@ -24,7 +24,7 @@ use corro_types::{
2424 actor:: { Actor , ActorId } ,
2525 agent:: { Agent , Bookie , SplitPool } ,
2626 base:: CrsqlSeq ,
27- broadcast:: { BroadcastInput , BroadcastV1 , ChangeSource , ChangeV1 , FocaInput } ,
27+ broadcast:: { BroadcastInput , BroadcastV1 , BroadcastV2 , ChangeSource , ChangeV1 , FocaInput } ,
2828 channel:: CorroReceiver ,
2929 members:: MemberAddedResult ,
3030 sync:: generate_sync,
@@ -690,7 +690,7 @@ pub async fn handle_changes(
690690 continue ;
691691 }
692692
693- let src_str: & ' static str = src. into ( ) ;
693+ let src_str: & ' static str = ( & src) . into ( ) ;
694694 let recv_lag = change. ts ( ) . and_then ( |ts| {
695695 let mut our_ts = Timestamp :: from ( agent. clock ( ) . new_timestamp ( ) ) ;
696696 if ts > our_ts {
@@ -705,7 +705,10 @@ pub async fn handle_changes(
705705 Some ( ( our_ts. 0 - ts. 0 ) . to_duration ( ) )
706706 } ) ;
707707
708- if matches ! ( src, ChangeSource :: Broadcast ) {
708+ if matches ! (
709+ src,
710+ ChangeSource :: Broadcast | ChangeSource :: BroadcastV2 ( _, _)
711+ ) {
709712 counter ! ( "corro.broadcast.recv.count" , "kind" => "change" ) . increment ( 1 ) ;
710713 }
711714
@@ -766,20 +769,32 @@ pub async fn handle_changes(
766769 }
767770 }
768771
769- assert_sometimes ! (
770- matches!( src, ChangeSource :: Sync ) ,
771- "Corrosion receives changes through sync"
772- ) ;
773- if matches ! ( src, ChangeSource :: Broadcast ) && !change. is_empty ( ) {
774- assert_sometimes ! ( true , "Corrosion rebroadcasts changes" ) ;
775- if let Err ( _e) =
776- agent
777- . tx_bcast ( )
778- . try_send ( BroadcastInput :: Rebroadcast ( BroadcastV1 :: Change (
772+ if !change. is_empty ( ) {
773+ let bcast = match src. clone ( ) {
774+ ChangeSource :: Broadcast => {
775+ assert_sometimes ! ( true , "Corrosion rebroadcasts changes" ) ;
776+ Some ( BroadcastInput :: Rebroadcast ( BroadcastV1 :: Change (
779777 change. clone ( ) ,
780778 ) ) )
781- {
782- debug ! ( "broadcasts are full or done!" ) ;
779+ }
780+ ChangeSource :: BroadcastV2 ( set, num_broadcasts) => {
781+ assert_sometimes ! ( true , "Corrosion rebroadcasts changes" ) ;
782+ Some ( BroadcastInput :: RebroadcastV2 ( BroadcastV2 {
783+ change : BroadcastV1 :: Change ( change. clone ( ) ) ,
784+ set,
785+ num_broadcasts,
786+ } ) )
787+ }
788+ ChangeSource :: Sync => {
789+ assert_sometimes ! ( true , "Corrosion receives changes through sync" ) ;
790+ None
791+ }
792+ } ;
793+
794+ if let Some ( bcast) = bcast {
795+ if let Err ( _e) = agent. tx_bcast ( ) . try_send ( bcast) {
796+ debug ! ( "broadcasts are full or done!" ) ;
797+ }
783798 }
784799 }
785800
0 commit comments