void Request::process( int attempt ) { init(); int op = _m.operation(); assert( op > dbMsg ); if ( op == dbKillCursors ) { cursorCache.gotKillCursors( _m ); return; } log(3) << "Request::process ns: " << getns() << " msg id:" << (int)(_m.header()->id) << " attempt: " << attempt << endl; Strategy * s = SINGLE; _counter = &opsNonSharded; _d.markSet(); if ( _chunkManager ) { s = SHARDED; _counter = &opsSharded; } bool iscmd = false; if ( op == dbQuery ) { iscmd = isCommand(); try { s->queryOp( *this ); } catch ( StaleConfigException& staleConfig ) { log() << staleConfig.what() << " attempt: " << attempt << endl; uassert( 10195 , "too many attempts to update config, failing" , attempt < 5 ); ShardConnection::checkMyConnectionVersions( getns() ); if (!staleConfig.justConnection() ) sleepsecs( attempt ); reset( ! staleConfig.justConnection() ); _d.markReset(); process( attempt + 1 ); return; } } else if ( op == dbGetMore ) { s->getMore( *this ); } else { char cl[256]; nsToDatabase(getns(), cl); uassert(15845, "unauthorized", _clientInfo->getAuthenticationInfo()->isAuthorized(cl)); s->writeOp( op, *this ); } globalOpCounters.gotOp( op , iscmd ); _counter->gotOp( op , iscmd ); }
void Request::process( int attempt ) { init(); int op = _m.operation(); verify( op > dbMsg ); int msgId = (int)(_m.header()->id); Timer t; LOG(3) << "Request::process begin ns: " << getns() << " msg id: " << msgId << " op: " << op << " attempt: " << attempt << endl; Strategy * s = SHARDED; _d.markSet(); bool iscmd = false; if ( op == dbKillCursors ) { cursorCache.gotKillCursors( _m ); } else if ( op == dbQuery ) { NamespaceString nss(getns()); iscmd = nss.isCommand() || nss.isSpecialCommand(); if (iscmd) { int n = _d.getQueryNToReturn(); uassert( 16978, str::stream() << "bad numberToReturn (" << n << ") for $cmd type ns - can only be 1 or -1", n == 1 || n == -1 ); SINGLE->queryOp(*this); } else { s->queryOp( *this ); } } else if ( op == dbGetMore ) { s->getMore( *this ); } else { s->writeOp( op, *this ); } LOG(3) << "Request::process end ns: " << getns() << " msg id: " << msgId << " op: " << op << " attempt: " << attempt << " " << t.millis() << "ms" << endl; globalOpCounters.gotOp( op , iscmd ); }
void Request::process( int attempt ) { init(); int op = _m.operation(); verify( op > dbMsg ); if ( op == dbKillCursors ) { cursorCache.gotKillCursors( _m ); return; } int msgId = (int)(_m.header()->id); Timer t; LOG(3) << "Request::process begin ns: " << getns() << " msg id: " << msgId << " op: " << op << " attempt: " << attempt << endl; Strategy * s = SHARDED; _counter = &opsNonSharded; _d.markSet(); bool iscmd = false; if ( op == dbQuery ) { iscmd = isCommand(); if (iscmd) { SINGLE->queryOp(*this); } else { s->queryOp( *this ); } } else if ( op == dbGetMore ) { s->getMore( *this ); } else { s->writeOp( op, *this ); } LOG(3) << "Request::process end ns: " << getns() << " msg id: " << msgId << " op: " << op << " attempt: " << attempt << " " << t.millis() << "ms" << endl; globalOpCounters.gotOp( op , iscmd ); _counter->gotOp( op , iscmd ); }
void Request::process( int attempt ) { init(); int op = _m.operation(); assert( op > dbMsg ); if ( op == dbKillCursors ) { cursorCache.gotKillCursors( _m ); return; } MONGO_LOG(3) << "Request::process ns: " << getns() << " msg id:" << (int)(_m.header()->id) << " attempt: " << attempt << endl; Strategy * s = SHARDED; _counter = &opsNonSharded; _d.markSet(); bool iscmd = false; if ( op == dbQuery ) { try { iscmd = isCommand(); s->queryOp( *this ); } catch ( RecvStaleConfigException& stale ) { _d.markReset(); log( attempt == 0 ) << "got RecvStaleConfigException at top level: " << stale.toString() << " attempt: " << attempt << endl; massert( 16062 , "too many attemps to handle RecvStaleConfigException at top level" , attempt <= 5 ); process( attempt + 1 ); return; } } else if ( op == dbGetMore ) { checkAuth( Auth::READ ); // this is important so someone can't steal a cursor s->getMore( *this ); } else { checkAuth( Auth::WRITE ); s->writeOp( op, *this ); } globalOpCounters.gotOp( op , iscmd ); _counter->gotOp( op , iscmd ); }