Allow Flush(sync=true) not supported in DB::Open() and db_stress (#10784)

Summary:
**Context:**
https://github.com/facebook/rocksdb/pull/10698 made `Flush(sync=true)` required for` DB::Open()` (to pass the original but now deleted assertion `impl->TEST_WALBufferIsEmpty()` under `manual_wal_flush=true`, see https://github.com/facebook/rocksdb/pull/10698 summary for more ) as well as db_stress to pass.

However RocksDB users may not implement SyncWAL() (used inFlush(sync=true)). Therefore we replace such in DB::Open and db_stress in this PR and align with https://github.com/facebook/rocksdb/blob/main/db/db_impl/db_impl_open.cc#L1883-L1887 and https://github.com/facebook/rocksdb/blob/main/db_stress_tool/db_stress_test_base.cc#L847-L849

Pull Request resolved: https://github.com/facebook/rocksdb/pull/10784

Test Plan: make check

Reviewed By: anand1976

Differential Revision: D40193354

Pulled By: anand1976

fbshipit-source-id: e80d53880799ae01bdd717641d07997d3bfe2b54
main
Hui Xiao 2 years ago committed by Facebook GitHub Bot
parent ebf8c454fd
commit f6a0065d54
  1. 10
      db/db_impl/db_impl_open.cc
  2. 2
      db_stress_tool/db_stress_test_base.cc

@ -2080,9 +2080,15 @@ Status DBImpl::Open(const DBOptions& db_options, const std::string& dbname,
impl); impl);
LogFlush(impl->immutable_db_options_.info_log); LogFlush(impl->immutable_db_options_.info_log);
if (!impl->WALBufferIsEmpty()) { if (!impl->WALBufferIsEmpty()) {
impl->FlushWAL(true /* sync */); s = impl->FlushWAL(false);
if (s.ok()) {
// Sync is needed otherwise WAL buffered data might get lost after a
// power reset.
log::Writer* log_writer = impl->logs_.back().writer;
s = log_writer->file()->Sync(impl->immutable_db_options_.use_fsync);
}
} }
if (!persist_options_status.ok()) { if (s.ok() && !persist_options_status.ok()) {
s = Status::IOError( s = Status::IOError(
"DB::Open() failed --- Unable to persist Options file", "DB::Open() failed --- Unable to persist Options file",
persist_options_status.ToString()); persist_options_status.ToString());

@ -836,7 +836,7 @@ void StressTest::OperateDb(ThreadState* thread) {
if (thread->rand.OneInOpt(FLAGS_manual_wal_flush_one_in)) { if (thread->rand.OneInOpt(FLAGS_manual_wal_flush_one_in)) {
bool sync = thread->rand.OneIn(2) ? true : false; bool sync = thread->rand.OneIn(2) ? true : false;
Status s = db_->FlushWAL(sync); Status s = db_->FlushWAL(sync);
if (!s.ok()) { if (!s.ok() && !(sync && s.IsNotSupported())) {
fprintf(stderr, "FlushWAL(sync=%s) failed: %s\n", fprintf(stderr, "FlushWAL(sync=%s) failed: %s\n",
(sync ? "true" : "false"), s.ToString().c_str()); (sync ? "true" : "false"), s.ToString().c_str());
} }

Loading…
Cancel
Save