diff options
Diffstat (limited to 'db/log_reader.cc')
-rw-r--r-- | db/log_reader.cc | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/db/log_reader.cc b/db/log_reader.cc index e44b66c..6d4a5b2 100644 --- a/db/log_reader.cc +++ b/db/log_reader.cc @@ -25,7 +25,8 @@ Reader::Reader(SequentialFile* file, Reporter* reporter, bool checksum, eof_(false), last_record_offset_(0), end_of_buffer_offset_(0), - initial_offset_(initial_offset) { + initial_offset_(initial_offset), + resyncing_(initial_offset > 0) { } Reader::~Reader() { @@ -74,6 +75,17 @@ bool Reader::ReadRecord(Slice* record, std::string* scratch) { while (true) { uint64_t physical_record_offset = end_of_buffer_offset_ - buffer_.size(); const unsigned int record_type = ReadPhysicalRecord(&fragment); + if (resyncing_) { + if (record_type == kMiddleType) { + continue; + } else if (record_type == kLastType) { + resyncing_ = false; + continue; + } else { + resyncing_ = false; + } + } + switch (record_type) { case kFullType: if (in_fragmented_record) { |