Code view:

A painting is a person's account of this edit as text, recorded independently of the node mapping - a rendering often has several equally defensible answers where the mapping has one. Deletions and insertions carry no position on the opposite side in a painting, so that panel draws no caret for them.

Before

…lines 1–31 unchanged (31 lines)
32#include "mongo/db/op_observer/op_observer_registry.h"
33#include "mongo/db/op_observer/operation_logger_impl.h"
34#include "mongo/db/repl/apply_ops.h"
35#include "mongo/db/repl/apply_ops_command_info.h"
36#include "mongo/db/repl/oplog_entry.h"
37#include "mongo/db/repl/oplog_interface_local.h"
38#include "mongo/db/replicated_fast_count/replicated_fast_count_init.h"
39#include "mongo/db/replicated_fast_count/replicated_fast_count_manager.h"
40#include "mongo/db/replicated_fast_count/replicated_fast_count_test_helpers.h"
41#include "mongo/db/replicated_fast_count/replicated_fast_count_uncommitted_changes.h"
42#include "mongo/db/shard_role/shard_catalog/catalog_raii.h"
43#include "mongo/db/shard_role/shard_catalog/catalog_test_fixture.h"
44#include "mongo/db/shard_role/shard_catalog/create_collection.h"
…lines 45–920 unchanged (876 lines)
921 replicated_fast_count_test_helpers::checkCommittedFastCountChanges(
922 internalUuid, _fastCountManager, docsToInsertCount, expectedSize);
923 replicated_fast_count_test_helpers::checkUncommittedFastCountChanges(
924 _opCtx, internalUuid, 0, 0);
925 }
926}
927
928/**
929 * Set of tests confirming oplog entries are generated with replicated size count metadata.
930 */
931class ReplicatedFastCountOplogEntryTest : public ReplicatedFastCountTest {};
932
933TEST_F(ReplicatedFastCountOplogEntryTest, BasicInsertOplogEntry) {
934 RAIIServerParameterControllerForTest featureFlag("featureFlagReplicatedFastCount", true);
935 AutoGetCollection coll(_opCtx, _nss1, LockMode::MODE_IX);
936
937 const auto docToInsert = docGeneratorForInsert(0);
938 const auto expectedSizeDelta = docToInsert.objsize();
939
940 {
941 WriteUnitOfWork wuow{_opCtx};
942 ASSERT_OK(Helpers::insert(_opCtx, *coll, docToInsert));
943 wuow.commit();
944 }
945
946 const auto insertOplogEntry = replicated_fast_count_test_helpers::getMostRecentOplogEntry(
947 _opCtx, _nss1, repl::OpTypeEnum::kInsert);
948 ASSERT_TRUE(insertOplogEntry.has_value());
949
950 // Confirm the generated oplog entry includes replicated size count information.
951 replicated_fast_count_test_helpers::assertReplicatedSizeCountMeta(*insertOplogEntry,
952 expectedSizeDelta);
953}
954
955TEST_F(ReplicatedFastCountOplogEntryTest, BasicUpdateOplogEntry) {
956 RAIIServerParameterControllerForTest featureFlag("featureFlagReplicatedFastCount", true);
957 auto coll = acquireCollection(
958 _opCtx,
959 CollectionAcquisitionRequest::fromOpCtx(_opCtx, _nss1, AcquisitionPrerequisites::kWrite),
960 MODE_IX);
961 std::string smallNote("hi");
962 const auto docInitial = BSON("_id" << 0 << "note" << smallNote);
963 {
964 WriteUnitOfWork wuow{_opCtx};
965 ASSERT_OK(Helpers::insert(_opCtx, coll.getCollectionPtr(), docInitial));
966 wuow.commit();
967 }
968
969 std::string largerNote("a slightly larger note to increase the size when we update");
970 {
971 WriteUnitOfWork wuow{_opCtx};
972 Helpers::update(_opCtx, coll, BSON("_id" << 0), BSON("$set" << BSON("note" << largerNote)));
973 wuow.commit();
974 }
975 const auto docAfterUpdate = Helpers::findOneForTesting(_opCtx, coll, BSON("_id" << 0));
976 const auto expectedSizeDelta = docAfterUpdate.objsize() - docInitial.objsize();
977
978 const auto updateOplogEntry = replicated_fast_count_test_helpers::getMostRecentOplogEntry(
979 _opCtx, _nss1, repl::OpTypeEnum::kUpdate);
980 ASSERT_TRUE(updateOplogEntry.has_value());
981
982 // Confirm the generated oplog entry includes replicated size count information.
983 replicated_fast_count_test_helpers::assertReplicatedSizeCountMeta(*updateOplogEntry,
984 expectedSizeDelta);
985}
986
987TEST_F(ReplicatedFastCountOplogEntryTest, BasicUpdateOplogEntryWithNegativeDelta) {
988 RAIIServerParameterControllerForTest featureFlag("featureFlagReplicatedFastCount", true);
989 auto coll = acquireCollection(
990 _opCtx,
991 CollectionAcquisitionRequest::fromOpCtx(_opCtx, _nss1, AcquisitionPrerequisites::kWrite),
992 MODE_IX);
993 std::string largeNote(
994 "a slightly large note to force the doc to start out as larger before the update");
995 const auto docInitial = BSON("_id" << 0 << "note" << largeNote);
996 {
997 WriteUnitOfWork wuow{_opCtx};
998 ASSERT_OK(Helpers::insert(_opCtx, coll.getCollectionPtr(), docInitial));
999 wuow.commit();
1000 }
1001
1002 std::string smallerNote("hi");
1003 {
1004 WriteUnitOfWork wuow{_opCtx};
1005 Helpers::update(
1006 _opCtx, coll, BSON("_id" << 0), BSON("$set" << BSON("note" << smallerNote)));
1007 wuow.commit();
1008 }
1009 const auto docAfterUpdate = Helpers::findOneForTesting(_opCtx, coll, BSON("_id" << 0));
1010 const auto expectedSizeDelta = docAfterUpdate.objsize() - docInitial.objsize();
1011
1012 const auto updateOplogEntry = replicated_fast_count_test_helpers::getMostRecentOplogEntry(
1013 _opCtx, _nss1, repl::OpTypeEnum::kUpdate);
1014 ASSERT_TRUE(updateOplogEntry.has_value());
1015 replicated_fast_count_test_helpers::assertReplicatedSizeCountMeta(*updateOplogEntry,
1016 expectedSizeDelta);
1017}
1018
1019TEST_F(ReplicatedFastCountOplogEntryTest, BasicDeleteOplogEntry) {
1020 RAIIServerParameterControllerForTest featureFlag("featureFlagReplicatedFastCount", true);
1021 auto coll = acquireCollection(
1022 _opCtx,
1023 CollectionAcquisitionRequest::fromOpCtx(_opCtx, _nss1, AcquisitionPrerequisites::kWrite),
1024 MODE_IX);
1025 const auto doc = BSON("_id" << 0 << "x" << 0);
1026 {
1027 WriteUnitOfWork wuow{_opCtx};
1028 ASSERT_OK(Helpers::insert(_opCtx, coll.getCollectionPtr(), doc));
1029 wuow.commit();
1030 }
1031
1032 const auto rid = Helpers::findOne(_opCtx, coll, BSON("_id" << 0));
1033 ASSERT_FALSE(rid.isNull());
1034
1035 {
1036 WriteUnitOfWork wuow{_opCtx};
1037 Helpers::deleteByRid(_opCtx, coll, rid);
1038 wuow.commit();
1039 }
1040 const auto expectedSizeDelta = doc.objsize();
1041 const auto deleteOplogEntry = replicated_fast_count_test_helpers::getMostRecentOplogEntry(
1042 _opCtx, _nss1, repl::OpTypeEnum::kDelete);
1043 ASSERT_TRUE(deleteOplogEntry.has_value());
1044 replicated_fast_count_test_helpers::assertReplicatedSizeCountMeta(*deleteOplogEntry,
1045 -expectedSizeDelta);
1046}
1047
1048TEST_F(ReplicatedFastCountOplogEntryTest, BasicGroupCommit) {
1049 RAIIServerParameterControllerForTest featureFlag("featureFlagReplicatedFastCount", true);
1050 auto coll = acquireCollection(
1051 _opCtx,
1052 CollectionAcquisitionRequest::fromOpCtx(_opCtx, _nss1, AcquisitionPrerequisites::kWrite),
1053 MODE_IX);
1054 const auto doc1 = BSON("_id" << 0 << "x" << 0);
1055 const auto doc2 = BSON("_id" << 1 << "abcdefg" << 1);
1056 {
1057 WriteUnitOfWork wuow{_opCtx, WriteUnitOfWork::kGroupForPossiblyRetryableOperations};
1058 ASSERT_OK(Helpers::insert(_opCtx, coll.getCollectionPtr(), doc1));
1059 ASSERT_OK(Helpers::insert(_opCtx, coll.getCollectionPtr(), doc2));
1060 wuow.commit();
1061 }
1062 std::vector<replicated_fast_count_test_helpers::OpValidationSpec> expectedOps{
1063 {.uuid = _uuid1, .opType = repl::OpTypeEnum::kInsert, .expectedSizeDelta = doc1.objsize()},
1064 {.uuid = _uuid1, .opType = repl::OpTypeEnum::kInsert, .expectedSizeDelta = doc2.objsize()}};
1065
1066 const auto applyOpsOplogEntry =
1067 replicated_fast_count_test_helpers::getLatestApplyOpsForNss(_opCtx, _nss1);
1068 std::vector<repl::OplogEntry> innerEntries;
1069 repl::ApplyOps::extractOperationsTo(
1070 applyOpsOplogEntry, applyOpsOplogEntry.getEntry().toBSON(), &innerEntries);
1071 replicated_fast_count_test_helpers::assertOpsMatchSpecs(innerEntries, expectedOps);
1072}
1073
1074using ReplicatedFastCountDeathTest = ReplicatedFastCountTest;
1075
1076// TODO SERVER-120203: Re-enable this test.
1077// DEATH_TEST_REGEX_F(ReplicatedFastCountDeathTest,
1078// CannotHaveNegativeCommittedSizeOrCount,
…lines 1079–1089 unchanged (11 lines)

After

…lines 1–31 unchanged (31 lines)
32#include "mongo/db/op_observer/op_observer_registry.h"
33#include "mongo/db/op_observer/operation_logger_impl.h"
34#include "mongo/db/repl/apply_ops.h"
35#include "mongo/db/repl/apply_ops_command_info.h"
36#include "mongo/db/repl/oplog_entry.h"
37#include "mongo/db/repl/oplog_interface_local.h"
38#include "mongo/db/replicated_fast_count/replicated_fast_count_delta_utils.h"
39#include "mongo/db/replicated_fast_count/replicated_fast_count_enabled.h"
40#include "mongo/db/replicated_fast_count/replicated_fast_count_init.h"
41#include "mongo/db/replicated_fast_count/replicated_fast_count_manager.h"
42#include "mongo/db/replicated_fast_count/replicated_fast_count_test_helpers.h"
43#include "mongo/db/replicated_fast_count/replicated_fast_count_uncommitted_changes.h"
44#include "mongo/db/shard_role/shard_catalog/catalog_raii.h"
45#include "mongo/db/shard_role/shard_catalog/catalog_test_fixture.h"
…lines 46–922 unchanged (877 lines)
923 replicated_fast_count_test_helpers::checkCommittedFastCountChanges(
924 internalUuid, _fastCountManager, docsToInsertCount, expectedSize);
925 replicated_fast_count_test_helpers::checkUncommittedFastCountChanges(
926 _opCtx, internalUuid, 0, 0);
927 }
928}
929
930/**
931 * Tests that operations with replicated size and count are logged with 'sizeMetadata' (information
932 * stored in the top-level 'm' field) in their oplog entries.
933 */
934class SizeMetadataLoggingTest : public ReplicatedFastCountTest {};
935
936TEST_F(SizeMetadataLoggingTest, BasicInsertOplogEntry) {
937 RAIIServerParameterControllerForTest featureFlag("featureFlagReplicatedFastCount", true);
938 AutoGetCollection coll(_opCtx, _nss1, LockMode::MODE_IX);
939
940 const auto docToInsert = docGeneratorForInsert(0);
941 const auto expectedSizeDelta = docToInsert.objsize();
942
943 {
944 WriteUnitOfWork wuow{_opCtx};
945 ASSERT_OK(Helpers::insert(_opCtx, *coll, docToInsert));
946 wuow.commit();
947 }
948
949 const auto insertOplogEntry = replicated_fast_count_test_helpers::getMostRecentOplogEntry(
950 _opCtx, _nss1, repl::OpTypeEnum::kInsert);
951 ASSERT_TRUE(insertOplogEntry.has_value());
952
953 // Confirm the generated oplog entry includes replicated size count information.
954 replicated_fast_count_test_helpers::assertReplicatedSizeCountMeta(*insertOplogEntry,
955 expectedSizeDelta);
956}
957
958TEST_F(SizeMetadataLoggingTest, BasicUpdateOplogEntry) {
959 RAIIServerParameterControllerForTest featureFlag("featureFlagReplicatedFastCount", true);
960 auto coll = acquireCollection(
961 _opCtx,
962 CollectionAcquisitionRequest::fromOpCtx(_opCtx, _nss1, AcquisitionPrerequisites::kWrite),
963 MODE_IX);
964 std::string smallNote("hi");
965 const auto docInitial = BSON("_id" << 0 << "note" << smallNote);
966 {
967 WriteUnitOfWork wuow{_opCtx};
968 ASSERT_OK(Helpers::insert(_opCtx, coll.getCollectionPtr(), docInitial));
969 wuow.commit();
970 }
971
972 std::string largerNote("a slightly larger note to increase the size when we update");
973 {
974 WriteUnitOfWork wuow{_opCtx};
975 Helpers::update(_opCtx, coll, BSON("_id" << 0), BSON("$set" << BSON("note" << largerNote)));
976 wuow.commit();
977 }
978 const auto docAfterUpdate = Helpers::findOneForTesting(_opCtx, coll, BSON("_id" << 0));
979 const auto expectedSizeDelta = docAfterUpdate.objsize() - docInitial.objsize();
980
981 const auto updateOplogEntry = replicated_fast_count_test_helpers::getMostRecentOplogEntry(
982 _opCtx, _nss1, repl::OpTypeEnum::kUpdate);
983 ASSERT_TRUE(updateOplogEntry.has_value());
984
985 // Confirm the generated oplog entry includes replicated size count information.
986 replicated_fast_count_test_helpers::assertReplicatedSizeCountMeta(*updateOplogEntry,
987 expectedSizeDelta);
988}
989
990TEST_F(SizeMetadataLoggingTest, BasicUpdateOplogEntryWithNegativeDelta) {
991 RAIIServerParameterControllerForTest featureFlag("featureFlagReplicatedFastCount", true);
992 auto coll = acquireCollection(
993 _opCtx,
994 CollectionAcquisitionRequest::fromOpCtx(_opCtx, _nss1, AcquisitionPrerequisites::kWrite),
995 MODE_IX);
996 std::string largeNote(
997 "a slightly large note to force the doc to start out as larger before the update");
998 const auto docInitial = BSON("_id" << 0 << "note" << largeNote);
999 {
1000 WriteUnitOfWork wuow{_opCtx};
1001 ASSERT_OK(Helpers::insert(_opCtx, coll.getCollectionPtr(), docInitial));
1002 wuow.commit();
1003 }
1004
1005 std::string smallerNote("hi");
1006 {
1007 WriteUnitOfWork wuow{_opCtx};
1008 Helpers::update(
1009 _opCtx, coll, BSON("_id" << 0), BSON("$set" << BSON("note" << smallerNote)));
1010 wuow.commit();
1011 }
1012 const auto docAfterUpdate = Helpers::findOneForTesting(_opCtx, coll, BSON("_id" << 0));
1013 const auto expectedSizeDelta = docAfterUpdate.objsize() - docInitial.objsize();
1014
1015 const auto updateOplogEntry = replicated_fast_count_test_helpers::getMostRecentOplogEntry(
1016 _opCtx, _nss1, repl::OpTypeEnum::kUpdate);
1017 ASSERT_TRUE(updateOplogEntry.has_value());
1018 replicated_fast_count_test_helpers::assertReplicatedSizeCountMeta(*updateOplogEntry,
1019 expectedSizeDelta);
1020}
1021
1022TEST_F(SizeMetadataLoggingTest, BasicDeleteOplogEntry) {
1023 RAIIServerParameterControllerForTest featureFlag("featureFlagReplicatedFastCount", true);
1024 auto coll = acquireCollection(
1025 _opCtx,
1026 CollectionAcquisitionRequest::fromOpCtx(_opCtx, _nss1, AcquisitionPrerequisites::kWrite),
1027 MODE_IX);
1028 const auto doc = BSON("_id" << 0 << "x" << 0);
1029 {
1030 WriteUnitOfWork wuow{_opCtx};
1031 ASSERT_OK(Helpers::insert(_opCtx, coll.getCollectionPtr(), doc));
1032 wuow.commit();
1033 }
1034
1035 const auto rid = Helpers::findOne(_opCtx, coll, BSON("_id" << 0));
1036 ASSERT_FALSE(rid.isNull());
1037
1038 {
1039 WriteUnitOfWork wuow{_opCtx};
1040 Helpers::deleteByRid(_opCtx, coll, rid);
1041 wuow.commit();
1042 }
1043 const auto expectedSizeDelta = doc.objsize();
1044 const auto deleteOplogEntry = replicated_fast_count_test_helpers::getMostRecentOplogEntry(
1045 _opCtx, _nss1, repl::OpTypeEnum::kDelete);
1046 ASSERT_TRUE(deleteOplogEntry.has_value());
1047 replicated_fast_count_test_helpers::assertReplicatedSizeCountMeta(*deleteOplogEntry,
1048 -expectedSizeDelta);
1049}
1050
1051TEST_F(SizeMetadataLoggingTest, BasicGroupCommit) {
1052 RAIIServerParameterControllerForTest featureFlag("featureFlagReplicatedFastCount", true);
1053 auto coll = acquireCollection(
1054 _opCtx,
1055 CollectionAcquisitionRequest::fromOpCtx(_opCtx, _nss1, AcquisitionPrerequisites::kWrite),
1056 MODE_IX);
1057 const auto doc1 = BSON("_id" << 0 << "x" << 0);
1058 const auto doc2 = BSON("_id" << 1 << "abcdefg" << 1);
1059 {
1060 WriteUnitOfWork wuow{_opCtx, WriteUnitOfWork::kGroupForPossiblyRetryableOperations};
1061 ASSERT_OK(Helpers::insert(_opCtx, coll.getCollectionPtr(), doc1));
1062 ASSERT_OK(Helpers::insert(_opCtx, coll.getCollectionPtr(), doc2));
1063 wuow.commit();
1064 }
1065 std::vector<replicated_fast_count_test_helpers::OpValidationSpec> expectedOps{
1066 {.uuid = _uuid1, .opType = repl::OpTypeEnum::kInsert, .expectedSizeDelta = doc1.objsize()},
1067 {.uuid = _uuid1, .opType = repl::OpTypeEnum::kInsert, .expectedSizeDelta = doc2.objsize()}};
1068
1069 const auto applyOpsOplogEntry =
1070 replicated_fast_count_test_helpers::getLatestApplyOpsForNss(_opCtx, _nss1);
1071 std::vector<repl::OplogEntry> innerEntries;
1072 repl::ApplyOps::extractOperationsTo(
1073 applyOpsOplogEntry, applyOpsOplogEntry.getEntry().toBSON(), &innerEntries);
1074 replicated_fast_count_test_helpers::assertOpsMatchSpecs(innerEntries, expectedOps);
1075}
1076
1077using ReplicatedFastCountDeltaUtilsTest = ReplicatedFastCountTest;
1078
1079repl::OplogEntrySizeMetadata makeOperationSizeMetadata(int32_t replicatedSizeDelta) {
1080 repl::OplogEntrySizeMetadata m;
1081 m.setSz(replicatedSizeDelta);
1082 return m;
1083}
1084
1085repl::OplogEntry makeOplogEntryWithSizeMeta(const NamespaceString& nss,
1086 repl::OpTypeEnum opType,
1087 int32_t sizeDelta) {
1088
1089 auto sizeMetadata = makeOperationSizeMetadata(sizeDelta);
1090 return repl::DurableOplogEntry{repl::DurableOplogEntryParams{
1091 .opTime = repl::OpTime(),
1092 .opType = opType,
1093 .nss = nss,
1094 .oField = BSONObj(),
1095 .sizeMetadata = sizeMetadata,
1096 .wallClockTime = Date_t::now(),
1097 }};
1098}
1099
1100TEST_F(ReplicatedFastCountDeltaUtilsTest, ExtractSizeCountDeltaForInsert) {
1101 const int32_t sizeDelta = 400;
1102 const auto insertOp = makeOplogEntryWithSizeMeta(_nss1, repl::OpTypeEnum::kInsert, sizeDelta);
1103 const auto extractedSizeCount = replicated_fast_count::extractSizeCountDeltaForOp(insertOp);
1104 ASSERT(extractedSizeCount.has_value());
1105
1106 // Insert means count increases by 1.
1107 ASSERT_EQ(1, extractedSizeCount->count);
1108 ASSERT_EQ(sizeDelta, extractedSizeCount->size);
1109}
1110
1111TEST_F(ReplicatedFastCountDeltaUtilsTest, ExtractSizeCountDeltaForUpdate) {
1112 const int32_t sizeDelta = 400;
1113 const auto insertOp = makeOplogEntryWithSizeMeta(_nss1, repl::OpTypeEnum::kUpdate, sizeDelta);
1114 const auto extractedSizeCount = replicated_fast_count::extractSizeCountDeltaForOp(insertOp);
1115 ASSERT(extractedSizeCount.has_value());
1116
1117 // Updates imply no new documents, count delta is 0.
1118 ASSERT_EQ(0, extractedSizeCount->count);
1119 ASSERT_EQ(sizeDelta, extractedSizeCount->size);
1120}
1121
1122TEST_F(ReplicatedFastCountDeltaUtilsTest, ExtractSizeCountDeltaForDelete) {
1123 const int32_t sizeDelta = 400;
1124 const auto insertOp = makeOplogEntryWithSizeMeta(_nss1, repl::OpTypeEnum::kDelete, sizeDelta);
1125 const auto extractedSizeCount = replicated_fast_count::extractSizeCountDeltaForOp(insertOp);
1126 ASSERT(extractedSizeCount.has_value());
1127
1128 // Delete implies one less document.
1129 ASSERT_EQ(-1, extractedSizeCount->count);
1130 ASSERT_EQ(sizeDelta, extractedSizeCount->size);
1131}
1132
1133TEST_F(ReplicatedFastCountDeltaUtilsTest, NoSizeCountDeltaWhenAbsentFromOplogEntry) {
1134 // 'OpTypeEnum::kInsert' supports replicated fast count information, but none is extracted
1135 // because the 'm' field is absent from the oplog entry.
1136 repl::OplogEntry insertOpNoSizeMetadata{repl::DurableOplogEntry{repl::DurableOplogEntryParams{
1137 .opTime = repl::OpTime(),
1138 .opType = repl::OpTypeEnum::kInsert,
1139 .nss = _nss1,
1140 .oField = BSONObj(),
1141 .wallClockTime = Date_t::now(),
1142 }}};
1143 const auto extractedSizeCount =
1144 replicated_fast_count::extractSizeCountDeltaForOp(insertOpNoSizeMetadata);
1145 ASSERT_FALSE(insertOpNoSizeMetadata.getSizeMetadata().has_value());
1146}
1147
1148TEST_F(ReplicatedFastCountDeltaUtilsTest, NoSizeCountDeltaWhenAbsentAndIncompatibleOpType) {
1149 // 'OpTypeEnum::kCommand' does not support top level 'sizeMetadata' field 'm', and in absence of
1150 // the 'sizeMetadata', nothing is returned when trying to extract size count deltas.
1151 repl::OplogEntry commandOpNoSizeMetadata{repl::DurableOplogEntry{repl::DurableOplogEntryParams{
1152 .opTime = repl::OpTime(),
1153 .opType = repl::OpTypeEnum::kCommand,
1154 .nss = _nss1,
1155 .oField = BSONObj(),
1156 .wallClockTime = Date_t::now(),
1157 }}};
1158 const auto extractedSizeCount =
1159 replicated_fast_count::extractSizeCountDeltaForOp(commandOpNoSizeMetadata);
1160 ASSERT_FALSE(commandOpNoSizeMetadata.getSizeMetadata().has_value());
1161}
1162
1163TEST_F(ReplicatedFastCountDeltaUtilsTest, ExtractSizeCountDeltaOnUnsupportedOpType) {
1164 const auto oplogEntry =
1165 makeOplogEntryWithSizeMeta(_nss1, repl::OpTypeEnum::kNoop, 400 /* sizeDelta */);
1166
1167 // Size metadata is only supported for 'insert', 'delete', and 'update' operations. All other
1168 // operations are incompatible with a top-level 'm' field.
1169 // TODO SERVER-121175: Include truncates in accepted opTypes comment.
1170 ASSERT_THROWS_CODE(
1171 replicated_fast_count::extractSizeCountDeltaForOp(oplogEntry), DBException, 12115900);
1172}
1173
1174TEST_F(ReplicatedFastCountDeltaUtilsTest, ExtractSizeCountDeltaOnNonEligibleNss) {
1175 const NamespaceString localNss =
1176 NamespaceString::createNamespaceString_forTest("local", "coll1");
1177 EXPECT_FALSE(isReplicatedFastCountEligible(localNss));
1178
1179 const auto oplogEntry =
1180 makeOplogEntryWithSizeMeta(localNss, repl::OpTypeEnum::kNoop, 400 /* sizeDelta */);
1181
1182 // Local namespaces are not eligible for replicated size count.
1183 ASSERT_THROWS_CODE(
1184 replicated_fast_count::extractSizeCountDeltaForOp(oplogEntry), DBException, 12115900);
1185}
1186
1187TEST_F(ReplicatedFastCountDeltaUtilsTest,
1188 ExtractSizeCountDeltaOnNonEligibleNssWithoutSizeMetadata) {
1189 const NamespaceString localNss =
1190 NamespaceString::createNamespaceString_forTest("local", "coll1");
1191 EXPECT_FALSE(isReplicatedFastCountEligible(localNss));
1192
1193 repl::OplogEntry insertOpLocalNs{repl::DurableOplogEntry{repl::DurableOplogEntryParams{
1194 .opTime = repl::OpTime(),
1195 .opType = repl::OpTypeEnum::kInsert,
1196 .nss = localNss,
1197 .oField = BSONObj(),
1198 .wallClockTime = Date_t::now(),
1199 }}};
1200
1201 // Local namespace without sizeMetadata shouldn't throw an error.
1202 ASSERT_FALSE(replicated_fast_count::extractSizeCountDeltaForOp(insertOpLocalNs).has_value());
1203}
1204
1205using ReplicatedFastCountDeathTest = ReplicatedFastCountTest;
1206
1207// TODO SERVER-120203: Re-enable this test.
1208// DEATH_TEST_REGEX_F(ReplicatedFastCountDeathTest,
1209// CannotHaveNegativeCommittedSizeOrCount,
…lines 1210–1220 unchanged (11 lines)

Before

translation_unit
comment "/**\n * Copyright (C) 2026-present MongoDB, Inc.\n *\n * "...
preproc_include
#include "#include"
string_literal
" "\""
string_content "mongo/db/dbhelpers.h"
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "mongo/db/op_observer/op_observer_impl.h"
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "mongo/db/op_observer/op_observer_registry.h"
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "mongo/db/op_observer/operation_logger_impl.h"
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "mongo/db/repl/apply_ops.h"
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "mongo/db/repl/apply_ops_command_info.h"
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "mongo/db/repl/oplog_entry.h"
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "mongo/db/repl/oplog_interface_local.h"
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "mongo/db/replicated_fast_count/replicated_fast_count_init.h"
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "mongo/db/replicated_fast_count/replicated_fast_count_manager"...
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "mongo/db/replicated_fast_count/replicated_fast_count_test_he"...
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "mongo/db/replicated_fast_count/replicated_fast_count_uncommi"...
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "mongo/db/shard_role/shard_catalog/catalog_raii.h"
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "mongo/db/shard_role/shard_catalog/catalog_test_fixture.h"
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "mongo/db/shard_role/shard_catalog/create_collection.h"
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "mongo/unittest/death_test.h"
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "mongo/unittest/unittest.h"
" "\""
namespace_definition
namespace "namespace"
namespace_identifier "mongo"
declaration_list
{ "{"
namespace_definition
namespace "namespace"
declaration_list
{ "{"
class_specifier (+572 nodes collapsed)
; ";"
declaration
type_qualifier
const "const"
type_identifier "NamespaceString"
init_declarator
identifier "replicatedFastCountStoreNss"
= "="
call_expression
qualified_identifier
namespace_identifier "NamespaceString"
:: "::"
identifier "makeGlobalConfigCollection"
argument_list
( "("
qualified_identifier
namespace_identifier "NamespaceString"
:: "::"
identifier "kReplicatedFastCountStore"
) ")"
; ";"
declaration (+61 nodes collapsed)
declaration (+73 nodes collapsed)
function_definition (+64 nodes collapsed)
function_definition (+67 nodes collapsed)
function_definition (+107 nodes collapsed)
function_definition (+99 nodes collapsed)
function_definition (+218 nodes collapsed)
function_definition (+234 nodes collapsed)
function_definition (+440 nodes collapsed)
function_definition (+339 nodes collapsed)
function_definition (+97 nodes collapsed)
function_definition (+439 nodes collapsed)
function_definition (+382 nodes collapsed)
comment "// TODO SERVER-118457: Parameterize test and test variety of"...
comment "// counts. Test for drop, create."
comment "/**\n * Helpers to build applyOps-style CRUD operations.\n */"
function_definition (+85 nodes collapsed)
function_definition (+121 nodes collapsed)
function_definition (+92 nodes collapsed)
function_definition (+337 nodes collapsed)
function_definition (+326 nodes collapsed)
function_definition (+311 nodes collapsed)
function_definition (+460 nodes collapsed)
function_definition (+447 nodes collapsed)
function_definition (+334 nodes collapsed)
function_definition (+326 nodes collapsed)
comment "/**\n * Set of tests confirming oplog entries are generated w"...
class_specifier
class "class"
type_identifier "ReplicatedFastCountOplogEntryTest"
base_class_clause
: ":"
access_specifier
public "public"
type_identifier "ReplicatedFastCountTest"
field_declaration_list
{ "{"
} "}"
; ";"
function_definition
function_declarator
identifier "TEST_F"
parameter_list
( "("
parameter_declaration
type_identifier "ReplicatedFastCountOplogEntryTest"
, ","
parameter_declaration
type_identifier "BasicInsertOplogEntry"
) ")"
compound_statement (+171 nodes collapsed)
function_definition
function_declarator
identifier "TEST_F"
parameter_list
( "("
parameter_declaration
type_identifier "ReplicatedFastCountOplogEntryTest"
, ","
parameter_declaration
type_identifier "BasicUpdateOplogEntry"
) ")"
compound_statement (+349 nodes collapsed)
function_definition
function_declarator
identifier "TEST_F"
parameter_list
( "("
parameter_declaration
type_identifier "ReplicatedFastCountOplogEntryTest"
, ","
parameter_declaration
type_identifier "BasicUpdateOplogEntryWithNegativeDelta"
) ")"
compound_statement (+348 nodes collapsed)
function_definition
function_declarator
identifier "TEST_F"
parameter_list
( "("
parameter_declaration
type_identifier "ReplicatedFastCountOplogEntryTest"
, ","
parameter_declaration
type_identifier "BasicDeleteOplogEntry"
) ")"
compound_statement (+290 nodes collapsed)
function_definition
function_declarator
identifier "TEST_F"
parameter_list
( "("
parameter_declaration
type_identifier "ReplicatedFastCountOplogEntryTest"
, ","
parameter_declaration
type_identifier "BasicGroupCommit"
) ")"
compound_statement (+366 nodes collapsed)
alias_declaration
using "using"
type_identifier "ReplicatedFastCountDeathTest"
= "="
type_descriptor
type_identifier "ReplicatedFastCountTest"
; ";"
comment "// TODO SERVER-120203: Re-enable this test."
comment "// DEATH_TEST_REGEX_F(ReplicatedFastCountDeathTest,"
comment "// CannotHaveNegativeCommittedSizeOrCoun"...
comment "// R\"(Invariant failure.*Expected fast c"...
comment "// non-negative)\") {"
comment "// boost::container::flat_map<UUID, CollectionSizeCount"...
comment "// changes[UUID::gen()] = CollectionSizeCount{-10, -1};"
comment "// _fastCountManager->commit(changes, boost::none);"
comment "// }"
} "}"
comment "// namespace"
} "}"
expression_statement
; ";"
comment "// namespace mongo"

After

translation_unit
comment "/**\n * Copyright (C) 2026-present MongoDB, Inc.\n *\n * "...
preproc_include
#include "#include"
string_literal
" "\""
string_content "mongo/db/dbhelpers.h"
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "mongo/db/op_observer/op_observer_impl.h"
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "mongo/db/op_observer/op_observer_registry.h"
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "mongo/db/op_observer/operation_logger_impl.h"
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "mongo/db/repl/apply_ops.h"
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "mongo/db/repl/apply_ops_command_info.h"
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "mongo/db/repl/oplog_entry.h"
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "mongo/db/repl/oplog_interface_local.h"
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "mongo/db/replicated_fast_count/replicated_fast_count_delta_u"...
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "mongo/db/replicated_fast_count/replicated_fast_count_enabled"...
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "mongo/db/replicated_fast_count/replicated_fast_count_init.h"
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "mongo/db/replicated_fast_count/replicated_fast_count_manager"...
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "mongo/db/replicated_fast_count/replicated_fast_count_test_he"...
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "mongo/db/replicated_fast_count/replicated_fast_count_uncommi"...
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "mongo/db/shard_role/shard_catalog/catalog_raii.h"
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "mongo/db/shard_role/shard_catalog/catalog_test_fixture.h"
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "mongo/db/shard_role/shard_catalog/create_collection.h"
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "mongo/unittest/death_test.h"
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "mongo/unittest/unittest.h"
" "\""
namespace_definition
namespace "namespace"
namespace_identifier "mongo"
declaration_list
{ "{"
namespace_definition
namespace "namespace"
declaration_list
{ "{"
class_specifier (+572 nodes collapsed)
; ";"
declaration
type_qualifier
const "const"
type_identifier "NamespaceString"
init_declarator
identifier "replicatedFastCountStoreNss"
= "="
call_expression
qualified_identifier
namespace_identifier "NamespaceString"
:: "::"
identifier "makeGlobalConfigCollection"
argument_list
( "("
qualified_identifier
namespace_identifier "NamespaceString"
:: "::"
identifier "kReplicatedFastCountStore"
) ")"
; ";"
declaration (+61 nodes collapsed)
declaration (+73 nodes collapsed)
function_definition (+64 nodes collapsed)
function_definition (+67 nodes collapsed)
function_definition (+107 nodes collapsed)
function_definition (+99 nodes collapsed)
function_definition (+218 nodes collapsed)
function_definition (+234 nodes collapsed)
function_definition (+440 nodes collapsed)
function_definition (+339 nodes collapsed)
function_definition (+97 nodes collapsed)
function_definition (+439 nodes collapsed)
function_definition (+382 nodes collapsed)
comment "// TODO SERVER-118457: Parameterize test and test variety of"...
comment "// counts. Test for drop, create."
comment "/**\n * Helpers to build applyOps-style CRUD operations.\n */"
function_definition (+85 nodes collapsed)
function_definition (+121 nodes collapsed)
function_definition (+92 nodes collapsed)
function_definition (+337 nodes collapsed)
function_definition (+326 nodes collapsed)
function_definition (+311 nodes collapsed)
function_definition (+460 nodes collapsed)
function_definition (+447 nodes collapsed)
function_definition (+334 nodes collapsed)
function_definition (+326 nodes collapsed)
comment "/**\n * Tests that operations with replicated size and count "...
class_specifier
class "class"
type_identifier "SizeMetadataLoggingTest"
base_class_clause
: ":"
access_specifier
public "public"
type_identifier "ReplicatedFastCountTest"
field_declaration_list
{ "{"
} "}"
; ";"
function_definition
function_declarator
identifier "TEST_F"
parameter_list
( "("
parameter_declaration
type_identifier "SizeMetadataLoggingTest"
, ","
parameter_declaration
type_identifier "BasicInsertOplogEntry"
) ")"
compound_statement (+171 nodes collapsed)
function_definition
function_declarator
identifier "TEST_F"
parameter_list
( "("
parameter_declaration
type_identifier "SizeMetadataLoggingTest"
, ","
parameter_declaration
type_identifier "BasicUpdateOplogEntry"
) ")"
compound_statement (+349 nodes collapsed)
function_definition
function_declarator
identifier "TEST_F"
parameter_list
( "("
parameter_declaration
type_identifier "SizeMetadataLoggingTest"
, ","
parameter_declaration
type_identifier "BasicUpdateOplogEntryWithNegativeDelta"
) ")"
compound_statement (+348 nodes collapsed)
function_definition
function_declarator
identifier "TEST_F"
parameter_list
( "("
parameter_declaration
type_identifier "SizeMetadataLoggingTest"
, ","
parameter_declaration
type_identifier "BasicDeleteOplogEntry"
) ")"
compound_statement (+290 nodes collapsed)
function_definition
function_declarator
identifier "TEST_F"
parameter_list
( "("
parameter_declaration
type_identifier "SizeMetadataLoggingTest"
, ","
parameter_declaration
type_identifier "BasicGroupCommit"
) ")"
compound_statement (+366 nodes collapsed)
alias_declaration
using "using"
type_identifier "ReplicatedFastCountDeltaUtilsTest"
= "="
type_descriptor
type_identifier "ReplicatedFastCountTest"
; ";"
function_definition
qualified_identifier
namespace_identifier "repl"
:: "::"
type_identifier "OplogEntrySizeMetadata"
function_declarator
identifier "makeOperationSizeMetadata"
parameter_list
( "("
parameter_declaration
primitive_type "int32_t"
identifier "replicatedSizeDelta"
) ")"
compound_statement
{ "{"
declaration
qualified_identifier
namespace_identifier "repl"
:: "::"
type_identifier "OplogEntrySizeMetadata"
identifier "m"
; ";"
expression_statement
call_expression
field_expression
identifier "m"
. "."
field_identifier "setSz"
argument_list
( "("
identifier "replicatedSizeDelta"
) ")"
; ";"
return_statement
return "return"
identifier "m"
; ";"
} "}"
function_definition
qualified_identifier
namespace_identifier "repl"
:: "::"
type_identifier "OplogEntry"
function_declarator
identifier "makeOplogEntryWithSizeMeta"
parameter_list
( "("
parameter_declaration
type_qualifier
const "const"
type_identifier "NamespaceString"
reference_declarator
& "&"
identifier "nss"
, ","
parameter_declaration
qualified_identifier
namespace_identifier "repl"
:: "::"
type_identifier "OpTypeEnum"
identifier "opType"
, ","
parameter_declaration
primitive_type "int32_t"
identifier "sizeDelta"
) ")"
compound_statement
{ "{"
declaration
placeholder_type_specifier
auto "auto"
init_declarator
identifier "sizeMetadata"
= "="
call_expression
identifier "makeOperationSizeMetadata"
argument_list
( "("
identifier "sizeDelta"
) ")"
; ";"
return_statement
return "return"
compound_literal_expression
qualified_identifier
namespace_identifier "repl"
:: "::"
type_identifier "DurableOplogEntry"
initializer_list
{ "{"
compound_literal_expression
qualified_identifier
namespace_identifier "repl"
:: "::"
type_identifier "DurableOplogEntryParams"
initializer_list
{ "{"
initializer_pair
field_designator
. "."
field_identifier "opTime"
= "="
call_expression
qualified_identifier
namespace_identifier "repl"
:: "::"
identifier "OpTime"
argument_list
( "("
) ")"
, ","
initializer_pair
field_designator
. "."
field_identifier "opType"
= "="
identifier "opType"
, ","
initializer_pair
field_designator
. "."
field_identifier "nss"
= "="
identifier "nss"
, ","
initializer_pair
field_designator
. "."
field_identifier "oField"
= "="
call_expression
identifier "BSONObj"
argument_list
( "("
) ")"
, ","
initializer_pair
field_designator
. "."
field_identifier "sizeMetadata"
= "="
identifier "sizeMetadata"
, ","
initializer_pair
field_designator
. "."
field_identifier "wallClockTime"
= "="
call_expression
qualified_identifier
namespace_identifier "Date_t"
:: "::"
identifier "now"
argument_list
( "("
) ")"
, ","
} "}"
} "}"
; ";"
} "}"
function_definition
function_declarator
identifier "TEST_F"
parameter_list
( "("
parameter_declaration
type_identifier "ReplicatedFastCountDeltaUtilsTest"
, ","
parameter_declaration
type_identifier "ExtractSizeCountDeltaForInsert"
) ")"
compound_statement
{ "{"
declaration
type_qualifier
const "const"
primitive_type "int32_t"
init_declarator
identifier "sizeDelta"
= "="
number_literal "400"
; ";"
declaration
type_qualifier
const "const"
placeholder_type_specifier
auto "auto"
init_declarator
identifier "insertOp"
= "="
call_expression
identifier "makeOplogEntryWithSizeMeta"
argument_list
( "("
identifier "_nss1"
, ","
qualified_identifier
namespace_identifier "repl"
:: "::"
qualified_identifier
namespace_identifier "OpTypeEnum"
:: "::"
identifier "kInsert"
, ","
identifier "sizeDelta"
) ")"
; ";"
declaration
type_qualifier
const "const"
placeholder_type_specifier
auto "auto"
init_declarator
identifier "extractedSizeCount"
= "="
call_expression
qualified_identifier
namespace_identifier "replicated_fast_count"
:: "::"
identifier "extractSizeCountDeltaForOp"
argument_list
( "("
identifier "insertOp"
) ")"
; ";"
expression_statement
call_expression
identifier "ASSERT"
argument_list
( "("
call_expression
field_expression
identifier "extractedSizeCount"
. "."
field_identifier "has_value"
argument_list
( "("
) ")"
) ")"
; ";"
comment "// Insert means count increases by 1."
expression_statement
call_expression
identifier "ASSERT_EQ"
argument_list
( "("
number_literal "1"
, ","
field_expression
identifier "extractedSizeCount"
-> "->"
field_identifier "count"
) ")"
; ";"
expression_statement
call_expression
identifier "ASSERT_EQ"
argument_list
( "("
identifier "sizeDelta"
, ","
field_expression
identifier "extractedSizeCount"
-> "->"
field_identifier "size"
) ")"
; ";"
} "}"
function_definition
function_declarator
identifier "TEST_F"
parameter_list
( "("
parameter_declaration
type_identifier "ReplicatedFastCountDeltaUtilsTest"
, ","
parameter_declaration
type_identifier "ExtractSizeCountDeltaForUpdate"
) ")"
compound_statement
{ "{"
declaration
type_qualifier
const "const"
primitive_type "int32_t"
init_declarator
identifier "sizeDelta"
= "="
number_literal "400"
; ";"
declaration
type_qualifier
const "const"
placeholder_type_specifier
auto "auto"
init_declarator
identifier "insertOp"
= "="
call_expression
identifier "makeOplogEntryWithSizeMeta"
argument_list
( "("
identifier "_nss1"
, ","
qualified_identifier
namespace_identifier "repl"
:: "::"
qualified_identifier
namespace_identifier "OpTypeEnum"
:: "::"
identifier "kUpdate"
, ","
identifier "sizeDelta"
) ")"
; ";"
declaration
type_qualifier
const "const"
placeholder_type_specifier
auto "auto"
init_declarator
identifier "extractedSizeCount"
= "="
call_expression
qualified_identifier
namespace_identifier "replicated_fast_count"
:: "::"
identifier "extractSizeCountDeltaForOp"
argument_list
( "("
identifier "insertOp"
) ")"
; ";"
expression_statement
call_expression
identifier "ASSERT"
argument_list
( "("
call_expression
field_expression
identifier "extractedSizeCount"
. "."
field_identifier "has_value"
argument_list
( "("
) ")"
) ")"
; ";"
comment "// Updates imply no new documents, count delta is 0."
expression_statement
call_expression
identifier "ASSERT_EQ"
argument_list
( "("
number_literal "0"
, ","
field_expression
identifier "extractedSizeCount"
-> "->"
field_identifier "count"
) ")"
; ";"
expression_statement
call_expression
identifier "ASSERT_EQ"
argument_list
( "("
identifier "sizeDelta"
, ","
field_expression
identifier "extractedSizeCount"
-> "->"
field_identifier "size"
) ")"
; ";"
} "}"
function_definition
function_declarator
identifier "TEST_F"
parameter_list
( "("
parameter_declaration
type_identifier "ReplicatedFastCountDeltaUtilsTest"
, ","
parameter_declaration
type_identifier "ExtractSizeCountDeltaForDelete"
) ")"
compound_statement
{ "{"
declaration
type_qualifier
const "const"
primitive_type "int32_t"
init_declarator
identifier "sizeDelta"
= "="
number_literal "400"
; ";"
declaration
type_qualifier
const "const"
placeholder_type_specifier
auto "auto"
init_declarator
identifier "insertOp"
= "="
call_expression
identifier "makeOplogEntryWithSizeMeta"
argument_list
( "("
identifier "_nss1"
, ","
qualified_identifier
namespace_identifier "repl"
:: "::"
qualified_identifier
namespace_identifier "OpTypeEnum"
:: "::"
identifier "kDelete"
, ","
identifier "sizeDelta"
) ")"
; ";"
declaration
type_qualifier
const "const"
placeholder_type_specifier
auto "auto"
init_declarator
identifier "extractedSizeCount"
= "="
call_expression
qualified_identifier
namespace_identifier "replicated_fast_count"
:: "::"
identifier "extractSizeCountDeltaForOp"
argument_list
( "("
identifier "insertOp"
) ")"
; ";"
expression_statement
call_expression
identifier "ASSERT"
argument_list
( "("
call_expression
field_expression
identifier "extractedSizeCount"
. "."
field_identifier "has_value"
argument_list
( "("
) ")"
) ")"
; ";"
comment "// Delete implies one less document."
expression_statement
call_expression
identifier "ASSERT_EQ"
argument_list
( "("
number_literal "-1"
, ","
field_expression
identifier "extractedSizeCount"
-> "->"
field_identifier "count"
) ")"
; ";"
expression_statement
call_expression
identifier "ASSERT_EQ"
argument_list
( "("
identifier "sizeDelta"
, ","
field_expression
identifier "extractedSizeCount"
-> "->"
field_identifier "size"
) ")"
; ";"
} "}"
function_definition
function_declarator
identifier "TEST_F"
parameter_list
( "("
parameter_declaration
type_identifier "ReplicatedFastCountDeltaUtilsTest"
, ","
parameter_declaration
type_identifier "NoSizeCountDeltaWhenAbsentFromOplogEntry"
) ")"
compound_statement
{ "{"
comment "// 'OpTypeEnum::kInsert' supports replicated fast count info"...
comment "// because the 'm' field is absent from the oplog entry."
declaration
qualified_identifier
namespace_identifier "repl"
:: "::"
type_identifier "OplogEntry"
init_declarator
identifier "insertOpNoSizeMetadata"
initializer_list
{ "{"
compound_literal_expression
qualified_identifier
namespace_identifier "repl"
:: "::"
type_identifier "DurableOplogEntry"
initializer_list
{ "{"
compound_literal_expression
qualified_identifier
namespace_identifier "repl"
:: "::"
type_identifier "DurableOplogEntryParams"
initializer_list
{ "{"
initializer_pair
field_designator
. "."
field_identifier "opTime"
= "="
call_expression
qualified_identifier
namespace_identifier "repl"
:: "::"
identifier "OpTime"
argument_list
( "("
) ")"
, ","
initializer_pair
field_designator
. "."
field_identifier "opType"
= "="
qualified_identifier
namespace_identifier "repl"
:: "::"
qualified_identifier
namespace_identifier "OpTypeEnum"
:: "::"
identifier "kInsert"
, ","
initializer_pair
field_designator
. "."
field_identifier "nss"
= "="
identifier "_nss1"
, ","
initializer_pair
field_designator
. "."
field_identifier "oField"
= "="
call_expression
identifier "BSONObj"
argument_list
( "("
) ")"
, ","
initializer_pair
field_designator
. "."
field_identifier "wallClockTime"
= "="
call_expression
qualified_identifier
namespace_identifier "Date_t"
:: "::"
identifier "now"
argument_list
( "("
) ")"
, ","
} "}"
} "}"
} "}"
; ";"
declaration
type_qualifier
const "const"
placeholder_type_specifier
auto "auto"
init_declarator
identifier "extractedSizeCount"
= "="
call_expression
qualified_identifier
namespace_identifier "replicated_fast_count"
:: "::"
identifier "extractSizeCountDeltaForOp"
argument_list
( "("
identifier "insertOpNoSizeMetadata"
) ")"
; ";"
expression_statement
call_expression
identifier "ASSERT_FALSE"
argument_list
( "("
call_expression
field_expression
call_expression
field_expression
identifier "insertOpNoSizeMetadata"
. "."
field_identifier "getSizeMetadata"
argument_list
( "("
) ")"
. "."
field_identifier "has_value"
argument_list
( "("
) ")"
) ")"
; ";"
} "}"
function_definition
function_declarator
identifier "TEST_F"
parameter_list
( "("
parameter_declaration
type_identifier "ReplicatedFastCountDeltaUtilsTest"
, ","
parameter_declaration
type_identifier "NoSizeCountDeltaWhenAbsentAndIncompatibleOpType"
) ")"
compound_statement
{ "{"
comment "// 'OpTypeEnum::kCommand' does not support top level 'sizeMe"...
comment "// the 'sizeMetadata', nothing is returned when trying to ex"...
declaration
qualified_identifier
namespace_identifier "repl"
:: "::"
type_identifier "OplogEntry"
init_declarator
identifier "commandOpNoSizeMetadata"
initializer_list
{ "{"
compound_literal_expression
qualified_identifier
namespace_identifier "repl"
:: "::"
type_identifier "DurableOplogEntry"
initializer_list
{ "{"
compound_literal_expression
qualified_identifier
namespace_identifier "repl"
:: "::"
type_identifier "DurableOplogEntryParams"
initializer_list
{ "{"
initializer_pair
field_designator
. "."
field_identifier "opTime"
= "="
call_expression
qualified_identifier
namespace_identifier "repl"
:: "::"
identifier "OpTime"
argument_list
( "("
) ")"
, ","
initializer_pair
field_designator
. "."
field_identifier "opType"
= "="
qualified_identifier
namespace_identifier "repl"
:: "::"
qualified_identifier
namespace_identifier "OpTypeEnum"
:: "::"
identifier "kCommand"
, ","
initializer_pair
field_designator
. "."
field_identifier "nss"
= "="
identifier "_nss1"
, ","
initializer_pair
field_designator
. "."
field_identifier "oField"
= "="
call_expression
identifier "BSONObj"
argument_list
( "("
) ")"
, ","
initializer_pair
field_designator
. "."
field_identifier "wallClockTime"
= "="
call_expression
qualified_identifier
namespace_identifier "Date_t"
:: "::"
identifier "now"
argument_list
( "("
) ")"
, ","
} "}"
} "}"
} "}"
; ";"
declaration
type_qualifier
const "const"
placeholder_type_specifier
auto "auto"
init_declarator
identifier "extractedSizeCount"
= "="
call_expression
qualified_identifier
namespace_identifier "replicated_fast_count"
:: "::"
identifier "extractSizeCountDeltaForOp"
argument_list
( "("
identifier "commandOpNoSizeMetadata"
) ")"
; ";"
expression_statement
call_expression
identifier "ASSERT_FALSE"
argument_list
( "("
call_expression
field_expression
call_expression
field_expression
identifier "commandOpNoSizeMetadata"
. "."
field_identifier "getSizeMetadata"
argument_list
( "("
) ")"
. "."
field_identifier "has_value"
argument_list
( "("
) ")"
) ")"
; ";"
} "}"
function_definition
function_declarator
identifier "TEST_F"
parameter_list
( "("
parameter_declaration
type_identifier "ReplicatedFastCountDeltaUtilsTest"
, ","
parameter_declaration
type_identifier "ExtractSizeCountDeltaOnUnsupportedOpType"
) ")"
compound_statement
{ "{"
declaration
type_qualifier
const "const"
placeholder_type_specifier
auto "auto"
init_declarator
identifier "oplogEntry"
= "="
call_expression
identifier "makeOplogEntryWithSizeMeta"
argument_list
( "("
identifier "_nss1"
, ","
qualified_identifier
namespace_identifier "repl"
:: "::"
qualified_identifier
namespace_identifier "OpTypeEnum"
:: "::"
identifier "kNoop"
, ","
number_literal "400"
comment "/* sizeDelta */"
) ")"
; ";"
comment "// Size metadata is only supported for 'insert', 'delete', a"...
comment "// operations are incompatible with a top-level 'm' field."
comment "// TODO SERVER-121175: Include truncates in accepted opTypes"...
expression_statement
call_expression
identifier "ASSERT_THROWS_CODE"
argument_list
( "("
call_expression
qualified_identifier
namespace_identifier "replicated_fast_count"
:: "::"
identifier "extractSizeCountDeltaForOp"
argument_list
( "("
identifier "oplogEntry"
) ")"
, ","
identifier "DBException"
, ","
number_literal "12115900"
) ")"
; ";"
} "}"
function_definition
function_declarator
identifier "TEST_F"
parameter_list
( "("
parameter_declaration
type_identifier "ReplicatedFastCountDeltaUtilsTest"
, ","
parameter_declaration
type_identifier "ExtractSizeCountDeltaOnNonEligibleNss"
) ")"
compound_statement
{ "{"
declaration
type_qualifier
const "const"
type_identifier "NamespaceString"
init_declarator
identifier "localNss"
= "="
call_expression
qualified_identifier
namespace_identifier "NamespaceString"
:: "::"
identifier "createNamespaceString_forTest"
argument_list
( "("
string_literal
" "\""
string_content "local"
" "\""
, ","
string_literal
" "\""
string_content "coll1"
" "\""
) ")"
; ";"
expression_statement
call_expression
identifier "EXPECT_FALSE"
argument_list
( "("
call_expression
identifier "isReplicatedFastCountEligible"
argument_list
( "("
identifier "localNss"
) ")"
) ")"
; ";"
declaration
type_qualifier
const "const"
placeholder_type_specifier
auto "auto"
init_declarator
identifier "oplogEntry"
= "="
call_expression
identifier "makeOplogEntryWithSizeMeta"
argument_list
( "("
identifier "localNss"
, ","
qualified_identifier
namespace_identifier "repl"
:: "::"
qualified_identifier
namespace_identifier "OpTypeEnum"
:: "::"
identifier "kNoop"
, ","
number_literal "400"
comment "/* sizeDelta */"
) ")"
; ";"
comment "// Local namespaces are not eligible for replicated size cou"...
expression_statement
call_expression
identifier "ASSERT_THROWS_CODE"
argument_list
( "("
call_expression
qualified_identifier
namespace_identifier "replicated_fast_count"
:: "::"
identifier "extractSizeCountDeltaForOp"
argument_list
( "("
identifier "oplogEntry"
) ")"
, ","
identifier "DBException"
, ","
number_literal "12115900"
) ")"
; ";"
} "}"
function_definition
function_declarator
identifier "TEST_F"
parameter_list
( "("
parameter_declaration
type_identifier "ReplicatedFastCountDeltaUtilsTest"
, ","
parameter_declaration
type_identifier "ExtractSizeCountDeltaOnNonEligibleNssWithoutSizeMetadata"
) ")"
compound_statement
{ "{"
declaration
type_qualifier
const "const"
type_identifier "NamespaceString"
init_declarator
identifier "localNss"
= "="
call_expression
qualified_identifier
namespace_identifier "NamespaceString"
:: "::"
identifier "createNamespaceString_forTest"
argument_list
( "("
string_literal
" "\""
string_content "local"
" "\""
, ","
string_literal
" "\""
string_content "coll1"
" "\""
) ")"
; ";"
expression_statement
call_expression
identifier "EXPECT_FALSE"
argument_list
( "("
call_expression
identifier "isReplicatedFastCountEligible"
argument_list
( "("
identifier "localNss"
) ")"
) ")"
; ";"
declaration
qualified_identifier
namespace_identifier "repl"
:: "::"
type_identifier "OplogEntry"
init_declarator
identifier "insertOpLocalNs"
initializer_list
{ "{"
compound_literal_expression
qualified_identifier
namespace_identifier "repl"
:: "::"
type_identifier "DurableOplogEntry"
initializer_list
{ "{"
compound_literal_expression
qualified_identifier
namespace_identifier "repl"
:: "::"
type_identifier "DurableOplogEntryParams"
initializer_list
{ "{"
initializer_pair
field_designator
. "."
field_identifier "opTime"
= "="
call_expression
qualified_identifier
namespace_identifier "repl"
:: "::"
identifier "OpTime"
argument_list
( "("
) ")"
, ","
initializer_pair
field_designator
. "."
field_identifier "opType"
= "="
qualified_identifier
namespace_identifier "repl"
:: "::"
qualified_identifier
namespace_identifier "OpTypeEnum"
:: "::"
identifier "kInsert"
, ","
initializer_pair
field_designator
. "."
field_identifier "nss"
= "="
identifier "localNss"
, ","
initializer_pair
field_designator
. "."
field_identifier "oField"
= "="
call_expression
identifier "BSONObj"
argument_list
( "("
) ")"
, ","
initializer_pair
field_designator
. "."
field_identifier "wallClockTime"
= "="
call_expression
qualified_identifier
namespace_identifier "Date_t"
:: "::"
identifier "now"
argument_list
( "("
) ")"
, ","
} "}"
} "}"
} "}"
; ";"
comment "// Local namespace without sizeMetadata shouldn't throw an e"...
expression_statement
call_expression
identifier "ASSERT_FALSE"
argument_list
( "("
call_expression
field_expression
call_expression
qualified_identifier
namespace_identifier "replicated_fast_count"
:: "::"
identifier "extractSizeCountDeltaForOp"
argument_list
( "("
identifier "insertOpLocalNs"
) ")"
. "."
field_identifier "has_value"
argument_list
( "("
) ")"
) ")"
; ";"
} "}"
alias_declaration
using "using"
type_identifier "ReplicatedFastCountDeathTest"
= "="
type_descriptor
type_identifier "ReplicatedFastCountTest"
; ";"
comment "// TODO SERVER-120203: Re-enable this test."
comment "// DEATH_TEST_REGEX_F(ReplicatedFastCountDeathTest,"
comment "// CannotHaveNegativeCommittedSizeOrCoun"...
comment "// R\"(Invariant failure.*Expected fast c"...
comment "// non-negative)\") {"
comment "// boost::container::flat_map<UUID, CollectionSizeCount"...
comment "// changes[UUID::gen()] = CollectionSizeCount{-10, -1};"
comment "// _fastCountManager->commit(changes, boost::none);"
comment "// }"
} "}"
comment "// namespace"
} "}"
expression_statement
; ";"
comment "// namespace mongo"