diff options
author | Evgeni Dobranov <evgeni.dobranov@mongodb.com> | 2019-09-13 20:02:10 +0000 |
---|---|---|
committer | evergreen <evergreen@mongodb.com> | 2019-09-13 20:02:10 +0000 |
commit | d832971810c64029c66c1376ce34d47aebba6455 (patch) | |
tree | 9278d76e9069a76c1017c1fd017aa48562293b1c /src/mongo/db/catalog | |
parent | abfc416116f6d5df1aea9bfe9e1d74c5b465c3a9 (diff) | |
download | mongo-d832971810c64029c66c1376ce34d47aebba6455.tar.gz |
SERVER-43052 Sanitize writeConflictRetry loops for duplicate fields in result
Diffstat (limited to 'src/mongo/db/catalog')
-rw-r--r-- | src/mongo/db/catalog/drop_indexes.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/mongo/db/catalog/drop_indexes.cpp b/src/mongo/db/catalog/drop_indexes.cpp index 3e212385757..d09a7a2044d 100644 --- a/src/mongo/db/catalog/drop_indexes.cpp +++ b/src/mongo/db/catalog/drop_indexes.cpp @@ -226,12 +226,16 @@ Status dropIndexes(OperationContext* opCtx, WriteUnitOfWork wunit(opCtx); OldClientContext ctx(opCtx, nss.ns()); - Status status = wrappedRun(opCtx, collection, cmdObj, result); + // Use an empty BSONObjBuilder to avoid duplicate appends to result on retry loops. + BSONObjBuilder tempObjBuilder; + Status status = wrappedRun(opCtx, collection, cmdObj, &tempObjBuilder); if (!status.isOK()) { return status; } wunit.commit(); + + result->appendElementsUnique(tempObjBuilder.done()); // This append will only happen once. return Status::OK(); }); } |