diff options
| author | Apollon Oikonomopoulos <apoikos@debian.org> | 2018-09-04 11:58:07 +0300 |
|---|---|---|
| committer | Apollon Oikonomopoulos <apoikos@debian.org> | 2018-09-04 11:58:07 +0300 |
| commit | 3896a4a134ae19f25de14727862898cee19aa2e3 (patch) | |
| tree | 612b3188b82e3ac43407cfc26a1e28b6a7b3e292 /src/mongo/db/repl/initial_syncer.cpp | |
| parent | 2ce39939bd866655e11468aae453992093b18917 (diff) | |
New upstream version 3.4.16
Diffstat (limited to 'src/mongo/db/repl/initial_syncer.cpp')
| -rw-r--r-- | src/mongo/db/repl/initial_syncer.cpp | 38 |
1 files changed, 26 insertions, 12 deletions
diff --git a/src/mongo/db/repl/initial_syncer.cpp b/src/mongo/db/repl/initial_syncer.cpp index 8349428c3fd..53f020541b0 100644 --- a/src/mongo/db/repl/initial_syncer.cpp +++ b/src/mongo/db/repl/initial_syncer.cpp @@ -365,30 +365,44 @@ BSONObj InitialSyncer::getInitialSyncProgress() const { return _getInitialSyncProgress_inlock(); } +void InitialSyncer::_appendInitialSyncProgressMinimal_inlock(BSONObjBuilder* bob) const { + _stats.append(bob); + if (!_initialSyncState) { + return; + } + bob->appendNumber("fetchedMissingDocs", _initialSyncState->fetchedMissingDocs); + bob->appendNumber("appliedOps", _initialSyncState->appliedOps); + if (!_initialSyncState->beginTimestamp.isNull()) { + bob->append("initialSyncOplogStart", _initialSyncState->beginTimestamp); + } + if (!_initialSyncState->stopTimestamp.isNull()) { + bob->append("initialSyncOplogEnd", _initialSyncState->stopTimestamp); + } +} + BSONObj InitialSyncer::_getInitialSyncProgress_inlock() const { - BSONObjBuilder bob; try { - _stats.append(&bob); + BSONObjBuilder bob; + _appendInitialSyncProgressMinimal_inlock(&bob); if (_initialSyncState) { - bob.appendNumber("fetchedMissingDocs", _initialSyncState->fetchedMissingDocs); - bob.appendNumber("appliedOps", _initialSyncState->appliedOps); - if (!_initialSyncState->beginTimestamp.isNull()) { - bob.append("initialSyncOplogStart", _initialSyncState->beginTimestamp); - } - if (!_initialSyncState->stopTimestamp.isNull()) { - bob.append("initialSyncOplogEnd", _initialSyncState->stopTimestamp); - } if (_initialSyncState->dbsCloner) { BSONObjBuilder dbsBuilder(bob.subobjStart("databases")); _initialSyncState->dbsCloner->getStats().append(&dbsBuilder); dbsBuilder.doneFast(); } } + // In 3.4, BSONObjBuilder::obj() does not check the validity of the document it returns so + // we check it explicitly here. + auto obj = bob.obj(); + uassert(ErrorCodes::InvalidBSON, + str::stream() << "Invalid BSONObj size: " << obj.objsize(), + obj.isValid()); + return obj; } catch (const DBException& e) { - bob.resetToEmpty(); - bob.append("error", e.toString()); log() << "Error creating initial sync progress object: " << e.toString(); } + BSONObjBuilder bob; + _appendInitialSyncProgressMinimal_inlock(&bob); return bob.obj(); } |
