diff options
author | Svilen Mihaylov <svilen.mihaylov@mongodb.com> | 2021-06-08 09:00:09 -0400 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2021-06-10 19:49:02 +0000 |
commit | 873f9aea8173963a9219721b2baefb2cd1c883d7 (patch) | |
tree | 4211b9e7fcd407866f977d313d1f8bf555869157 | |
parent | 71a233b10833950c565d6f87d7cd5cf29e59ab1e (diff) | |
download | mongo-873f9aea8173963a9219721b2baefb2cd1c883d7.tar.gz |
SERVER-57599 DocumentSourceBucketAuto returning eof when disposed
-rw-r--r-- | jstests/aggregation/sources/facet/use_cases.js | 10 | ||||
-rw-r--r-- | src/mongo/db/pipeline/document_source_bucket_auto.cpp | 5 |
2 files changed, 15 insertions, 0 deletions
diff --git a/jstests/aggregation/sources/facet/use_cases.js b/jstests/aggregation/sources/facet/use_cases.js index 1a2d662d437..091f0933800 100644 --- a/jstests/aggregation/sources/facet/use_cases.js +++ b/jstests/aggregation/sources/facet/use_cases.js @@ -123,4 +123,14 @@ assert.eq(facetRes.length, 1); const scoreRank = facetRes[0]['scoreRank']; assert.eq(scoreRank.length, 1); assert.eq(scoreRank[0]['count'], 2); + +// Fix for SERVER-57599. Make sure this facet does not crash. +coll.drop(); +assert.commandWorked(coll.insert({"_id": 5, "title": "cakes and oranges"})); +coll.aggregate([{ + $facet: { + "manufacturers": [{"$sortByCount": "$manufacturer"}, {"$sort": {"count": -1, "_id": 1}}], + "autoBucketedPrices": [{"$bucketAuto": {"groupBy": "$price", "buckets": 5}}] + } +}]); }()); diff --git a/src/mongo/db/pipeline/document_source_bucket_auto.cpp b/src/mongo/db/pipeline/document_source_bucket_auto.cpp index 1ffac313f28..61630565963 100644 --- a/src/mongo/db/pipeline/document_source_bucket_auto.cpp +++ b/src/mongo/db/pipeline/document_source_bucket_auto.cpp @@ -101,6 +101,11 @@ DocumentSource::GetNextResult DocumentSourceBucketAuto::doGetNext() { _populated = true; } + if (!_sortedInput) { + // We have been disposed. Return EOF. + return GetNextResult::makeEOF(); + } + if (_currentBucketDetails.currentBucketNum++ < _nBuckets) { if (auto bucket = populateNextBucket()) { return makeDocument(*bucket); |