diff --git a/db/db_impl.cc b/db/db_impl.cc index cf8b17bb0..c5349ef0c 100644 --- a/db/db_impl.cc +++ b/db/db_impl.cc @@ -4337,11 +4337,6 @@ Status DBImpl::WriteImpl(const WriteOptions& write_options, } } - if (total_count == 0) { - write_thread_.ExitAsBatchGroupLeader(&w, last_writer, status); - return w.FinalStatus(); - } - const SequenceNumber current_sequence = last_sequence + 1; last_sequence += total_count; @@ -4360,7 +4355,7 @@ Status DBImpl::WriteImpl(const WriteOptions& write_options, PERF_TIMER_GUARD(write_wal_time); WriteBatch* merged_batch = nullptr; - if (write_group.size() == 1) { + if (write_group.size() == 1 && !write_group[0]->CallbackFailed()) { merged_batch = write_group[0]->batch; } else { // WAL needs all of the batches flattened into a single batch. @@ -4376,7 +4371,6 @@ Status DBImpl::WriteImpl(const WriteOptions& write_options, WriteBatchInternal::SetSequence(merged_batch, current_sequence); assert(WriteBatchInternal::Count(merged_batch) == total_count); - assert(WriteBatchInternal::ByteSize(merged_batch) == total_byte_size); Slice log_entry = WriteBatchInternal::Contents(merged_batch); status = logs_.back().writer->AddRecord(log_entry); diff --git a/utilities/transactions/transaction_test.cc b/utilities/transactions/transaction_test.cc index d51912b38..fec6c974f 100644 --- a/utilities/transactions/transaction_test.cc +++ b/utilities/transactions/transaction_test.cc @@ -62,6 +62,17 @@ class TransactionTest : public testing::Test { } }; +TEST_F(TransactionTest, DoubleEmptyWrite) { + WriteOptions write_options; + write_options.sync = true; + write_options.disableWAL = false; + + WriteBatch batch; + + ASSERT_OK(db->Write(write_options, &batch)); + ASSERT_OK(db->Write(write_options, &batch)); +} + TEST_F(TransactionTest, SuccessTest) { WriteOptions write_options; ReadOptions read_options;