From: Sage Weil Date: Fri, 9 Oct 2015 16:02:39 +0000 (-0400) Subject: kBadHeader X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=23b69dff57212ddf0d6bd1f62e65377b44d4d75a;p=rocksdb.git kBadHeader --- diff --git a/db/log_reader.cc b/db/log_reader.cc index 3c3fab3a..2d6a355d 100644 --- a/db/log_reader.cc +++ b/db/log_reader.cc @@ -143,6 +143,13 @@ bool Reader::ReadRecord(Slice* record, std::string* scratch, } break; + case kBadHeader: + if (wal_recovery_mode == WALRecoveryMode::kAbsoluteConsistency) { + // in clean shutdown we don't expect any error in the log files + ReportCorruption(buffer_.size(), "truncated header"); + } + // fall-thru + case kEof: if (in_fragmented_record) { if (wal_recovery_mode == WALRecoveryMode::kAbsoluteConsistency) { @@ -281,11 +288,10 @@ unsigned int Reader::ReadPhysicalRecord(Slice* result, // end of the file, which can be caused by the writer crashing in the // middle of writing the header. Unless explicitly requested we don't // considering this an error, just report EOF. - if (buffer_.size() && - wal_recovery_mode == WALRecoveryMode::kAbsoluteConsistency) { - // in clean shutdown we don't expect any error in the log files - ReportCorruption(buffer_.size(), "truncated header"); - } + if (buffer_.size()) { + buffer_.clear(); + return kBadHeader; + } buffer_.clear(); return kEof; } diff --git a/db/log_reader.h b/db/log_reader.h index 2a65783d..4c21c816 100644 --- a/db/log_reader.h +++ b/db/log_reader.h @@ -122,7 +122,9 @@ class Reader { // * The record has an invalid CRC (ReadPhysicalRecord reports a drop) // * The record is a 0-length record (No drop is reported) // * The record is below constructor's initial_offset (No drop is reported) - kBadRecord = kMaxRecordType + 2 + kBadRecord = kMaxRecordType + 2, + // Returned when we fail to read a valid header. + kBadHeader = kMaxRecordType + 3, }; // Skips all blocks that are completely before "initial_offset_".