{DB#4}==> litecore::SQLiteDataFile /var/folders/gk/xfc67g4s27v6jrn_5tjhg0y80000gp/T/CouchbaseLite_EE/testdb.cblite2/db.sqlite3 @0x612000045640 {DB#6}==> litecore::SQLiteDataFile /var/folders/gk/xfc67g4s27v6jrn_5tjhg0y80000gp/T/CouchbaseLite_EE/otherdb.cblite2/db.sqlite3 @0x612000047740 // creates the `doc2` on local db; (local: seq 1, lastSequence: 0) 2020-07-27 17:49:42.859228-0700 {DB#4} Saved 'doc2' rev #1-581ad726ee407c8376fc94aad966051d013893c4 as seq 1 // passive replicator -> repl#12 {repl#12}==> litecore::repl::Replicator /var/folders/gk/xfc67g4s27v6jrn_5tjhg0y80000gp/T/CouchbaseLite_EE/otherdb.cblite2/ <-file:////var/folders/gk/xfc67g4s27v6jrn_5tjhg0y80000gp/T/CouchbaseLite_EE/testdb.cblite2/ @0x6190000aebb0 {repl#12} Push=passive, Pull=passive, Options={{noDeltas:1, noIncomingConflicts:1}} 2020-07-27 17:49:42.916367-0700 xctest[99497:1247141] CouchbaseLite Replicator Verbose: {incomingrev#21} Received revision 'doc2' #1-581ad726ee407c8376fc94aad966051d013893c4 (seq '1') 2020-07-27 17:49:42.916951-0700 xctest[99497:1247164] CouchbaseLite Replicator Info: {puller#19} activityLevel=busy: pendingResponseCount=0, _caughtUp=0, _pendingRevMessages=0, _activeIncomingRevs=1, _waitingChangesMessages=0, _waitingRevMessages=0, _unfinishedIncomingRevs=1 2020-07-27 17:49:42.937959-0700 xctest[99497:1247164] CouchbaseLite Replicator Info: {inserter#22}==> litecore::repl::Inserter {repl#12} @0x615000064ab0 2020-07-27 17:49:42.938217-0700 xctest[99497:1247164] CouchbaseLite Replicator Verbose: {inserter#22} Inserting 1 revs: 2020-07-27 17:49:42.938743-0700 xctest[99497:1247164] CouchbaseLite Database Debug: {Shared#5} adding DataFile 0x612000071140 2020-07-27 17:49:42.938943-0700 xctest[99497:1247164] CouchbaseLite Database Info: {DB#23}==> litecore::SQLiteDataFile /var/folders/gk/xfc67g4s27v6jrn_5tjhg0y80000gp/T/CouchbaseLite_EE/otherdb.cblite2/db.sqlite3 @0x612000071140 2020-07-27 17:49:42.939144-0700 xctest[99497:1247164] CouchbaseLite Database Info: {DB#23} Opening database ... // syncs the `doc2` from local to remote db: (remote: seq 1) 2020-07-27 17:49:42.943203-0700 xctest[99497:1247164] CouchbaseLite Database Verbose: {DB#23} Saved 'doc2' rev #1-581ad726ee407c8376fc94aad966051d013893c4 as seq 1 2020-07-27 17:49:42.943416-0700 xctest[99497:1247164] CouchbaseLite Replicator Verbose: {inserter#22} {'doc2' #1-581ad726ee407c8376fc94aad966051d013893c4 <- } seq 1 2020-07-27 17:49:42.943605-0700 xctest[99497:1247164] CouchbaseLite Database Verbose: {DB#23} commit transaction // MAKE A CONFLICT (doc2) // save a new value in local db. (local: seq 2, lastSequence: #1) 2020-07-27 17:49:43.615085-0700 {DB#4} Saved 'doc2' rev #2-4d55da5a6671a685a75717f7307503ba87cfb87c as seq 2 // save a new value in remote db. (remote: seq 2, lastSequence: #0) 2020-07-27 17:49:43.618525-0700 {DB#6} Saved 'doc2' rev #2-f4f98fb3159f12e000071914ee6dbe8bb4cc074d as seq 2 // delete the local revision to check delete local wins; (local: seq 3, lastSequence: #2) 2020-07-27 17:49:43.620369-0700 {DB#4} Deleted 'doc2' rev #3-3abf53d0475b5e82cd380ab4ed320e57e547dc2f as seq 3 // Another usecase to validate remote delete wins; // creates and saves `doc3` in local db. (local: seq 4, lastSequence: #3) 2020-07-27 17:49:43.626824-0700 {DB#4} Saved 'doc3' rev #1-581ad726ee407c8376fc94aad966051d013893c4 as seq 4 // passive replicator -> repl#32 {repl#32}==> litecore::repl::Replicator /var/folders/gk/xfc67g4s27v6jrn_5tjhg0y80000gp/T/CouchbaseLite_EE/otherdb.cblite2/ <-file:////var/folders/gk/xfc67g4s27v6jrn_5tjhg0y80000gp/T/CouchbaseLite_EE/testdb.cblite2/ @0x6190001545b0 {repl#32} Push=passive, Pull=passive, Options={{noDeltas:1, noIncomingConflicts:1}} // receives the `doc3` from local db 2020-07-27 17:49:43.690966-0700 xctest[99497:1247164] CouchbaseLite Replicator Verbose: {incomingrev#41} Received revision 'doc3' #1-581ad726ee407c8376fc94aad966051d013893c4 (seq '4') 2020-07-27 17:49:43.691315-0700 xctest[99497:1247193] CouchbaseLite Replicator Info: {puller#39} activityLevel=busy: pendingResponseCount=0, _caughtUp=0, _pendingRevMessages=0, _activeIncomingRevs=1, _waitingChangesMessages=0, _waitingRevMessages=0, _unfinishedIncomingRevs=1 2020-07-27 17:49:43.713945-0700 xctest[99497:1247193] CouchbaseLite Replicator Info: {inserter#42}==> litecore::repl::Inserter {repl#32} @0x6150000672b0 2020-07-27 17:49:43.714157-0700 xctest[99497:1247193] CouchbaseLite Replicator Verbose: {inserter#42} Inserting 1 revs: 2020-07-27 17:49:43.714776-0700 xctest[99497:1247193] CouchbaseLite Database Debug: {Shared#5} adding DataFile 0x612000090f40 2020-07-27 17:49:43.715043-0700 xctest[99497:1247193] CouchbaseLite Database Info: {DB#43}==> litecore::SQLiteDataFile /var/folders/gk/xfc67g4s27v6jrn_5tjhg0y80000gp/T/CouchbaseLite_EE/otherdb.cblite2/db.sqlite3 @0x612000090f40 2020-07-27 17:49:43.715206-0700 xctest[99497:1247193] CouchbaseLite Database Info: {DB#43} Opening database ... // saves the `doc3` to remote db; (remote: seq 3, lastSequence: #0) 2020-07-27 17:49:43.737560-0700 xctest[99497:1247193] CouchbaseLite Database Verbose: {DB#43} Saved 'doc3' rev #1-581ad726ee407c8376fc94aad966051d013893c4 as seq 3 2020-07-27 17:49:43.737820-0700 xctest[99497:1247193] CouchbaseLite Replicator Verbose: {inserter#42} {'doc3' #1-581ad726ee407c8376fc94aad966051d013893c4 <- } seq 3 2020-07-27 17:49:43.738113-0700 xctest[99497:1247193] CouchbaseLite Database Verbose: {DB#43} commit transaction // MAKE A CONFLICT; (doc3) // saves a new revision in local; (local: seq 5, lastSequence: #4) 2020-07-27 17:49:44.408422-0700 {DB#4} Saved 'doc3' rev #2-4d55da5a6671a685a75717f7307503ba87cfb87c as seq 5 // saves a new revision in remote: (remote: seq 4, lastSequence: #3) 2020-07-27 17:49:44.409552-0700 {DB#6} Saved 'doc3' rev #2-f4f98fb3159f12e000071914ee6dbe8bb4cc074d as seq 4 // delete the remote; (remote: seq 5, lastSequence: #4) 2020-07-27 17:49:44.410475-0700 {DB#6} Deleted 'doc3' rev #3-c470c586256d55e8790fb5c1c322d67c90072dd9 as seq 5 //// (Final) Pull replicator => {Repl#50} {Repl#50}==> litecore::repl::Replicator /var/folders/gk/xfc67g4s27v6jrn_5tjhg0y80000gp/T/CouchbaseLite_EE/testdb.cblite2/ ->file:////var/folders/gk/xfc67g4s27v6jrn_5tjhg0y80000gp/T/CouchbaseLite_EE/otherdb.cblite2/ @0x6190001e78b0 {Repl#50} Pull=one-shot, Options={{headers:{User-Agent:"CouchbaseLite/2.8.0 (ObjC; macOS 10.15.6) Build/0 Commit/f9a77f53+CHANGES LiteCore/2.8.0-EE (+25a4d6eb)"}, noDeltas:1, onlySelfSignedServer:false, progress:0}} // receives `doc2` from remote pusher; 2020-07-27 17:49:44.511285-0700 xctest[99497:1247138] CouchbaseLite Replicator Info: {IncomingRev#61}==> litecore::repl::IncomingRev {Repl#50} @0x613000062070 2020-07-27 17:49:44.511431-0700 xctest[99497:1247138] CouchbaseLite Replicator Verbose: {IncomingRev#61} Received revision 'doc2' #2-f4f98fb3159f12e000071914ee6dbe8bb4cc074d (seq '2') 2020-07-27 17:49:44.511601-0700 xctest[99497:1247190] CouchbaseLite Replicator Info: {pusher#59} activityLevel=busy: pendingResponseCount=2, caughtUp=1, changeLists=0, revsInFlight=0, blobsInFlight=0, awaitingReply=334, revsToSend=0, pushingDocs=2, pendingSequences=0 2020-07-27 17:49:44.511766-0700 xctest[99497:1247192] CouchbaseLite Network Verbose: {BLIPIO#56} Received frame: REQ #4 ---C, length 38 2020-07-27 17:49:44.511977-0700 xctest[99497:1247192] CouchbaseLite Network Verbose: {Connection#49} Receiving 'rev' REQ #4 Z 2020-07-27 17:49:44.512107-0700 xctest[99497:1247138] CouchbaseLite Replicator Info: {Puller#58} activityLevel=busy: pendingResponseCount=0, _caughtUp=1, _pendingRevMessages=1, _activeIncomingRevs=1, _waitingChangesMessages=0, _waitingRevMessages=0, _unfinishedIncomingRevs=1 2020-07-27 17:49:44.512272-0700 xctest[99497:1247192] CouchbaseLite Network Verbose: {Connection#49} Finished receiving 'rev' REQ #4 Z 2020-07-27 17:49:44.512515-0700 xctest[99497:1247138] CouchbaseLite Replicator Info: {Puller#58} activityLevel=busy: pendingResponseCount=0, _caughtUp=1, _pendingRevMessages=0, _activeIncomingRevs=2, _waitingChangesMessages=0, _waitingRevMessages=0, _unfinishedIncomingRevs=2 2020-07-27 17:49:44.512660-0700 xctest[99497:1247190] CouchbaseLite Replicator Info: {IncomingRev#62}==> litecore::repl::IncomingRev {Repl#50} @0x6130000202f0 // receives `doc3` from remote via Puller; 2020-07-27 17:49:44.512805-0700 xctest[99497:1247190] CouchbaseLite Replicator Verbose: {IncomingRev#62} Received revision 'doc3' #3-c470c586256d55e8790fb5c1c322d67c90072dd9 (seq '5') 2020-07-27 17:49:44.513059-0700 xctest[99497:1247138] CouchbaseLite Replicator Info: {Puller#58} activityLevel=busy: pendingResponseCount=0, _caughtUp=1, _pendingRevMessages=0, _activeIncomingRevs=2, _waitingChangesMessages=0, _waitingRevMessages=0, _unfinishedIncomingRevs=2 2020-07-27 17:49:44.536786-0700 xctest[99497:1247138] CouchbaseLite Replicator Info: {Inserter#63}==> litecore::repl::Inserter {Repl#50} @0x615000068930 2020-07-27 17:49:44.537345-0700 xctest[99497:1247138] CouchbaseLite Replicator Verbose: {Inserter#63} Inserting 2 revs: 2020-07-27 17:49:44.537972-0700 xctest[99497:1247138] CouchbaseLite Database Debug: {Shared#3} adding DataFile 0x6120000307c0 2020-07-27 17:49:44.538190-0700 xctest[99497:1247138] CouchbaseLite Database Info: {DB#64}==> litecore::SQLiteDataFile /var/folders/gk/xfc67g4s27v6jrn_5tjhg0y80000gp/T/CouchbaseLite_EE/testdb.cblite2/db.sqlite3 @0x6120000307c0 2020-07-27 17:49:44.538335-0700 xctest[99497:1247138] CouchbaseLite Database Info: {DB#64} Opening database ... // saves `doc2` new revision and mark it as conflict (local: seq 6) ::: NOT ADDED TO SEQUENCE TRACKER 2020-07-27 17:49:44.543738-0700 xctest[99497:1247138] CouchbaseLite Database Verbose: {DB#64} Saved 'doc2' rev #2-f4f98fb3159f12e000071914ee6dbe8bb4cc074d as seq 6 2020-07-27 17:49:44.559693-0700 xctest[99497:1247138] CouchbaseLite Replicator Verbose: {Inserter#63} {'doc2' #2-f4f98fb3159f12e000071914ee6dbe8bb4cc074d <- 1-581ad726ee407c8376fc94aad966051d013893c4} seq 6 2020-07-27 17:49:44.559850-0700 xctest[99497:1247138] CouchbaseLite Replicator Info: {Inserter#63} Created conflict with 'doc2' #2-f4f98fb3159f12e000071914ee6dbe8bb4cc074d 2020-07-27 17:49:44.560074-0700 xctest[99497:1247190] CouchbaseLite Replicator Info: {Puller#58} activityLevel=busy: pendingResponseCount=0, _caughtUp=1, _pendingRevMessages=0, _activeIncomingRevs=1, _waitingChangesMessages=0, _waitingRevMessages=0, _unfinishedIncomingRevs=2 // saves `doc3` new revision and mark it as conflict (local: seq 7) ::: NOT ADDED TO SEQUENCE TRACKER 2020-07-27 17:49:44.560910-0700 xctest[99497:1247138] CouchbaseLite Database Verbose: {DB#64} Deleted 'doc3' rev #3-c470c586256d55e8790fb5c1c322d67c90072dd9 as seq 7 2020-07-27 17:49:44.561157-0700 xctest[99497:1247138] CouchbaseLite Replicator Verbose: {Inserter#63} {'doc3' #3-c470c586256d55e8790fb5c1c322d67c90072dd9 <- 2-f4f98fb3159f12e000071914ee6dbe8bb4cc074d,1-581ad726ee407c8376fc94aad966051d013893c4} seq 7 2020-07-27 17:49:44.561306-0700 xctest[99497:1247138] CouchbaseLite Replicator Info: {Inserter#63} Created conflict with 'doc3' #3-c470c586256d55e8790fb5c1c322d67c90072dd9 2020-07-27 17:49:44.561569-0700 xctest[99497:1247190] CouchbaseLite Replicator Info: {Puller#58} activityLevel=busy: pendingResponseCount=0, _caughtUp=1, _pendingRevMessages=0, _activeIncomingRevs=0, _waitingChangesMessages=0, _waitingRevMessages=0, _unfinishedIncomingRevs=2 // saves local checkpoint 2020-07-27 17:49:44.600806-0700 xctest[99497:1247141] CouchbaseLite Replicator Info: {Repl#50} Saved local checkpoint 'cp-vaikZ8Hgo2hy443nOQjYKlHGxh4=': {"time":1595897384,"local":4,"remote":5} 2020-07-27 17:49:44.688408-0700 xctest[99497:1247192] CouchbaseLite Replicator Info: Resolving doc 'doc2' (localDoc=3-3abf53d0475b5e82cd380ab4ed320e57e547dc2f and remoteDoc=2-f4f98fb3159f12e000071914ee6dbe8bb4cc074d) 2020-07-27 17:49:44.688854-0700 xctest[99497:1247191] CouchbaseLite Replicator Info: Resolving doc 'doc3' (localDoc=2-4d55da5a6671a685a75717f7307503ba87cfb87c and remoteDoc=3-c470c586256d55e8790fb5c1c322d67c90072dd9) // begin transaction at #5 (local: seq 8, lastSequence: #5) 2020-07-27 17:49:44.688950-0700 xctest[99497:1247192] CouchbaseLite Database Verbose: {DB#4} begin transaction 2020-07-27 17:49:44.689611-0700 xctest[99497:1247192] CouchbaseLite Database Info: Resolved conflict, adding rev 'doc2' #3-c470c586256d55e8790fb5c1c322d67c90072dd9 2020-07-27 17:49:44.690526-0700 xctest[99497:1247192] CouchbaseLite Replicator Info: Conflict resolved as doc 'doc2' rev 3-c470c586256d55e8790fb5c1c322d67c90072dd9 // commit: sequences #5 -- #8 2020-07-27 17:49:44.690761-0700 xctest[99497:1247192] CouchbaseLite Database Verbose: {DB#4} commit transaction // begin transaction at #8(local: seq 7, lastSequence: #8) 2020-07-27 17:49:44.691338-0700 xctest[99497:1247191] CouchbaseLite Database Verbose: {DB#4} begin transaction 2020-07-27 17:49:44.698618-0700 xctest[99497:1247191] CouchbaseLite Database ERROR: Assertion failed: docID && revID && sequence > _lastSequence (/Users/jayaharivavachan/Documents/cbl/couchbase-lite-ios-ee/couchbase-lite-ios/vendor/couchbase-lite-core/LiteCore/Database/SequenceTracker.cc:112, in documentChanged) 0 CouchbaseLite litecore::SequenceTracker::documentChanged(fleece::alloc_slice const&, fleece::alloc_slice const&, unsigned long long, unsigned long long) + 309 1 CouchbaseLite c4Internal::Database::documentSaved(c4Internal::Document*)::$_4::operator()(litecore::SequenceTracker&) const + 758 2 CouchbaseLite void litecore::access_lock::use(c4Internal::Database::documentSaved(c4Internal::Document*)::$_4) + 356 3 CouchbaseLite c4Internal::Database::documentSaved(c4Internal::Document*) + 580 4 CouchbaseLite c4Internal::TreeDocument::resolveConflict(FLSlice, FLSlice, FLSlice, unsigned char, bool) + 5740 5 CouchbaseLite c4doc_resolveConflict::$_11::operator()() const + 1034 6 CouchbaseLite bool fleece::function_ref::callback_fn(long) + 41 7 CouchbaseLite fleece::function_ref::operator()() const + 155 8 CouchbaseLite bool c4Internal::tryCatch(C4Error*, fleece::function_ref) + 369 9 CouchbaseLite c4doc_resolveConflict + 1349 10 CouchbaseLite 0x000000010a6665c1 -[CBLDatabase saveResolvedDocument:withLocalDoc:remoteDoc:error:] + 6993 11 CouchbaseLite 0x000000010a663e61 -[CBLDatabase resolveConflictInDocument:withConflictResolver:error:] + 8465 12 CouchbaseLite 0x000000010a7334a1 -[CBLReplicator _resolveConflict:] + 1761 13 CouchbaseLite 0x000000010a732614 __33-[CBLReplicator resolveConflict:]_block_invoke + 244 14 libclang_rt.asan_osx_dynamic.dylib __wrap_dispatch_async_block 2020-07-27 17:49:44.700167-0700 xctest[99497:1247191] CouchbaseLite Database Verbose: {DB#4} abort transaction 2020-07-27 17:49:44.700565-0700 xctest[99497:1247191] CouchbaseLite Replicator WARNING: CBLReplicator[<- DB[otherdb]]: Conflict resolution of 'doc3' failed: Error Domain=CouchbaseLite Code=1 "assertion failed" UserInfo={NSLocalizedDescription=assertion failed} // Since remote win, winning revision and sequence are same. which means, no need to call `SequenceTracker::_documentChanged`, since the existing revision is already in db. Only mark the revision as resolved may be?