@@ -950,6 +950,60 @@ describeSpec('Listens:', [], () => {
950
950
}
951
951
) ;
952
952
953
+ // Reproduces b/249494921.
954
+ specTest (
955
+ 'Secondary client advances query state with global snapshot from primary' ,
956
+ [ 'multi-client' ] ,
957
+ ( ) => {
958
+ const query1 = query ( 'collection' ) ;
959
+ const docA = doc ( 'collection/a' , 1000 , { key : '1' } ) ;
960
+ const docADeleted = deletedDoc ( 'collection/a' , 2000 ) ;
961
+ const docARecreated = doc ( 'collection/a' , 2000 , {
962
+ key : '2'
963
+ } ) . setHasLocalMutations ( ) ;
964
+
965
+ return (
966
+ client ( 0 )
967
+ . becomeVisible ( )
968
+ . expectPrimaryState ( true )
969
+ . userListens ( query1 )
970
+ . watchAcksFull ( query1 , 1000 , docA )
971
+ . expectEvents ( query1 , { added : [ docA ] } )
972
+ . userUnlistens ( query1 )
973
+ . watchRemoves ( query1 )
974
+ . client ( 1 )
975
+ . userListens ( query1 )
976
+ . expectEvents ( query1 , { added : [ docA ] , fromCache : true } )
977
+ . client ( 0 )
978
+ . expectListen ( query1 , { resumeToken : 'resume-token-1000' } )
979
+ . watchAcksFull ( query1 , 1500 , docA )
980
+ . client ( 1 )
981
+ . expectEvents ( query1 , { } )
982
+ . client ( 0 )
983
+ . userDeletes ( 'collection/a' )
984
+ . client ( 1 )
985
+ . expectEvents ( query1 , {
986
+ removed : [ docA ]
987
+ } )
988
+ . client ( 0 )
989
+ . writeAcks ( 'collection/a' , 2000 )
990
+ . watchAcksFull ( query1 , 2000 , docADeleted )
991
+ . client ( 1 ) // expects no event
992
+ . client ( 0 )
993
+ . userSets ( 'collection/a' , { key : '2' } )
994
+ . client ( 1 )
995
+ // Without the fix for b/249494921, two snapshots will be raised: a first
996
+ // one as show below, and a second one with `docADeleted` because
997
+ // `client(1)` failed to advance its cursor in remote document cache, and
998
+ // read a stale document.
999
+ . expectEvents ( query1 , {
1000
+ added : [ docARecreated ] ,
1001
+ hasPendingWrites : true
1002
+ } )
1003
+ ) ;
1004
+ }
1005
+ ) ;
1006
+
953
1007
specTest (
954
1008
'Mirror queries from same secondary client' ,
955
1009
[ 'multi-client' ] ,
0 commit comments