summaryrefslogtreecommitdiff
path: root/db/lasterror.h
diff options
context:
space:
mode:
Diffstat (limited to 'db/lasterror.h')
-rw-r--r--db/lasterror.h40
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);