diff options
Diffstat (limited to 'src/mongo/db/lasterror.cpp')
-rw-r--r-- | src/mongo/db/lasterror.cpp | 231 |
1 files changed, 113 insertions, 118 deletions
diff --git a/src/mongo/db/lasterror.cpp b/src/mongo/db/lasterror.cpp index b8f00f3dcb8..513f047fc12 100644 --- a/src/mongo/db/lasterror.cpp +++ b/src/mongo/db/lasterror.cpp @@ -40,138 +40,133 @@ namespace mongo { - using std::endl; - - LastError LastError::noError; - LastErrorHolder lastError; - - bool isShell = false; - void setLastError(int code , const char *msg) { - LastError *le = lastError.get(); - if ( le == 0 ) { - /* might be intentional (non-user thread) */ - DEV { - static unsigned n; - if( ++n < 4 && !isShell ) log() << "dev: lastError==0 won't report:" << msg << endl; - } - } - else if ( le->disabled ) { - log() << "lastError disabled, can't report: " << code << ":" << msg << endl; - } - else { - le->raiseError(code, msg); +using std::endl; + +LastError LastError::noError; +LastErrorHolder lastError; + +bool isShell = false; +void setLastError(int code, const char* msg) { + LastError* le = lastError.get(); + if (le == 0) { + /* might be intentional (non-user thread) */ + DEV { + static unsigned n; + if (++n < 4 && !isShell) + log() << "dev: lastError==0 won't report:" << msg << endl; } + } else if (le->disabled) { + log() << "lastError disabled, can't report: " << code << ":" << msg << endl; + } else { + le->raiseError(code, msg); } +} - void LastError::appendSelfStatus( BSONObjBuilder &b ) { - if ( writebackId.isSet() ) { - b.append( "writeback" , writebackId ); - b.append( "writebackSince", writebackSince ); - b.append( "instanceIdent" , prettyHostName() ); // this can be any unique string - } +void LastError::appendSelfStatus(BSONObjBuilder& b) { + if (writebackId.isSet()) { + b.append("writeback", writebackId); + b.append("writebackSince", writebackSince); + b.append("instanceIdent", prettyHostName()); // this can be any unique string } +} - bool LastError::appendSelf( BSONObjBuilder &b , bool blankErr ) { - - appendSelfStatus( b ); - - if ( !valid ) { - if ( blankErr ) - b.appendNull( "err" ); - b.append( "n", 0 ); - return false; - } - - if ( msg.empty() ) { - if ( blankErr ) { - b.appendNull( "err" ); - } - } - else { - b.append( "err", msg ); - } - - if ( code ) - b.append( "code" , code ); - if ( updatedExisting != NotUpdate ) - b.appendBool( "updatedExisting", updatedExisting == True ); - if ( !upsertedId.isEmpty() ) { - b.append( upsertedId[kUpsertedFieldName] ); - } - b.appendNumber( "n", nObjects ); +bool LastError::appendSelf(BSONObjBuilder& b, bool blankErr) { + appendSelfStatus(b); - return ! msg.empty(); + if (!valid) { + if (blankErr) + b.appendNull("err"); + b.append("n", 0); + return false; } - LastErrorHolder::~LastErrorHolder() { - } - - - LastError * LastErrorHolder::disableForCommand() { - LastError *le = _get(); - uassert(13649, "no operation yet", le); - le->disabled = true; - le->nPrev--; // caller is a command that shouldn't count as an operation - le->writebackSince--; // same as above - return le; - } - - LastError * LastErrorHolder::get( bool create ) { - LastError *ret = _get( create ); - if ( ret && !ret->disabled ) - return ret; - return 0; - } - - LastError * LastErrorHolder::getSafe() { - LastError * le = get(false); - if ( ! le ) { - error() << " no LastError!" << std::endl; - verify( le ); + if (msg.empty()) { + if (blankErr) { + b.appendNull("err"); } - return le; + } else { + b.append("err", msg); } - LastError * LastErrorHolder::_get( bool create ) { - LastError * le = _tl.get(); - if ( ! le && create ) { - le = new LastError(); - _tl.reset( le ); - } - return le; + if (code) + b.append("code", code); + if (updatedExisting != NotUpdate) + b.appendBool("updatedExisting", updatedExisting == True); + if (!upsertedId.isEmpty()) { + b.append(upsertedId[kUpsertedFieldName]); } - - void LastErrorHolder::release() { - _tl.release(); + b.appendNumber("n", nObjects); + + return !msg.empty(); +} + +LastErrorHolder::~LastErrorHolder() {} + + +LastError* LastErrorHolder::disableForCommand() { + LastError* le = _get(); + uassert(13649, "no operation yet", le); + le->disabled = true; + le->nPrev--; // caller is a command that shouldn't count as an operation + le->writebackSince--; // same as above + return le; +} + +LastError* LastErrorHolder::get(bool create) { + LastError* ret = _get(create); + if (ret && !ret->disabled) + return ret; + return 0; +} + +LastError* LastErrorHolder::getSafe() { + LastError* le = get(false); + if (!le) { + error() << " no LastError!" << std::endl; + verify(le); } - - /** ok to call more than once. */ - void LastErrorHolder::initThread() { - if( ! _tl.get() ) - _tl.reset( new LastError() ); + return le; +} + +LastError* LastErrorHolder::_get(bool create) { + LastError* le = _tl.get(); + if (!le && create) { + le = new LastError(); + _tl.reset(le); } - - void LastErrorHolder::reset( LastError * le ) { - _tl.reset( le ); - } - - void prepareErrForNewRequest( Message &m, LastError * err ) { - // a killCursors message shouldn't affect last error - verify( err ); - if ( m.operation() == dbKillCursors ) { - err->disabled = true; - } - else { - err->disabled = false; - err->nPrev++; - err->writebackSince++; - } + return le; +} + +void LastErrorHolder::release() { + _tl.release(); +} + +/** ok to call more than once. */ +void LastErrorHolder::initThread() { + if (!_tl.get()) + _tl.reset(new LastError()); +} + +void LastErrorHolder::reset(LastError* le) { + _tl.reset(le); +} + +void prepareErrForNewRequest(Message& m, LastError* err) { + // a killCursors message shouldn't affect last error + verify(err); + if (m.operation() == dbKillCursors) { + err->disabled = true; + } else { + err->disabled = false; + err->nPrev++; + err->writebackSince++; } +} - LastError * LastErrorHolder::startRequest( Message& m , LastError * le ) { - verify( le ); - prepareErrForNewRequest( m, le ); - return le; - } +LastError* LastErrorHolder::startRequest(Message& m, LastError* le) { + verify(le); + prepareErrForNewRequest(m, le); + return le; +} -} // namespace mongo +} // namespace mongo |