summaryrefslogtreecommitdiff
path: root/src/mongo/db/storage/record_store_test_updaterecord.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/storage/record_store_test_updaterecord.cpp')
-rw-r--r--src/mongo/db/storage/record_store_test_updaterecord.cpp54
1 files changed, 18 insertions, 36 deletions
diff --git a/src/mongo/db/storage/record_store_test_updaterecord.cpp b/src/mongo/db/storage/record_store_test_updaterecord.cpp
index cd27acf9c69..0d7c9433503 100644
--- a/src/mongo/db/storage/record_store_test_updaterecord.cpp
+++ b/src/mongo/db/storage/record_store_test_updaterecord.cpp
@@ -77,19 +77,10 @@ TEST(RecordStoreTestHarness, UpdateRecord) {
unique_ptr<OperationContext> opCtx(harnessHelper->newOperationContext());
{
WriteUnitOfWork uow(opCtx.get());
- Status res =
+ StatusWith<RecordId> res =
rs->updateRecord(opCtx.get(), loc, data.c_str(), data.size() + 1, false, NULL);
-
- if (ErrorCodes::NeedsDocumentMove == res) {
- StatusWith<RecordId> newLocation =
- rs->insertRecord(opCtx.get(), data.c_str(), data.size() + 1, false);
- ASSERT_OK(newLocation.getStatus());
- rs->deleteRecord(opCtx.get(), loc);
- loc = newLocation.getValue();
- } else {
- ASSERT_OK(res);
- }
-
+ ASSERT_OK(res.getStatus());
+ loc = res.getValue();
uow.commit();
}
}
@@ -145,19 +136,10 @@ TEST(RecordStoreTestHarness, UpdateMultipleRecords) {
string data = ss.str();
WriteUnitOfWork uow(opCtx.get());
- Status res =
+ StatusWith<RecordId> res =
rs->updateRecord(opCtx.get(), locs[i], data.c_str(), data.size() + 1, false, NULL);
-
- if (ErrorCodes::NeedsDocumentMove == res) {
- StatusWith<RecordId> newLocation =
- rs->insertRecord(opCtx.get(), data.c_str(), data.size() + 1, false);
- ASSERT_OK(newLocation.getStatus());
- rs->deleteRecord(opCtx.get(), locs[i]);
- locs[i] = newLocation.getValue();
- } else {
- ASSERT_OK(res);
- }
-
+ ASSERT_OK(res.getStatus());
+ locs[i] = res.getValue();
uow.commit();
}
}
@@ -212,21 +194,21 @@ TEST(RecordStoreTestHarness, UpdateRecordWithMoveNotifier) {
UpdateNotifierSpy umn(opCtx.get(), loc, oldData.c_str(), oldData.size());
WriteUnitOfWork uow(opCtx.get());
- Status res = rs->updateRecord(
+ StatusWith<RecordId> res = rs->updateRecord(
opCtx.get(), loc, newData.c_str(), newData.size() + 1, false, &umn);
-
- if (ErrorCodes::NeedsDocumentMove == res) {
- StatusWith<RecordId> newLocation =
- rs->insertRecord(opCtx.get(), newData.c_str(), newData.size() + 1, false);
- ASSERT_OK(newLocation.getStatus());
- rs->deleteRecord(opCtx.get(), loc);
- loc = newLocation.getValue();
- ASSERT_EQUALS(0, umn.numInPlaceCallbacks());
- } else {
- ASSERT_OK(res);
+ ASSERT_OK(res.getStatus());
+ // UpdateNotifier::recordStoreGoingToMove() called only if
+ // the RecordId for the record changes
+ if (loc == res.getValue()) {
+ ASSERT_EQUALS(0, umn.numMoveCallbacks());
+ // Only MMAP v1 is required to use the UpdateNotifier for in-place updates,
+ // so the number of callbacks is expected to be 0 for non-MMAP storage engines.
ASSERT_GTE(1, umn.numInPlaceCallbacks());
+ } else {
+ ASSERT_EQUALS(1, umn.numMoveCallbacks());
+ ASSERT_EQUALS(0, umn.numInPlaceCallbacks());
}
-
+ loc = res.getValue();
uow.commit();
}
}