summaryrefslogtreecommitdiff
path: root/src/mongo/db/commands/server_status.cpp
diff options
context:
space:
mode:
authorAndy Schwerin <schwerin@10gen.com>2013-07-12 18:05:35 -0400
committerAndy Schwerin <schwerin@10gen.com>2013-07-12 18:08:19 -0400
commit6e3ccc5649d16fd9940bc8fd1b490556d5767bf8 (patch)
tree6485289521af46ae932edb12a54c39737bea03f4 /src/mongo/db/commands/server_status.cpp
parent15333b2a308fd26c28448810780b06407328a795 (diff)
downloadmongo-6e3ccc5649d16fd9940bc8fd1b490556d5767bf8.tar.gz
SERVER-10172 Refactor RamLog to make it thread-safe.
Also prevent accidental creation of duplicate ramlogs of the same name.
Diffstat (limited to 'src/mongo/db/commands/server_status.cpp')
-rw-r--r--src/mongo/db/commands/server_status.cpp18
1 files changed, 7 insertions, 11 deletions
diff --git a/src/mongo/db/commands/server_status.cpp b/src/mongo/db/commands/server_status.cpp
index 689dac9aac2..2059ddeb551 100644
--- a/src/mongo/db/commands/server_status.cpp
+++ b/src/mongo/db/commands/server_status.cpp
@@ -141,20 +141,16 @@ namespace mongo {
// --- some hard coded global things hard to pull out
{
- RamLog* rl = RamLog::get( "warnings" );
- massert(15880, "no ram log for warnings?" , rl);
-
- if (rl->lastWrite() >= time(0)-(10*60)){ // only show warnings from last 10 minutes
- vector<const char*> lines;
- rl->get( lines );
-
- BSONArrayBuilder arr( result.subarrayStart( "warnings" ) );
- for ( unsigned i=std::max(0,(int)lines.size()-10); i<lines.size(); i++ )
- arr.append( lines[i] );
+ RamLog::LineIterator rl(RamLog::get("warnings"));
+ if (rl.lastWrite() >= time(0)-(10*60)){ // only show warnings from last 10 minutes
+ BSONArrayBuilder arr(result.subarrayStart("warnings"));
+ while (rl.more()) {
+ arr.append(rl.next());
+ }
arr.done();
}
}
-
+
timeBuilder.appendNumber( "at end" , Listener::getElapsedTimeMillis() - start );
if ( Listener::getElapsedTimeMillis() - start > 1000 ) {
BSONObj t = timeBuilder.obj();