77
88 "github.com/10gen/migration-verifier/internal/keystring"
99 "github.com/10gen/migration-verifier/internal/logger"
10- "github.com/10gen/migration-verifier/internal/replay"
1110 "github.com/10gen/migration-verifier/internal/retry"
1211 "github.com/10gen/migration-verifier/internal/util"
1312 "github.com/10gen/migration-verifier/msync"
@@ -69,8 +68,7 @@ type ChangeStreamReader struct {
6968
7069 changeStreamRunning bool
7170 changeEventBatchChan chan []ParsedEvent
72- writesOffTsChan <- chan primitive.Timestamp
73- writesOffTsWriteFunc func (primitive.Timestamp )
71+ writesOffTs * util.Eventual [primitive.Timestamp ]
7472 errChan chan error
7573 doneChan chan struct {}
7674
@@ -80,7 +78,6 @@ type ChangeStreamReader struct {
8078}
8179
8280func (verifier * Verifier ) initializeChangeStreamReaders (ctx context.Context ) {
83- srcWritesOffReaderChan , srcWritesOffWriter := replay.CreateChannel [primitive.Timestamp ](ctx )
8481
8582 verifier .srcChangeStreamReader = & ChangeStreamReader {
8683 readerType : src ,
@@ -91,15 +88,12 @@ func (verifier *Verifier) initializeChangeStreamReaders(ctx context.Context) {
9188 clusterInfo : * verifier .srcClusterInfo ,
9289 changeStreamRunning : false ,
9390 changeEventBatchChan : make (chan []ParsedEvent ),
94- writesOffTsChan : srcWritesOffReaderChan ,
95- writesOffTsWriteFunc : srcWritesOffWriter ,
91+ writesOffTs : util .NewEventual [primitive.Timestamp ](),
9692 errChan : make (chan error ),
9793 doneChan : make (chan struct {}),
9894 lag : msync .NewTypedAtomic (option .None [time.Duration ]()),
9995 }
10096
101- dstWritesOffReaderChan , dstWritesOffWriter := replay.CreateChannel [primitive.Timestamp ](ctx )
102-
10397 verifier .dstChangeStreamReader = & ChangeStreamReader {
10498 readerType : dst ,
10599 logger : verifier .logger ,
@@ -109,8 +103,7 @@ func (verifier *Verifier) initializeChangeStreamReaders(ctx context.Context) {
109103 clusterInfo : * verifier .dstClusterInfo ,
110104 changeStreamRunning : false ,
111105 changeEventBatchChan : make (chan []ParsedEvent ),
112- writesOffTsChan : dstWritesOffReaderChan ,
113- writesOffTsWriteFunc : dstWritesOffWriter ,
106+ writesOffTs : util .NewEventual [primitive.Timestamp ](),
114107 errChan : make (chan error ),
115108 doneChan : make (chan struct {}),
116109 lag : msync .NewTypedAtomic (option .None [time.Duration ]()),
@@ -363,10 +356,9 @@ func (csr *ChangeStreamReader) iterateChangeStream(
363356 // source writes are ended and the migration tool is finished / committed.
364357 // This means we should exit rather than continue reading the change stream
365358 // since there should be no more events.
366- case writesOffTs , more := <- csr .writesOffTsChan :
367- if ! more {
368- panic (csr .String () + ": attempted read from already-closed writesOffTsChan" )
369- }
359+ case <- csr .writesOffTs .Ready ():
360+ writesOffTs := csr .writesOffTs .Get ().MustGet ()
361+
370362 csr .logger .Debug ().
371363 Interface ("writesOffTimestamp" , writesOffTs ).
372364 Msgf ("%s thread received writesOff timestamp. Finalizing change stream." , csr )
0 commit comments