summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSvilen Mihaylov <svilen.mihaylov@mongodb.com>2021-06-08 09:00:09 -0400
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2021-06-10 19:49:02 +0000
commit873f9aea8173963a9219721b2baefb2cd1c883d7 (patch)
tree4211b9e7fcd407866f977d313d1f8bf555869157
parent71a233b10833950c565d6f87d7cd5cf29e59ab1e (diff)
downloadmongo-873f9aea8173963a9219721b2baefb2cd1c883d7.tar.gz
SERVER-57599 DocumentSourceBucketAuto returning eof when disposed
-rw-r--r--jstests/aggregation/sources/facet/use_cases.js10
-rw-r--r--src/mongo/db/pipeline/document_source_bucket_auto.cpp5
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);