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