mirror of https://github.com/facebook/rocksdb.git
Fix rare WAL handling crash (#12899)
Summary: A crash test failure in log sync in DBImpl::WriteToWAL is due to a missed case in https://github.com/facebook/rocksdb/issues/12734. Just need to apply similar logic from DBImpl::SyncWalImpl to check for an already closed WAL (nullptr writer). This is extremely rare because it only comes from failed Sync on a closed WAL. Pull Request resolved: https://github.com/facebook/rocksdb/pull/12899 Test Plan: watch crash test Reviewed By: cbi42 Differential Revision: D60481652 Pulled By: pdillinger fbshipit-source-id: 4a176bb6a53dcf077f88344710a110c2f946c386
This commit is contained in:
parent
55877d8893
commit
2595476541
|
@ -1484,12 +1484,17 @@ IOStatus DBImpl::WriteToWAL(const WriteThread::WriteGroup& write_group,
|
||||||
if (!io_s.ok()) {
|
if (!io_s.ok()) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
io_s = log.writer->file()->Sync(opts, immutable_db_options_.use_fsync);
|
// If last sync failed on a later WAL, this could be a fully synced
|
||||||
|
// and closed WAL that just needs to be recorded as synced in the
|
||||||
|
// manifest.
|
||||||
|
if (auto* f = log.writer->file()) {
|
||||||
|
io_s = f->Sync(opts, immutable_db_options_.use_fsync);
|
||||||
if (!io_s.ok()) {
|
if (!io_s.ok()) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (UNLIKELY(needs_locking)) {
|
if (UNLIKELY(needs_locking)) {
|
||||||
log_write_mutex_.Unlock();
|
log_write_mutex_.Unlock();
|
||||||
|
|
Loading…
Reference in New Issue