summaryrefslogtreecommitdiff
path: root/db/log_reader.cc
diff options
context:
space:
mode:
authorMike Wiacek <mjwiacek@google.com>2015-08-11 15:36:45 -0700
committerChris Mumford <cmumford@chromium.org>2015-12-09 10:34:57 -0800
commitce45404bba80d6f85057b596cd716d6c4759dcad (patch)
treeb504aee6ceee8d84cda31942f770c9b2b902594f /db/log_reader.cc
parentb9afa1f2e79e928e08f11e907e8688b6d89cfd2f (diff)
downloadleveldb-ce45404bba80d6f85057b596cd716d6c4759dcad.tar.gz
Suppress error reporting after seeking but before a valid First or Full record is encountered.
Fix a spelling mistake.
Diffstat (limited to 'db/log_reader.cc')
-rw-r--r--db/log_reader.cc14
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) {