diff options
Diffstat (limited to 'src/mongo/db/timeseries/bucket_compression.cpp')
-rw-r--r-- | src/mongo/db/timeseries/bucket_compression.cpp | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/src/mongo/db/timeseries/bucket_compression.cpp b/src/mongo/db/timeseries/bucket_compression.cpp index 94fa5264647..1ccd26da0bd 100644 --- a/src/mongo/db/timeseries/bucket_compression.cpp +++ b/src/mongo/db/timeseries/bucket_compression.cpp @@ -53,6 +53,7 @@ MONGO_FAIL_POINT_DEFINE(simulateBsonColumnCompressionDataLoss); CompressionResult compressBucket(const BSONObj& bucketDoc, StringData timeFieldName, const NamespaceString& nss, + bool eligibleForReopening, bool validateDecompression) try { CompressionResult result; @@ -179,22 +180,36 @@ CompressionResult compressBucket(const BSONObj& bucketDoc, { BSONObjBuilder control(builder.subobjStart(kBucketControlFieldName)); - // Set right version, leave other control fields unchanged + const bool shouldSetBucketClosed = !eligibleForReopening && + feature_flags::gTimeseriesScalabilityImprovements.isEnabled( + serverGlobalParams.featureCompatibility); + + // Set the version to indicate that the bucket was compressed and the closed flag if the + // bucket shouldn't be reopened. Leave other control fields unchanged. + bool closedSet = false; bool versionSet = false; for (const auto& controlField : controlElement.Obj()) { if (controlField.fieldNameStringData() == kBucketControlVersionFieldName) { control.append(kBucketControlVersionFieldName, kTimeseriesControlCompressedVersion); versionSet = true; + } else if (controlField.fieldNameStringData() == kBucketControlClosedFieldName && + shouldSetBucketClosed) { + control.append(kBucketControlClosedFieldName, true); + closedSet = true; } else { control.append(controlField); } } - // Set version if it was missing from uncompressed bucket + // Set version and closed if it was missing from uncompressed bucket if (!versionSet) { control.append(kBucketControlVersionFieldName, kTimeseriesControlCompressedVersion); } + if (!closedSet && shouldSetBucketClosed) { + control.append(kBucketControlClosedFieldName, true); + } + // Set count control.append(kBucketControlCountFieldName, static_cast<int32_t>(measurements.size())); } |