diff --git a/db/db_impl.cc b/db/db_impl.cc index 05051032e..6124313b8 100644 --- a/db/db_impl.cc +++ b/db/db_impl.cc @@ -1186,7 +1186,7 @@ Status DBImpl::RecoverLogFiles(const std::vector& log_numbers, continue_replay_log && reader.ReadRecord(&record, &scratch, db_options_.wal_recovery_mode) && status.ok()) { - if (record.size() < 12) { + if (record.size() < WriteBatchInternal::kHeader) { reporter.Corruption(record.size(), Status::Corruption("log record too small")); continue; diff --git a/db/repair.cc b/db/repair.cc index 6aa72f792..1681fd585 100644 --- a/db/repair.cc +++ b/db/repair.cc @@ -265,7 +265,7 @@ class Repairer { mem->Ref(); int counter = 0; while (reader.ReadRecord(&record, &scratch)) { - if (record.size() < 12) { + if (record.size() < WriteBatchInternal::kHeader) { reporter.Corruption( record.size(), Status::Corruption("log record too small")); continue; diff --git a/db/transaction_log_impl.cc b/db/transaction_log_impl.cc index 624a3af99..8002d935f 100644 --- a/db/transaction_log_impl.cc +++ b/db/transaction_log_impl.cc @@ -107,7 +107,7 @@ void TransactionLogIteratorImpl::SeekToStartSequence( return; } while (RestrictedRead(&record, &scratch)) { - if (record.size() < 12) { + if (record.size() < WriteBatchInternal::kHeader) { reporter_.Corruption( record.size(), Status::Corruption("very small log record")); continue; @@ -167,7 +167,7 @@ void TransactionLogIteratorImpl::NextImpl(bool internal) { currentLogReader_->UnmarkEOF(); } while (RestrictedRead(&record, &scratch)) { - if (record.size() < 12) { + if (record.size() < WriteBatchInternal::kHeader) { reporter_.Corruption( record.size(), Status::Corruption("very small log record")); continue; diff --git a/db/wal_manager.cc b/db/wal_manager.cc index e1d911e6e..da4f33aab 100644 --- a/db/wal_manager.cc +++ b/db/wal_manager.cc @@ -455,7 +455,7 @@ Status WalManager::ReadFirstLine(const std::string& fname, if (reader.ReadRecord(&record, &scratch) && (status.ok() || !db_options_.paranoid_checks)) { - if (record.size() < 12) { + if (record.size() < WriteBatchInternal::kHeader) { reporter.Corruption(record.size(), Status::Corruption("log record too small")); // TODO read record's till the first no corrupt entry? diff --git a/db/write_batch.cc b/db/write_batch.cc index 3742ae694..4b8f87a5e 100644 --- a/db/write_batch.cc +++ b/db/write_batch.cc @@ -81,8 +81,6 @@ struct BatchContentClassifier : public WriteBatch::Handler { } // anon namespace -// WriteBatch header has an 8-byte sequence number followed by a 4-byte count. -static const size_t kHeader = 12; struct SavePoint { size_t size; // size of rep_ @@ -96,8 +94,8 @@ struct SavePoints { WriteBatch::WriteBatch(size_t reserved_bytes) : save_points_(nullptr), content_flags_(0), rep_() { - rep_.reserve((reserved_bytes > kHeader) ? reserved_bytes : kHeader); - rep_.resize(kHeader); + rep_.reserve((reserved_bytes > WriteBatchInternal::kHeader) ? reserved_bytes : WriteBatchInternal::kHeader); + rep_.resize(WriteBatchInternal::kHeader); } WriteBatch::WriteBatch(const std::string& rep) diff --git a/db/write_batch_internal.h b/db/write_batch_internal.h index 1e7f61e69..3987645ef 100644 --- a/db/write_batch_internal.h +++ b/db/write_batch_internal.h @@ -63,6 +63,10 @@ class ColumnFamilyMemTablesDefault : public ColumnFamilyMemTables { // WriteBatch that we don't want in the public WriteBatch interface. class WriteBatchInternal { public: + + // WriteBatch header has an 8-byte sequence number followed by a 4-byte count. + static const size_t kHeader = 12; + // WriteBatch methods with column_family_id instead of ColumnFamilyHandle* static void Put(WriteBatch* batch, uint32_t column_family_id, const Slice& key, const Slice& value); diff --git a/tools/ldb_cmd.cc b/tools/ldb_cmd.cc index be743955d..2f4c3e2ad 100644 --- a/tools/ldb_cmd.cc +++ b/tools/ldb_cmd.cc @@ -1576,7 +1576,7 @@ void DumpWalFile(std::string wal_file, bool print_header, bool print_values, } while (reader.ReadRecord(&record, &scratch)) { row.str(""); - if (record.size() < 12) { + if (record.size() < WriteBatchInternal::kHeader) { reporter.Corruption(record.size(), Status::Corruption("log record too small")); } else {