@@ -89,17 +89,20 @@ func (s *service) Run(ctx context.Context) (err error) {
8989 }
9090 s .logColl = s .client .Database (s .conf .Database ).Collection (s .conf .LogCollection )
9191 s .running = true
92- if s .changeReceiver != nil {
93- if err = s .runStreamListener (ctx ); err != nil {
94- return err
95- }
96- }
9792 s .settingsColl = s .client .Database (s .conf .Database ).Collection (settingsColl )
9893 s .payloadColl = s .client .Database (s .conf .Database ).Collection (payloadColl )
9994 if _ , err = s .payloadColl .Indexes ().CreateOne (ctx , mongo.IndexModel {Keys : bson.D {{Key : "logId" , Value : 1 }}}); err != nil {
10095 return err
10196 }
102- return s .runMigrations (ctx )
97+ if err = s .runMigrations (ctx ); err != nil {
98+ return err
99+ }
100+ if s .changeReceiver != nil {
101+ if err = s .runStreamListener (ctx ); err != nil {
102+ return err
103+ }
104+ }
105+ return nil
103106}
104107
105108func (s * service ) tx (ctx context.Context , f func (txCtx mongo.SessionContext ) error ) (err error ) {
@@ -214,10 +217,12 @@ func (s *service) savePayload(ctx context.Context, payload consensus.Payload) (e
214217 if payload .Payload == nil {
215218 return fmt .Errorf ("payload is nil" )
216219 }
217- _ , err = s .payloadColl .InsertOne (ctx , payload )
218- if mongo .IsDuplicateKeyError (err ) {
219- return nil
220- }
220+ _ , err = s .payloadColl .UpdateOne (
221+ ctx ,
222+ bson.D {{"_id" , payload .Id }},
223+ bson.D {{"$setOnInsert" , payload }},
224+ options .Update ().SetUpsert (true ),
225+ )
221226 return
222227}
223228
0 commit comments