diff options
author | Aaron <aaron@10gen.com> | 2010-05-12 15:26:00 -0700 |
---|---|---|
committer | Aaron <aaron@10gen.com> | 2010-05-12 15:26:00 -0700 |
commit | 7efe88f445b528969e24c5efa9905244c3a0db6a (patch) | |
tree | 17361c2015dde73ad04b3ecaa4301a0f48826b66 /db | |
parent | 37f2f983a40a9ba6915648ef1e8b55269c24084e (diff) | |
download | mongo-7efe88f445b528969e24c5efa9905244c3a0db6a.tar.gz |
SERVER-109 multi buffer message
Diffstat (limited to 'db')
-rw-r--r-- | db/db.cpp | 4 | ||||
-rw-r--r-- | db/dbmessage.h | 11 | ||||
-rw-r--r-- | db/instance.cpp | 31 | ||||
-rw-r--r-- | db/lasterror.cpp | 4 |
4 files changed, 26 insertions, 24 deletions
diff --git a/db/db.cpp b/db/db.cpp index a189f1b15d3..85c53c09e98 100644 --- a/db/db.cpp +++ b/db/db.cpp @@ -265,7 +265,7 @@ namespace mongo { Message response; send.setData( dbMsg , m); - int len = send.data->dataLen(); + int len = send.header()->dataLen(); for ( int i = 0; i < extras; i++ ) p.say(/*db, */send); @@ -274,7 +274,7 @@ namespace mongo { bool ok = p.call(send, response); double tm = ((double) t.micros()) + 1; out() << " ****ok. response.data:" << ok << " time:" << tm / 1000.0 << "ms " - << "len: " << len << " data: " << response.data->_data << endl; + << "len: " << len << " data: " << response.singleData()->_data << endl; if ( q+1 < Loops ) { out() << "\t\tSLEEP 8 then sending again as a test" << endl; diff --git a/db/dbmessage.h b/db/dbmessage.h index 69aa5f777c8..406b418db72 100644 --- a/db/dbmessage.h +++ b/db/dbmessage.h @@ -80,8 +80,9 @@ namespace mongo { class DbMessage { public: DbMessage(const Message& _m) : m(_m) { - theEnd = _m.data->_data + _m.data->dataLen(); - int *r = (int *) _m.data->_data; + // for received messages, Message has only one buffer + theEnd = _m.singleData()->_data + _m.header()->dataLen(); + int *r = (int *) _m.singleData()->_data; reserved = *r; r++; data = (const char *) r; @@ -205,7 +206,7 @@ namespace mongo { if ( d.moreJSObjs() ) { fields = d.nextJsObj(); } - queryOptions = d.msg().data->dataAsInt(); + queryOptions = d.msg().header()->dataAsInt(); } }; @@ -233,7 +234,7 @@ namespace mongo { qr->nReturned = nReturned; b.decouple(); Message resp(qr, true); - p->reply(requestMsg, resp, requestMsg.data->id); + p->reply(requestMsg, resp, requestMsg.header()->id); } } // namespace mongo @@ -270,7 +271,7 @@ namespace mongo { Message *resp = new Message(); resp->setData(msgdata, true); // transport will free dbresponse.response = resp; - dbresponse.responseTo = m.data->id; + dbresponse.responseTo = m.header()->id; } } // namespace mongo diff --git a/db/instance.cpp b/db/instance.cpp index 35ec94d90eb..c3c7cac34af 100644 --- a/db/instance.cpp +++ b/db/instance.cpp @@ -41,8 +41,8 @@ namespace mongo { - inline void opread(Message& m) { if( _diaglog.level & 2 ) _diaglog.readop((char *) m.data, m.data->len); } - inline void opwrite(Message& m) { if( _diaglog.level & 1 ) _diaglog.write((char *) m.data, m.data->len); } + inline void opread(Message& m) { if( _diaglog.level & 2 ) _diaglog.readop((char *) m.singleData(), m.header()->len); } + inline void opwrite(Message& m) { if( _diaglog.level & 1 ) _diaglog.write((char *) m.singleData(), m.header()->len); } void receivedKillCursors(Message& m); void receivedUpdate(Message& m, CurOp& op); @@ -161,7 +161,7 @@ namespace mongo { static bool receivedQuery(Client& c, DbResponse& dbresponse, Message& m ){ bool ok = true; - MSGID responseTo = m.data->id; + MSGID responseTo = m.header()->id; DbMessage d(m); QueryMessage q(d); @@ -210,7 +210,7 @@ namespace mongo { dbresponse.responseTo = responseTo; if ( op.shouldDBProfile( 0 ) ){ - op.debug().str << " bytes:" << resp->data->dataLen(); + op.debug().str << " bytes:" << resp->header()->dataLen(); } return ok; @@ -220,9 +220,9 @@ namespace mongo { bool assembleResponse( Message &m, DbResponse &dbresponse, const SockAddr &client ) { // before we lock... - int op = m.data->operation(); + int op = m.operation(); bool isCommand = false; - const char *ns = m.data->_data + 4; + const char *ns = m.singleData()->_data + 4; if ( op == dbQuery ) { if( strstr(ns, ".$cmd") ) { isCommand = true; @@ -292,7 +292,7 @@ namespace mongo { } else if ( op == dbMsg ) { // deprecated - replaced by commands - char *p = m.data->_data; + char *p = m.singleData()->_data; int len = strlen(p); if ( len > 400 ) out() << curTimeMillis() % 10000 << @@ -306,10 +306,10 @@ namespace mongo { resp->setData( opReply , "i am fine - dbMsg deprecated"); dbresponse.response = resp; - dbresponse.responseTo = m.data->id; + dbresponse.responseTo = m.header()->id; } else { - const char *ns = m.data->_data + 4; + const char *ns = m.singleData()->_data + 4; char cl[256]; nsToDatabase(ns, cl); if( ! c.getAuthenticationInfo()->isAuthorized(cl) ) { @@ -382,7 +382,7 @@ namespace mongo { void killCursors(int n, long long *ids); void receivedKillCursors(Message& m) { - int *x = (int *) m.data->_data; + int *x = (int *) m.singleData()->_data; x++; // reserved int n = *x++; uassert( 13004 , "sent 0 cursors to kill" , n >= 1 ); @@ -433,11 +433,11 @@ namespace mongo { BSONObj query = d.nextJsObj(); assert( d.moreJSObjs() ); - assert( query.objsize() < m.data->dataLen() ); + assert( query.objsize() < m.header()->dataLen() ); BSONObj toupdate = d.nextJsObj(); uassert( 10055 , "update object too large", toupdate.objsize() <= MaxBSONObjectSize); - assert( toupdate.objsize() < m.data->dataLen() ); - assert( query.objsize() + toupdate.objsize() < m.data->dataLen() ); + assert( toupdate.objsize() < m.header()->dataLen() ); + assert( query.objsize() + toupdate.objsize() < m.header()->dataLen() ); bool upsert = flags & UpdateOption_Upsert; bool multi = flags & UpdateOption_Multi; { @@ -518,10 +518,10 @@ namespace mongo { Message *resp = new Message(); resp->setData(msgdata, true); - ss << " bytes:" << resp->data->dataLen(); + ss << " bytes:" << resp->header()->dataLen(); ss << " nreturned:" << msgdata->nReturned; dbresponse.response = resp; - dbresponse.responseTo = m.data->id; + dbresponse.responseTo = m.header()->id; return ok; } @@ -583,6 +583,7 @@ namespace mongo { DbResponse dbResponse; assembleResponse( toSend, dbResponse ); assert( dbResponse.response ); + dbResponse.response->concat(); // can get rid of this if we make response handling smarter response = *dbResponse.response; return true; } diff --git a/db/lasterror.cpp b/db/lasterror.cpp index fbc7ce8b493..92d709a85ff 100644 --- a/db/lasterror.cpp +++ b/db/lasterror.cpp @@ -135,7 +135,7 @@ namespace mongo { void prepareErrForNewRequest( Message &m, LastError * err ) { // a killCursors message shouldn't affect last error - if ( m.data->operation() == dbKillCursors ) { + if ( m.operation() == dbKillCursors ) { err->disabled = true; } else { err->disabled = false; @@ -146,7 +146,7 @@ namespace mongo { LastError * LastErrorHolder::startRequest( Message& m , int clientId ) { if ( clientId == 0 ) - clientId = m.data->id & 0xFFFF0000; + clientId = m.header()->id & 0xFFFF0000; setID( clientId ); LastError * le = _get( true ); |