@@ -59,11 +59,10 @@ type ChangeStreamReader struct {
5959 lastChangeEventTime * primitive.Timestamp
6060 logger * logger.Logger
6161 namespaces []string
62- metaDBName string
6362
64- metaClient * mongo.Client
63+ metaDB * mongo.Database
6564 watcherClient * mongo.Client
66- buildInfo * util.BuildInfo
65+ buildInfo util.BuildInfo
6766
6867 changeStreamRunning bool
6968 ChangeEventBatchChan chan []ParsedEvent
@@ -77,35 +76,29 @@ type ChangeStreamReader struct {
7776func (verifier * Verifier ) initializeChangeStreamReaders () {
7877 verifier .srcChangeStreamReader = & ChangeStreamReader {
7978 readerType : srcReaderType ,
80- lastChangeEventTime : nil ,
8179 logger : verifier .logger ,
8280 namespaces : verifier .srcNamespaces ,
83- metaDBName : verifier .metaDBName ,
84- metaClient : verifier .metaClient ,
81+ metaDB : verifier .metaClient .Database (verifier .metaDBName ),
8582 watcherClient : verifier .srcClient ,
86- buildInfo : verifier .srcBuildInfo ,
83+ buildInfo : * verifier .srcBuildInfo ,
8784 changeStreamRunning : false ,
8885 ChangeEventBatchChan : make (chan []ParsedEvent ),
8986 ChangeStreamWritesOffTsChan : make (chan primitive.Timestamp ),
9087 ChangeStreamErrChan : make (chan error ),
9188 ChangeStreamDoneChan : make (chan struct {}),
92- startAtTs : nil ,
9389 }
9490 verifier .dstChangeStreamReader = & ChangeStreamReader {
9591 readerType : dstReaderType ,
96- lastChangeEventTime : nil ,
9792 logger : verifier .logger ,
9893 namespaces : verifier .dstNamespaces ,
99- metaDBName : verifier .metaDBName ,
100- metaClient : verifier .metaClient ,
94+ metaDB : verifier .metaClient .Database (verifier .metaDBName ),
10195 watcherClient : verifier .dstClient ,
102- buildInfo : verifier .dstBuildInfo ,
96+ buildInfo : * verifier .dstBuildInfo ,
10397 changeStreamRunning : false ,
10498 ChangeEventBatchChan : make (chan []ParsedEvent ),
10599 ChangeStreamWritesOffTsChan : make (chan primitive.Timestamp ),
106100 ChangeStreamErrChan : make (chan error ),
107101 ChangeStreamDoneChan : make (chan struct {}),
108- startAtTs : nil ,
109102 }
110103}
111104
@@ -156,12 +149,13 @@ func (verifier *Verifier) HandleChangeStreamEvents(ctx context.Context, batch []
156149 // We need to retrieve the source namespaces if change events are from the destination.
157150 switch eventOrigin {
158151 case dstReaderType :
159- if len (verifier .dstSrcNsMap ) == 0 {
152+ if verifier .nsMap .Len () == 0 {
153+ // Namespace is not remapped. Source namespace is the same as the destination.
160154 srcDBName = changeEvent .Ns .DB
161155 srcCollName = changeEvent .Ns .Coll
162156 } else {
163157 dstNs := fmt .Sprintf ("%s.%s" , changeEvent .Ns .DB , changeEvent .Ns .Coll )
164- srcNs , exist := verifier .dstSrcNsMap [ dstNs ]
158+ srcNs , exist := verifier .nsMap . GetSrcNamespace ( dstNs )
165159 if ! exist {
166160 return errors .Errorf ("no source namespace corresponding to the destination namepsace %s" , dstNs )
167161 }
@@ -214,7 +208,7 @@ func (csr *ChangeStreamReader) GetChangeStreamFilter() (pipeline mongo.Pipeline)
214208 if len (csr .namespaces ) == 0 {
215209 pipeline = mongo.Pipeline {
216210 {{"$match" , bson.D {
217- {"ns.db" , bson.D {{"$ne" , csr .metaDBName }}},
211+ {"ns.db" , bson.D {{"$ne" , csr .metaDB . Name () }}},
218212 }}},
219213 }
220214 } else {
@@ -328,16 +322,17 @@ func (csr *ChangeStreamReader) iterateChangeStream(
328322 return ctx .Err ()
329323
330324 // If the ChangeStreamEnderChan has a message, the user has indicated that
331- // source and destination writes are ended. This means we should exit rather than continue
332- // reading the change stream since there should be no more events.
325+ // source writes are ended and the migration tool is finished / committed.
326+ // This means we should exit rather than continue reading the change stream
327+ // since there should be no more events.
333328 case writesOffTs := <- csr .ChangeStreamWritesOffTsChan :
334329 csr .logger .Debug ().
335330 Interface ("writesOffTimestamp" , writesOffTs ).
336331 Msg ("Change stream thread received writesOff timestamp. Finalizing change stream." )
337332
338333 gotwritesOffTimestamp = true
339334
340- // Read all change events until the source / destination reports no events .
335+ // Read change events until the stream reaches the writesOffTs .
341336 // (i.e., the `getMore` call returns empty)
342337 for {
343338 var curTs primitive.Timestamp
@@ -543,7 +538,7 @@ func addTimestampToLogEvent(ts primitive.Timestamp, event *zerolog.Event) *zerol
543538}
544539
545540func (csr * ChangeStreamReader ) getChangeStreamMetadataCollection () * mongo.Collection {
546- return csr .metaClient . Database ( csr . metaDBName ) .Collection (metadataChangeStreamCollectionName )
541+ return csr .metaDB .Collection (metadataChangeStreamCollectionName )
547542}
548543
549544func (csr * ChangeStreamReader ) loadChangeStreamResumeToken (ctx context.Context ) (bson.Raw , error ) {
0 commit comments