diff options
Diffstat (limited to 'src/mongo/s/d_writeback.cpp')
| -rw-r--r-- | src/mongo/s/d_writeback.cpp | 27 |
1 files changed, 12 insertions, 15 deletions
diff --git a/src/mongo/s/d_writeback.cpp b/src/mongo/s/d_writeback.cpp index 0278e40f712..441de1a0d65 100644 --- a/src/mongo/s/d_writeback.cpp +++ b/src/mongo/s/d_writeback.cpp @@ -42,21 +42,18 @@ namespace mongo { WriteBackManager::~WriteBackManager() { } - void WriteBackManager::queueWriteBack( const string& remote , const BSONObj& o ) { - static mongo::mutex xxx( "WriteBackManager::queueWriteBack tmp" ); - static OID lastOID; - - scoped_lock lk( xxx ); - const BSONElement& e = o["id"]; - - if ( lastOID.isSet() ) { - if ( e.OID() < lastOID ) { - log() << "this could fail" << endl; - printStackTrace(); - } - } - lastOID = e.OID(); - getWritebackQueue( remote )->queue.push( o ); + OID WriteBackManager::queueWriteBack( const string& remote , BSONObjBuilder& b ) { + static mongo::mutex writebackIDOrdering( "WriteBackManager::queueWriteBack id ordering" ); + + scoped_lock lk( writebackIDOrdering ); + + OID writebackID; + writebackID.initSequential(); + b.append( "id", writebackID ); + + getWritebackQueue( remote )->queue.push( b.obj() ); + + return writebackID; } shared_ptr<WriteBackManager::QueueInfo> WriteBackManager::getWritebackQueue( const string& remote ) { |
