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.cpp304
1 files changed, 143 insertions, 161 deletions
diff --git a/src/mongo/db/storage/record_store_test_updaterecord.cpp b/src/mongo/db/storage/record_store_test_updaterecord.cpp
index 260ce0e7e9e..0d7c9433503 100644
--- a/src/mongo/db/storage/record_store_test_updaterecord.cpp
+++ b/src/mongo/db/storage/record_store_test_updaterecord.cpp
@@ -43,202 +43,184 @@ using std::stringstream;
namespace mongo {
- // Insert a record and try to update it.
- TEST( RecordStoreTestHarness, UpdateRecord ) {
- unique_ptr<HarnessHelper> harnessHelper( newHarnessHelper() );
- unique_ptr<RecordStore> rs( harnessHelper->newNonCappedRecordStore() );
+// Insert a record and try to update it.
+TEST(RecordStoreTestHarness, UpdateRecord) {
+ unique_ptr<HarnessHelper> harnessHelper(newHarnessHelper());
+ unique_ptr<RecordStore> rs(harnessHelper->newNonCappedRecordStore());
+
+ {
+ unique_ptr<OperationContext> opCtx(harnessHelper->newOperationContext());
+ ASSERT_EQUALS(0, rs->numRecords(opCtx.get()));
+ }
+ string data = "my record";
+ RecordId loc;
+ {
+ unique_ptr<OperationContext> opCtx(harnessHelper->newOperationContext());
{
- unique_ptr<OperationContext> opCtx( harnessHelper->newOperationContext() );
- ASSERT_EQUALS( 0, rs->numRecords( opCtx.get() ) );
+ WriteUnitOfWork uow(opCtx.get());
+ StatusWith<RecordId> res =
+ rs->insertRecord(opCtx.get(), data.c_str(), data.size() + 1, false);
+ ASSERT_OK(res.getStatus());
+ loc = res.getValue();
+ uow.commit();
}
+ }
- string data = "my record";
- RecordId loc;
- {
- unique_ptr<OperationContext> opCtx( harnessHelper->newOperationContext() );
- {
- WriteUnitOfWork uow( opCtx.get() );
- StatusWith<RecordId> res = rs->insertRecord( opCtx.get(),
- data.c_str(),
- data.size() + 1,
- false );
- ASSERT_OK( res.getStatus() );
- loc = res.getValue();
- uow.commit();
- }
- }
+ {
+ unique_ptr<OperationContext> opCtx(harnessHelper->newOperationContext());
+ ASSERT_EQUALS(1, rs->numRecords(opCtx.get()));
+ }
+ data = "updated record-";
+ {
+ unique_ptr<OperationContext> opCtx(harnessHelper->newOperationContext());
{
- unique_ptr<OperationContext> opCtx( harnessHelper->newOperationContext() );
- ASSERT_EQUALS( 1, rs->numRecords( opCtx.get() ) );
- }
-
- data = "updated record-";
- {
- unique_ptr<OperationContext> opCtx( harnessHelper->newOperationContext() );
- {
- WriteUnitOfWork uow( opCtx.get() );
- StatusWith<RecordId> res = rs->updateRecord( opCtx.get(),
- loc,
- data.c_str(),
- data.size() + 1,
- false,
- NULL );
- ASSERT_OK( res.getStatus() );
- loc = res.getValue();
- uow.commit();
- }
+ WriteUnitOfWork uow(opCtx.get());
+ StatusWith<RecordId> res =
+ rs->updateRecord(opCtx.get(), loc, data.c_str(), data.size() + 1, false, NULL);
+ ASSERT_OK(res.getStatus());
+ loc = res.getValue();
+ uow.commit();
}
+ }
+ {
+ unique_ptr<OperationContext> opCtx(harnessHelper->newOperationContext());
{
- unique_ptr<OperationContext> opCtx( harnessHelper->newOperationContext() );
- {
- RecordData record = rs->dataFor( opCtx.get(), loc );
- ASSERT_EQUALS( data.size() + 1, static_cast<size_t>( record.size() ) );
- ASSERT_EQUALS( data, record.data() );
- }
+ RecordData record = rs->dataFor(opCtx.get(), loc);
+ ASSERT_EQUALS(data.size() + 1, static_cast<size_t>(record.size()));
+ ASSERT_EQUALS(data, record.data());
}
}
+}
+
+// Insert multiple records and try to update them.
+TEST(RecordStoreTestHarness, UpdateMultipleRecords) {
+ unique_ptr<HarnessHelper> harnessHelper(newHarnessHelper());
+ unique_ptr<RecordStore> rs(harnessHelper->newNonCappedRecordStore());
- // Insert multiple records and try to update them.
- TEST( RecordStoreTestHarness, UpdateMultipleRecords ) {
- unique_ptr<HarnessHelper> harnessHelper( newHarnessHelper() );
- unique_ptr<RecordStore> rs( harnessHelper->newNonCappedRecordStore() );
+ {
+ unique_ptr<OperationContext> opCtx(harnessHelper->newOperationContext());
+ ASSERT_EQUALS(0, rs->numRecords(opCtx.get()));
+ }
+ const int nToInsert = 10;
+ RecordId locs[nToInsert];
+ for (int i = 0; i < nToInsert; i++) {
+ unique_ptr<OperationContext> opCtx(harnessHelper->newOperationContext());
{
- unique_ptr<OperationContext> opCtx( harnessHelper->newOperationContext() );
- ASSERT_EQUALS( 0, rs->numRecords( opCtx.get() ) );
+ stringstream ss;
+ ss << "record " << i;
+ string data = ss.str();
+
+ WriteUnitOfWork uow(opCtx.get());
+ StatusWith<RecordId> res =
+ rs->insertRecord(opCtx.get(), data.c_str(), data.size() + 1, false);
+ ASSERT_OK(res.getStatus());
+ locs[i] = res.getValue();
+ uow.commit();
}
+ }
- const int nToInsert = 10;
- RecordId locs[nToInsert];
- for ( int i = 0; i < nToInsert; i++ ) {
- unique_ptr<OperationContext> opCtx( harnessHelper->newOperationContext() );
- {
- stringstream ss;
- ss << "record " << i;
- string data = ss.str();
-
- WriteUnitOfWork uow( opCtx.get() );
- StatusWith<RecordId> res = rs->insertRecord( opCtx.get(),
- data.c_str(),
- data.size() + 1,
- false );
- ASSERT_OK( res.getStatus() );
- locs[i] = res.getValue();
- uow.commit();
- }
- }
+ {
+ unique_ptr<OperationContext> opCtx(harnessHelper->newOperationContext());
+ ASSERT_EQUALS(nToInsert, rs->numRecords(opCtx.get()));
+ }
+ for (int i = 0; i < nToInsert; i++) {
+ unique_ptr<OperationContext> opCtx(harnessHelper->newOperationContext());
{
- unique_ptr<OperationContext> opCtx( harnessHelper->newOperationContext() );
- ASSERT_EQUALS( nToInsert, rs->numRecords( opCtx.get() ) );
- }
-
- for ( int i = 0; i < nToInsert; i++ ) {
- unique_ptr<OperationContext> opCtx( harnessHelper->newOperationContext() );
- {
- stringstream ss;
- ss << "update record-" << i;
- string data = ss.str();
-
- WriteUnitOfWork uow( opCtx.get() );
- StatusWith<RecordId> res = rs->updateRecord( opCtx.get(),
- locs[i],
- data.c_str(),
- data.size() + 1,
- false,
- NULL );
- ASSERT_OK( res.getStatus() );
- locs[i] = res.getValue();
- uow.commit();
- }
+ stringstream ss;
+ ss << "update record-" << i;
+ string data = ss.str();
+
+ WriteUnitOfWork uow(opCtx.get());
+ StatusWith<RecordId> res =
+ rs->updateRecord(opCtx.get(), locs[i], data.c_str(), data.size() + 1, false, NULL);
+ ASSERT_OK(res.getStatus());
+ locs[i] = res.getValue();
+ uow.commit();
}
+ }
- for ( int i = 0; i < nToInsert; i++ ) {
- unique_ptr<OperationContext> opCtx( harnessHelper->newOperationContext() );
- {
- stringstream ss;
- ss << "update record-" << i;
- string data = ss.str();
+ for (int i = 0; i < nToInsert; i++) {
+ unique_ptr<OperationContext> opCtx(harnessHelper->newOperationContext());
+ {
+ stringstream ss;
+ ss << "update record-" << i;
+ string data = ss.str();
- RecordData record = rs->dataFor( opCtx.get(), locs[i] );
- ASSERT_EQUALS( data.size() + 1, static_cast<size_t>( record.size() ) );
- ASSERT_EQUALS( data, record.data() );
- }
+ RecordData record = rs->dataFor(opCtx.get(), locs[i]);
+ ASSERT_EQUALS(data.size() + 1, static_cast<size_t>(record.size()));
+ ASSERT_EQUALS(data, record.data());
}
}
+}
- // Insert a record, try to update it, and examine how the UpdateNotifier is called.
- TEST( RecordStoreTestHarness, UpdateRecordWithMoveNotifier ) {
- unique_ptr<HarnessHelper> harnessHelper( newHarnessHelper() );
- unique_ptr<RecordStore> rs( harnessHelper->newNonCappedRecordStore() );
+// Insert a record, try to update it, and examine how the UpdateNotifier is called.
+TEST(RecordStoreTestHarness, UpdateRecordWithMoveNotifier) {
+ unique_ptr<HarnessHelper> harnessHelper(newHarnessHelper());
+ unique_ptr<RecordStore> rs(harnessHelper->newNonCappedRecordStore());
- {
- unique_ptr<OperationContext> opCtx( harnessHelper->newOperationContext() );
- ASSERT_EQUALS( 0, rs->numRecords( opCtx.get() ) );
- }
+ {
+ unique_ptr<OperationContext> opCtx(harnessHelper->newOperationContext());
+ ASSERT_EQUALS(0, rs->numRecords(opCtx.get()));
+ }
- string oldData = "my record";
- RecordId loc;
+ string oldData = "my record";
+ RecordId loc;
+ {
+ unique_ptr<OperationContext> opCtx(harnessHelper->newOperationContext());
{
- unique_ptr<OperationContext> opCtx( harnessHelper->newOperationContext() );
- {
- WriteUnitOfWork uow( opCtx.get() );
- StatusWith<RecordId> res = rs->insertRecord( opCtx.get(),
- oldData.c_str(),
- oldData.size() + 1,
- false );
- ASSERT_OK( res.getStatus() );
- loc = res.getValue();
- uow.commit();
- }
+ WriteUnitOfWork uow(opCtx.get());
+ StatusWith<RecordId> res =
+ rs->insertRecord(opCtx.get(), oldData.c_str(), oldData.size() + 1, false);
+ ASSERT_OK(res.getStatus());
+ loc = res.getValue();
+ uow.commit();
}
+ }
- {
- unique_ptr<OperationContext> opCtx( harnessHelper->newOperationContext() );
- ASSERT_EQUALS( 1, rs->numRecords( opCtx.get() ) );
- }
+ {
+ unique_ptr<OperationContext> opCtx(harnessHelper->newOperationContext());
+ ASSERT_EQUALS(1, rs->numRecords(opCtx.get()));
+ }
- string newData = "my updated record--";
+ string newData = "my updated record--";
+ {
+ unique_ptr<OperationContext> opCtx(harnessHelper->newOperationContext());
{
- unique_ptr<OperationContext> opCtx( harnessHelper->newOperationContext() );
- {
- UpdateNotifierSpy umn( opCtx.get(), loc, oldData.c_str(), oldData.size() );
-
- WriteUnitOfWork uow( opCtx.get() );
- StatusWith<RecordId> res = rs->updateRecord( opCtx.get(),
- loc,
- newData.c_str(),
- newData.size() + 1,
- false,
- &umn );
- 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();
+ UpdateNotifierSpy umn(opCtx.get(), loc, oldData.c_str(), oldData.size());
+
+ WriteUnitOfWork uow(opCtx.get());
+ StatusWith<RecordId> res = rs->updateRecord(
+ opCtx.get(), loc, newData.c_str(), newData.size() + 1, false, &umn);
+ 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();
}
+ }
+ {
+ unique_ptr<OperationContext> opCtx(harnessHelper->newOperationContext());
{
- unique_ptr<OperationContext> opCtx( harnessHelper->newOperationContext() );
- {
- RecordData record = rs->dataFor( opCtx.get(), loc );
- ASSERT_EQUALS( newData.size() + 1, static_cast<size_t>( record.size() ) );
- ASSERT_EQUALS( newData, record.data() );
- }
+ RecordData record = rs->dataFor(opCtx.get(), loc);
+ ASSERT_EQUALS(newData.size() + 1, static_cast<size_t>(record.size()));
+ ASSERT_EQUALS(newData, record.data());
}
}
+}
-} // namespace mongo
+} // namespace mongo