@@ -73,12 +73,13 @@ impl RevisionPersistence {
7373 revision : & ' a Revision ,
7474 compactor : & Arc < dyn RevisionCompactor + ' a > ,
7575 ) -> FlowyResult < i64 > {
76- let result = self . sync_seq . read ( ) . await . compact ( ) ;
76+ let mut sync_seq_write_guard = self . sync_seq . write ( ) . await ;
77+ let result = sync_seq_write_guard. compact ( ) ;
7778 match result {
7879 None => {
7980 tracing:: Span :: current ( ) . record ( "rev_id" , & revision. rev_id ) ;
8081 self . add ( revision. clone ( ) , RevisionState :: Sync , true ) . await ?;
81- self . sync_seq . write ( ) . await . add ( revision. rev_id ) ?;
82+ sync_seq_write_guard . add ( revision. rev_id ) ?;
8283 Ok ( revision. rev_id )
8384 }
8485 Some ( ( range, mut compact_seq) ) => {
@@ -101,8 +102,10 @@ impl RevisionPersistence {
101102
102103 // replace the revisions in range with compact revision
103104 self . compact ( & range, compact_revision) . await ?;
104- debug_assert_eq ! ( self . sync_seq. read( ) . await . len( ) , compact_seq. len( ) ) ;
105- self . sync_seq . write ( ) . await . reset ( compact_seq) ;
105+ //
106+ debug_assert_eq ! ( compact_seq. len( ) , 2 ) ;
107+ debug_assert_eq ! ( sync_seq_write_guard. len( ) , compact_seq. len( ) ) ;
108+ sync_seq_write_guard. reset ( compact_seq) ;
106109 Ok ( rev_id)
107110 }
108111 }
@@ -315,7 +318,11 @@ impl RevisionSyncSequence {
315318
316319 // Compact the rev_ids into one except the current synchronizing rev_id.
317320 fn compact ( & self ) -> Option < ( RevisionRange , VecDeque < i64 > ) > {
318- self . next_rev_id ( ) ?;
321+ // Make sure there are two rev_id going to sync. No need to compact if there is only
322+ // one rev_id in queue.
323+ if self . next_rev_id ( ) . is_none ( ) {
324+ return None ;
325+ }
319326
320327 let mut new_seq = self . 0 . clone ( ) ;
321328 let mut drained = new_seq. drain ( 1 ..) . collect :: < VecDeque < _ > > ( ) ;
0 commit comments