@@ -10,6 +10,7 @@ import (
1010 "github.com/10gen/migration-verifier/internal/retry"
1111 "github.com/10gen/migration-verifier/internal/types"
1212 "github.com/10gen/migration-verifier/internal/util"
13+ "github.com/10gen/migration-verifier/mbson"
1314 "github.com/10gen/migration-verifier/msync"
1415 "github.com/10gen/migration-verifier/option"
1516 mapset "github.com/deckarep/golang-set/v2"
@@ -857,17 +858,19 @@ func (csr *ChangeStreamReader) persistChangeStreamResumeToken(ctx context.Contex
857858}
858859
859860func extractTimestampFromResumeToken (resumeToken bson.Raw ) (primitive.Timestamp , error ) {
860- tokenStruct := struct {
861- Data string `bson:"_data"`
862- }{}
863-
864861 // Change stream token is always a V1 keystring in the _data field
865- err := bson .Unmarshal (resumeToken , & tokenStruct )
862+ tokenDataRV , err := resumeToken .LookupErr ("_data" )
863+
864+ if err != nil {
865+ return primitive.Timestamp {}, errors .Wrapf (err , "extracting %#q from resume token (%v)" , "_data" , resumeToken )
866+ }
867+
868+ tokenData , err := mbson.CastRawValue [string ](tokenDataRV )
866869 if err != nil {
867- return primitive.Timestamp {}, errors .Wrapf (err , "failed to extract %#q from resume token (%v)" , "_data" , resumeToken )
870+ return primitive.Timestamp {}, errors .Wrapf (err , "parsing resume token (%v)" , "_data" , resumeToken )
868871 }
869872
870- resumeTokenBson , err := keystring .KeystringToBson (keystring .V1 , tokenStruct . Data )
873+ resumeTokenBson , err := keystring .KeystringToBson (keystring .V1 , tokenData )
871874 if err != nil {
872875 return primitive.Timestamp {}, err
873876 }
0 commit comments