diff options
Diffstat (limited to 'db/lasterror.h')
-rw-r--r-- | db/lasterror.h | 40 |
1 files changed, 24 insertions, 16 deletions
diff --git a/db/lasterror.h b/db/lasterror.h index 2006f1c..c77ec74 100644 --- a/db/lasterror.h +++ b/db/lasterror.h @@ -33,7 +33,7 @@ namespace mongo { int nPrev; bool valid; bool disabled; - void writeback( OID& oid ){ + void writeback( OID& oid ) { reset( true ); writebackId = oid; } @@ -42,13 +42,13 @@ namespace mongo { code = _code; msg = _msg; } - void recordUpdate( bool _updateObjects , long long _nObjects , OID _upsertedId ){ + void recordUpdate( bool _updateObjects , long long _nObjects , OID _upsertedId ) { reset( true ); nObjects = _nObjects; updatedExisting = _updateObjects ? True : False; if ( _upsertedId.isSet() ) upsertedId = _upsertedId; - + } void recordDelete( long long nDeleted ) { reset( true ); @@ -68,20 +68,25 @@ namespace mongo { upsertedId.clear(); writebackId.clear(); } - void appendSelf( BSONObjBuilder &b ); + + /** + * @return if there is an err + */ + bool appendSelf( BSONObjBuilder &b , bool blankErr = true ); struct Disabled : boost::noncopyable { - Disabled( LastError * le ){ + Disabled( LastError * le ) { _le = le; - if ( _le ){ + if ( _le ) { _prev = _le->disabled; _le->disabled = true; - } else { + } + else { _prev = false; } } - - ~Disabled(){ + + ~Disabled() { if ( _le ) _le->disabled = _prev; } @@ -89,18 +94,19 @@ namespace mongo { LastError * _le; bool _prev; }; - + static LastError noError; }; extern class LastErrorHolder { public: LastErrorHolder() : _id( 0 ) {} + ~LastErrorHolder(); LastError * get( bool create = false ); - LastError * getSafe(){ + LastError * getSafe() { LastError * le = get(false); - if ( ! le ){ + if ( ! le ) { log( LL_ERROR ) << " no LastError! id: " << getID() << endl; assert( le ); } @@ -122,11 +128,11 @@ namespace mongo { void remove( int id ); void release(); - + /** when db receives a message/request, call this */ void startRequest( Message& m , LastError * connectionOwned ); LastError * startRequest( Message& m , int clientId ); - + void disconnect( int clientId ); // used to disable lastError reporting while processing a killCursors message @@ -135,13 +141,15 @@ namespace mongo { private: ThreadLocalValue<int> _id; boost::thread_specific_ptr<LastError> _tl; - + struct Status { time_t time; LastError *lerr; }; + typedef map<int,Status> IDMap; + static mongo::mutex _idsmutex; - map<int,Status> _ids; + IDMap _ids; } lastError; void raiseError(int code , const char *msg); |