diff options
author | Antonin Kral <a.kral@bobek.cz> | 2011-03-17 00:05:43 +0100 |
---|---|---|
committer | Antonin Kral <a.kral@bobek.cz> | 2011-03-17 00:05:43 +0100 |
commit | 582fc32574a3b158c81e49cb00e6ae59205e66ba (patch) | |
tree | ac64a3243e0d2121709f685695247052858115c8 /s/d_logic.cpp | |
parent | 2761bffa96595ac1698d86bbc2e95ebb0d4d6e93 (diff) | |
download | mongodb-582fc32574a3b158c81e49cb00e6ae59205e66ba.tar.gz |
Imported Upstream version 1.8.0
Diffstat (limited to 's/d_logic.cpp')
-rw-r--r-- | s/d_logic.cpp | 37 |
1 files changed, 19 insertions, 18 deletions
diff --git a/s/d_logic.cpp b/s/d_logic.cpp index 62288ed..c032883 100644 --- a/s/d_logic.cpp +++ b/s/d_logic.cpp @@ -1,4 +1,4 @@ -// d_logic.cpp +// @file d_logic.cpp /** * Copyright (C) 2008 10gen Inc. @@ -37,32 +37,32 @@ #include "shard.h" #include "d_logic.h" +#include "d_writeback.h" using namespace std; namespace mongo { - bool handlePossibleShardedMessage( Message &m, DbResponse* dbresponse ){ - if ( ! shardingState.enabled() ) - return false; + bool _handlePossibleShardedMessage( Message &m, DbResponse* dbresponse ) { + DEV assert( shardingState.enabled() ); int op = m.operation(); - if ( op < 2000 - || op >= 3000 - || op == dbGetMore // cursors are weird - ) + if ( op < 2000 + || op >= 3000 + || op == dbGetMore // cursors are weird + ) return false; - - DbMessage d(m); + + DbMessage d(m); const char *ns = d.getns(); string errmsg; - if ( shardVersionOk( ns , opIsWrite( op ) , errmsg ) ){ + if ( shardVersionOk( ns , opIsWrite( op ) , errmsg ) ) { return false; } log(1) << "connection meta data too old - will retry ns:(" << ns << ") op:(" << opToString(op) << ") " << errmsg << endl; - - if ( doesOpGetAResponse( op ) ){ + + if ( doesOpGetAResponse( op ) ) { assert( dbresponse ); BufBuilder b( 32768 ); b.skip( sizeof( QueryResult ) ); @@ -70,7 +70,7 @@ namespace mongo { BSONObj obj = BSON( "$err" << errmsg ); b.appendBuf( obj.objdata() , obj.objsize() ); } - + QueryResult *qr = (QueryResult*)b.buf(); qr->_resultFlags() = ResultFlag_ErrSet | ResultFlag_ShardConfigStale; qr->len = b.len(); @@ -82,19 +82,19 @@ namespace mongo { Message * resp = new Message(); resp->setData( qr , true ); - + dbresponse->response = resp; dbresponse->responseTo = m.header()->id; return true; } - + OID writebackID; writebackID.init(); lastError.getSafe()->writeback( writebackID ); const OID& clientID = ShardedConnectionInfo::get(false)->getID(); massert( 10422 , "write with bad shard config and no server id!" , clientID.isSet() ); - + log(1) << "got write with an old config - writing back ns: " << ns << endl; if ( logLevel ) log(1) << debugString( m ) << endl; @@ -102,11 +102,12 @@ namespace mongo { b.appendBool( "writeBack" , true ); b.append( "ns" , ns ); b.append( "id" , writebackID ); + b.append( "connectionId" , cc().getConnectionId() ); b.appendTimestamp( "version" , shardingState.getVersion( ns ) ); b.appendTimestamp( "yourVersion" , ShardedConnectionInfo::get( true )->getVersion( ns ) ); b.appendBinData( "msg" , m.header()->len , bdtCustom , (char*)(m.singleData()) ); log(2) << "writing back msg with len: " << m.header()->len << " op: " << m.operation() << endl; - queueWriteBack( clientID.str() , b.obj() ); + writeBackManager.queueWriteBack( clientID.str() , b.obj() ); return true; } |