diff --git a/db/db_wal_test.cc b/db/db_wal_test.cc index 91070e298b6..1ff16ee9a4f 100644 --- a/db/db_wal_test.cc +++ b/db/db_wal_test.cc @@ -814,6 +814,7 @@ TEST_F(DBWALTest, WALWithChecksumHandoff) { writeOpt.disableWAL = false; // Data is persisted in the WAL ASSERT_OK(dbfull()->Put(writeOpt, handles_[1], "zoo", "v3")); + ASSERT_OK(dbfull()->SyncWAL()); // The hash does not match, write fails fault_fs->SetChecksumHandoffFuncType(ChecksumType::kxxHash); writeOpt.disableWAL = false; diff --git a/db/error_handler_fs_test.cc b/db/error_handler_fs_test.cc index 2d33a7a694f..ce351e3695d 100644 --- a/db/error_handler_fs_test.cc +++ b/db/error_handler_fs_test.cc @@ -1238,6 +1238,7 @@ TEST_F(DBErrorHandlingFSTest, AutoRecoverFlushError) { ERROR_HANDLER_AUTORESUME_RETRY_TOTAL_COUNT)); ASSERT_EQ(0, options.statistics->getAndResetTickerCount( ERROR_HANDLER_AUTORESUME_SUCCESS_COUNT)); + ASSERT_OK(dbfull()->SyncWAL()); Reopen(options); ASSERT_EQ("val", Get(Key(0))); diff --git a/db/fault_injection_test.cc b/db/fault_injection_test.cc index 17b4c034283..7b93326ca8b 100644 --- a/db/fault_injection_test.cc +++ b/db/fault_injection_test.cc @@ -578,8 +578,10 @@ TEST_P(FaultInjectionTest, NoDuplicateTrailingEntries) { fault_fs->DisableWriteErrorInjection(); - // Closing the log writer will cause WritableFileWriter::Close() and flush - // remaining data from its buffer to underlying file. + // Flush remaining data from its buffer to underlying file. + ASSERT_OK(log_writer->file()->writable_file()->Sync(IOOptions(), + nullptr /* dbg */)); + // Closing the log writer will cause WritableFileWriter::Close() log_writer.reset(); { diff --git a/utilities/cache_dump_load_impl.h b/utilities/cache_dump_load_impl.h index 4af285a3a22..0034a14538d 100644 --- a/utilities/cache_dump_load_impl.h +++ b/utilities/cache_dump_load_impl.h @@ -192,8 +192,12 @@ class ToFileCacheDumpWriter : public CacheDumpWriter { // Reset the writer IOStatus Close() override { + IOStatus io_s; + if (file_writer_ != nullptr && !file_writer_->seen_error()) { + io_s = file_writer_->Sync(IOOptions(), false /* use_fsync */); + } file_writer_.reset(); - return IOStatus::OK(); + return io_s; } private: diff --git a/utilities/fault_injection_fs.cc b/utilities/fault_injection_fs.cc index 1e2a06554cc..25ccbab173d 100644 --- a/utilities/fault_injection_fs.cc +++ b/utilities/fault_injection_fs.cc @@ -255,15 +255,10 @@ IOStatus TestFSWritableFile::Close(const IOOptions& options, } writable_file_opened_ = false; IOStatus io_s; - if (!target_->use_direct_io()) { - io_s = target_->Append(state_.buffer_, options, dbg); - } - if (io_s.ok()) { - state_.buffer_.resize(0); - // Ignore sync errors - target_->Sync(options, dbg).PermitUncheckedError(); - io_s = target_->Close(options, dbg); - } + // Drop buffered data that was never synced because close is not a syncing + // mechanism in POSIX file semantics. + state_.buffer_.resize(0); + io_s = target_->Close(options, dbg); if (io_s.ok()) { IOStatus in_s = fs_->InjectMetadataWriteError(); if (!in_s.ok()) { diff --git a/utilities/transactions/transaction_test.cc b/utilities/transactions/transaction_test.cc index b3da4807d16..a18af717f10 100644 --- a/utilities/transactions/transaction_test.cc +++ b/utilities/transactions/transaction_test.cc @@ -334,6 +334,7 @@ TEST_P(TransactionTest, SwitchMemtableDuringPrepareAndCommit_WC) { ASSERT_EQ("value", value); } + ASSERT_OK(dbimpl->SyncWAL()); delete db; db = nullptr; Status s;