]> git-server-git.apps.pok.os.sepia.ceph.com Git - rocksdb.git/commitdiff
kBadHeader wip-recycle1
authorSage Weil <sage@redhat.com>
Fri, 9 Oct 2015 16:02:39 +0000 (12:02 -0400)
committerSage Weil <sage@redhat.com>
Fri, 9 Oct 2015 16:02:39 +0000 (12:02 -0400)
db/log_reader.cc
db/log_reader.h

index 3c3fab3a792e4acb8bff7af171e3ff2b35ae64c2..2d6a355da2a519651eb643ac3ec545f3c150fb60 100644 (file)
@@ -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;
       }
index 2a65783d57f8d9d9a25859ab5cd86fb34e09fb5e..4c21c8160c3babcafa84f7c0b21b4fcb25ca398a 100644 (file)
@@ -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_".