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
mongoservers that we sync with a central server usingmongo-connectorwith 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-connectoris running.When the first entry is made into the local DB, there is an oplog entry to
createthe collection. Whenmongo-connectortries to replay that command on the target DB,pymongothrows an exception because the collection already exists on the central server.Note: this problem does not present itself if
mongo-connectoris 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
createentry in the oplog.This does not cause any problems because
mongocreates 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_managerdoes not specify any options in thecreate_collection()call, that call should not be made.