diff --git a/db/db_impl.cc b/db/db_impl.cc index a2798b8bc..f202d1fa6 100644 --- a/db/db_impl.cc +++ b/db/db_impl.cc @@ -1721,7 +1721,7 @@ Status DBImpl::RecoverLogFiles(const std::vector& log_numbers, flushed = true; cfd->CreateNewMemtable(*cfd->GetLatestMutableCFOptions(), - *next_sequence); + versions_->LastSequence()); } } diff --git a/utilities/transactions/optimistic_transaction_test.cc b/utilities/transactions/optimistic_transaction_test.cc index fd90f2423..0b540471d 100644 --- a/utilities/transactions/optimistic_transaction_test.cc +++ b/utilities/transactions/optimistic_transaction_test.cc @@ -34,14 +34,24 @@ class OptimisticTransactionTest : public testing::Test { dbname = test::TmpDir() + "/optimistic_transaction_testdb"; DestroyDB(dbname, options); - Status s = OptimisticTransactionDB::Open(options, dbname, &txn_db); - assert(s.ok()); - db = txn_db->GetBaseDB(); + Open(); } ~OptimisticTransactionTest() { delete txn_db; DestroyDB(dbname, options); } + + void Reopen() { + delete txn_db; + Open(); + } + +private: + void Open() { + Status s = OptimisticTransactionDB::Open(options, dbname, &txn_db); + assert(s.ok()); + db = txn_db->GetBaseDB(); + } }; TEST_F(OptimisticTransactionTest, SuccessTest) { @@ -1338,6 +1348,33 @@ TEST_F(OptimisticTransactionTest, OptimisticTransactionStressTest) { ASSERT_OK(s); } +TEST_F(OptimisticTransactionTest, SequenceNumberAfterRecoverTest) { + WriteOptions write_options; + OptimisticTransactionOptions transaction_options; + + Transaction* transaction(txn_db->BeginTransaction(write_options, transaction_options)); + Status s = transaction->Put("foo", "val"); + ASSERT_OK(s); + s = transaction->Put("foo2", "val"); + ASSERT_OK(s); + s = transaction->Put("foo3", "val"); + ASSERT_OK(s); + s = transaction->Commit(); + ASSERT_OK(s); + delete transaction; + + Reopen(); + transaction = txn_db->BeginTransaction(write_options, transaction_options); + s = transaction->Put("bar", "val"); + ASSERT_OK(s); + s = transaction->Put("bar2", "val"); + ASSERT_OK(s); + s = transaction->Commit(); + ASSERT_OK(s); + + delete transaction; +} + } // namespace rocksdb int main(int argc, char** argv) {