@@ -66,8 +66,8 @@ type ChangeStreamReader struct {
6666
6767 changeStreamRunning bool
6868 changeEventBatchChan chan []ParsedEvent
69- writesOffTsChan chan primitive.Timestamp
70- errChan chan error
69+ writesOffTs * util. Eventual [ primitive.Timestamp ]
70+ error * util. Eventual [ error ]
7171 doneChan chan struct {}
7272
7373 startAtTs * primitive.Timestamp
@@ -83,8 +83,8 @@ func (verifier *Verifier) initializeChangeStreamReaders() {
8383 clusterInfo : * verifier .srcClusterInfo ,
8484 changeStreamRunning : false ,
8585 changeEventBatchChan : make (chan []ParsedEvent ),
86- writesOffTsChan : make ( chan primitive.Timestamp ),
87- errChan : make ( chan error ),
86+ writesOffTs : util . NewEventual [ primitive.Timestamp ]( ),
87+ error : util . NewEventual [ error ]( ),
8888 doneChan : make (chan struct {}),
8989 }
9090 verifier .dstChangeStreamReader = & ChangeStreamReader {
@@ -96,8 +96,8 @@ func (verifier *Verifier) initializeChangeStreamReaders() {
9696 clusterInfo : * verifier .dstClusterInfo ,
9797 changeStreamRunning : false ,
9898 changeEventBatchChan : make (chan []ParsedEvent ),
99- writesOffTsChan : make ( chan primitive.Timestamp ),
100- errChan : make ( chan error ),
99+ writesOffTs : util . NewEventual [ primitive.Timestamp ]( ),
100+ error : util . NewEventual [ error ]( ),
101101 doneChan : make (chan struct {}),
102102 }
103103}
@@ -117,7 +117,6 @@ func (verifier *Verifier) StartChangeEventHandler(ctx context.Context, reader *C
117117 verifier .logger .Trace ().Msgf ("Verifier is handling a change event batch from %s: %v" , reader , batch )
118118 err := verifier .HandleChangeStreamEvents (ctx , batch , reader .readerType )
119119 if err != nil {
120- reader .errChan <- err
121120 return err
122121 }
123122 }
@@ -336,7 +335,9 @@ func (csr *ChangeStreamReader) iterateChangeStream(
336335 // source writes are ended and the migration tool is finished / committed.
337336 // This means we should exit rather than continue reading the change stream
338337 // since there should be no more events.
339- case writesOffTs := <- csr .writesOffTsChan :
338+ case <- csr .writesOffTs .Ready ():
339+ writesOffTs := csr .writesOffTs .Get ().MustGet ()
340+
340341 csr .logger .Debug ().
341342 Interface ("writesOffTimestamp" , writesOffTs ).
342343 Msgf ("%s thread received writesOff timestamp. Finalizing change stream." , csr )
@@ -389,7 +390,7 @@ func (csr *ChangeStreamReader) iterateChangeStream(
389390 }
390391 // since we have started Recheck, we must signal that we have
391392 // finished the change stream changes so that Recheck can continue.
392- csr .doneChan <- struct {}{}
393+ close ( csr .doneChan )
393394 break
394395 }
395396 }
@@ -525,10 +526,7 @@ func (csr *ChangeStreamReader) StartChangeStream(ctx context.Context) error {
525526 )
526527
527528 if err != nil {
528- // NB: This failure always happens after the initial change stream
529- // creation.
530- csr .errChan <- err
531- close (csr .errChan )
529+ csr .error .Set (err )
532530 }
533531 }()
534532
0 commit comments