summaryrefslogtreecommitdiff
path: root/db
diff options
context:
space:
mode:
authorAaron <aaron@10gen.com>2010-05-12 15:26:00 -0700
committerAaron <aaron@10gen.com>2010-05-12 15:26:00 -0700
commit7efe88f445b528969e24c5efa9905244c3a0db6a (patch)
tree17361c2015dde73ad04b3ecaa4301a0f48826b66 /db
parent37f2f983a40a9ba6915648ef1e8b55269c24084e (diff)
downloadmongo-7efe88f445b528969e24c5efa9905244c3a0db6a.tar.gz
SERVER-109 multi buffer message
Diffstat (limited to 'db')
-rw-r--r--db/db.cpp4
-rw-r--r--db/dbmessage.h11
-rw-r--r--db/instance.cpp31
-rw-r--r--db/lasterror.cpp4
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 );