Create a remote checkpoint during replication too
Before this change, in the case of a one-way replication, the remote checkpoint was never updated, thus the "diff" step had to check all changes made through the whole history. This commit fixes the problem by creating a new remote checkpoint at the same time when a local checkpoint is created. It is important to create the new checkpoint before the replication is started to prevent a race condition where a remote change can end up being associated with an already replicated checkpoint.
This commit is contained in:
parent
2dc230b7cf
commit
53ebddfa9f
|
@ -855,7 +855,7 @@ PersistedModel.replicate = function(since, targetModel, options, callback) {
|
||||||
};
|
};
|
||||||
|
|
||||||
var tasks = [
|
var tasks = [
|
||||||
checkpoint,
|
checkpoints,
|
||||||
getSourceChanges,
|
getSourceChanges,
|
||||||
getDiffFromTarget,
|
getDiffFromTarget,
|
||||||
createSourceUpdates,
|
createSourceUpdates,
|
||||||
|
@ -887,9 +887,13 @@ PersistedModel.replicate = function(since, targetModel, options, callback) {
|
||||||
targetModel.bulkUpdate(updates, cb);
|
targetModel.bulkUpdate(updates, cb);
|
||||||
}
|
}
|
||||||
|
|
||||||
function checkpoint() {
|
function checkpoints() {
|
||||||
var cb = arguments[arguments.length - 1];
|
var cb = arguments[arguments.length - 1];
|
||||||
sourceModel.checkpoint(function(err) { cb(err); });
|
sourceModel.checkpoint(function(err) {
|
||||||
|
targetModel.checkpoint(function(err) {
|
||||||
|
cb(err);
|
||||||
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function done(err) {
|
function done(err) {
|
||||||
|
|
Loading…
Reference in New Issue