[MongoDB] Fix initial snapshot / Better error recovery #128
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Builds on #121.
1. Initial snapshot
Previously, we used
{snapshot: true}
to replicate an initial snapshot. That gives nice consistency guarantees, but cannot run longer than 5 minutes (configurable using minSnapshotHistoryWindowInSeconds). So this caused replication of larger amounts of data to fail.This fixes it to not use the snapshot mode anymore, but rather just make sure we replicate all incremental changes since the start of the snapshot. This means data modified during the snapshot may be replicated twice, but that should not cause any consistency issues.
2. Error recovery
Replication errors are only cleared once we successfully replicate some data (when
.commit(lsn)
is called). Development instances are often mostly idle, which meant that if some transient error ever occurred, it could take a long time before the error is cleared from the dashboard.This fixes it to create an internal checkpoint whenever we start replication, which will trigger at least one
commit()
(as long as replication is working), clearing the error.