@@ -382,7 +382,13 @@ usersApi.getUid = function(app_id, callback) {
382
382
} ;
383
383
384
384
385
- usersApi . mergeOtherPlugins = function ( db , app_id , newAppUser , oldAppUser , updateFields , callback ) {
385
+ usersApi . mergeOtherPlugins = function ( options , callback ) {
386
+ var db = options . db ;
387
+ var app_id = options . app_id ;
388
+ var newAppUser = options . newAppUser ;
389
+ var oldAppUser = options . oldAppUser ;
390
+ var updateFields = options . updateFields ;
391
+ var mergeDoc = options . mergeDoc || { } ;
386
392
log . d ( "Merging other plugins " , oldAppUser . uid + "->" + newAppUser . uid ) ;
387
393
var iid = app_id + "_" + newAppUser . uid + "_" + oldAppUser . uid ;
388
394
updateFields . lu = Math . round ( new Date ( ) . getTime ( ) / 1000 ) ;
@@ -396,17 +402,31 @@ usersApi.mergeOtherPlugins = function(db, app_id, newAppUser, oldAppUser, update
396
402
}
397
403
}
398
404
else if ( res && res . length > 0 ) {
399
- callback ( "skipping till previous merge is finished" ) ;
405
+ //update lu field
406
+ delete updateFields . cc ; //do not set as calculating
407
+ db . collection ( 'app_user_merges' ) . update ( { "_id" : iid } , { "$set" : updateFields } , { upsert : false } , function ( err00 ) {
408
+ if ( err00 ) {
409
+ log . e ( err00 ) ;
410
+ }
411
+ callback ( "skipping till previous merge is finished" ) ;
412
+ } ) ;
400
413
}
401
414
else {
402
- db . collection ( 'app_user_merges' ) . update ( { "_id" : iid , "cc" : { "$ne" : true } } , { '$set' : updateFields , "$inc" : { "t" : 1 } } , { upsert : false } , function ( err0 ) {
415
+ var updateQuery = { "_id" : iid } ;
416
+ if ( mergeDoc && mergeDoc . cc && mergeDoc . lu ) {
417
+ updateQuery . lu = mergeDoc . lu ;
418
+ }
419
+ else {
420
+ updateQuery . cc = { "$ne" : true } ;
421
+ }
422
+ db . collection ( 'app_user_merges' ) . update ( updateQuery , { '$set' : updateFields , "$inc" : { "t" : 1 } } , { upsert : false } , function ( err0 , resUpdate ) {
403
423
if ( err0 ) {
404
424
log . e ( "Failed to update merge document about started merge" , err ) ;
405
425
if ( callback && typeof callback === 'function' ) {
406
426
callback ( err ) ;
407
427
}
408
428
}
409
- else {
429
+ else if ( resUpdate && resUpdate . modifiedCount > 0 ) { //doc was updated
410
430
plugins . dispatch ( "/i/device_id" , {
411
431
app_id : app_id ,
412
432
oldUser : oldAppUser ,
@@ -448,6 +468,10 @@ usersApi.mergeOtherPlugins = function(db, app_id, newAppUser, oldAppUser, update
448
468
}
449
469
} ) ;
450
470
}
471
+ else {
472
+ //something else already triggered this change in paralel.
473
+ callback ( ) ;
474
+ }
451
475
} ) ;
452
476
}
453
477
} ) ;
@@ -661,7 +685,7 @@ usersApi.merge = function(app_id, newAppUser, new_id, old_id, new_device_id, old
661
685
if ( err7 ) {
662
686
log . e ( "Failed metric changes update in app_users merge" , err7 ) ;
663
687
}
664
- usersApi . mergeOtherPlugins ( common . db , app_id , newAppUserP , oldAppUser , { "cc" : true , "u" : true , "mc" : true } , function ( ) { } ) ;
688
+ usersApi . mergeOtherPlugins ( { db : common . db , app_id : app_id , newAppUser : newAppUserP , oldAppUser : oldAppUser , updateFields : { "cc" : true , "u" : true , "mc" : true } } , function ( ) { } ) ;
665
689
} ) ;
666
690
}
667
691
} ) ;
0 commit comments