Don't explicitly create a collection #932
Open
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.
Problem
We have various
mongo
servers that we sync with a central server usingmongo-connector
with themongo_doc_manager
.They all sync into the same collection on the central server.
When a new system is initialized, it has nothing in the DB and
mongo-connector
is running.When the first entry is made into the local DB, there is an oplog entry to
create
the collection. Whenmongo-connector
tries to replay that command on the target DB,pymongo
throws an exception because the collection already exists on the central server.Note: this problem does not present itself if
mongo-connector
is started (without an existingoplog.timestamp
) after the first entry in the local collection has already been made.Solution
This problem is easily avoided by not trying to explicitly create the collection, effectively ignoring the
create
entry in the oplog.This does not cause any problems because
mongo
creates collections automatically whenever a document is inserted into a collection that does not yet exist. The only reason to explicitly create a collection is if special options are specified as per the documentation:Since
mongo_doc_manager
does not specify any options in thecreate_collection()
call, that call should not be made.