summaryrefslogtreecommitdiff
path: root/src/mongo/s/d_writeback.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/s/d_writeback.cpp')
-rw-r--r--src/mongo/s/d_writeback.cpp27
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 ) {