rocksdb/HISTORY.md
Igor Canadi 58ca641d53 Make Log::Reader more robust
Summary:
This diff does two things:
(1) Log::Reader does not report a corruption when the last record in a log or manifest file is truncated (meaning that log writer died in the middle of the write). Inherited the code from LevelDB: https://code.google.com/p/leveldb/source/detail?r=269fc6ca9416129248db5ca57050cd5d39d177c8#
(2) Turn off mmap writes for all writes to log and manifest files

(2) is necessary because if we use mmap writes, the last record is not truncated, but is actually filled with zeros, making checksum fail. It is hard to recover from checksum failing.

Test Plan:
Added unit tests from LevelDB
Actually recovered a "corrupted" MANIFEST file.

Reviewers: dhruba, haobo

Reviewed By: haobo

CC: leveldb

Differential Revision: https://reviews.facebook.net/D16119
2014-02-28 13:19:47 -08:00

2.9 KiB

Rocksdb Change Log

Unreleased

Public API changes

  • Removed arena.h from public header files.
  • By default, checksums are verified on every read from database
  • Added is_manual_compaction to CompactionFilter::Context
  • Added "virtual void WaitForJoin() = 0" in class Env

New Features

  • If we find one truncated record at the end of the MANIFEST or WAL files, we will ignore it. We assume that writers of these records were interrupted and that we can safely ignore it.

2.7.0 (01/28/2014)

Public API changes

  • Renamed StackableDB::GetRawDB() to StackableDB::GetBaseDB().
  • Renamed WriteBatch::Data() const std::string& Data() const.
  • Renamed class TableStats to TableProperties.
  • Deleted class PrefixHashRepFactory. Please use NewHashSkipListRepFactory() instead.
  • Supported multi-threaded EnableFileDeletions() and DisableFileDeletions().
  • Added DB::GetOptions().
  • Added DB::GetDbIdentity().

New Features

  • Added BackupableDB
  • Implemented TailingIterator, a special type of iterator that doesn't create a snapshot (can be used to read newly inserted data) and is optimized for doing sequential reads.
  • Added property block for table, which allows (1) a table to store its metadata and (2) end user to collect and store properties they are interested in.
  • Enabled caching index and filter block in block cache (turned off by default).
  • Supported error report when doing manual compaction.
  • Supported additional Linux platform flavors and Mac OS.
  • Put with SliceParts - Variant of Put() that gathers output like writev(2)
  • Bug fixes and code refactor for compatibility with upcoming Column Family feature.

Performance Improvements

  • Huge benchmark performance improvements by multiple efforts. For example, increase in readonly QPS from about 530k in 2.6 release to 1.1 million in 2.7 [1]
  • Speeding up a way RocksDB deleted obsolete files - no longer listing the whole directory under a lock -- decrease in p99
  • Use raw pointer instead of shared pointer for statistics: 5b825d -- huge increase in performance -- shared pointers are slow
  • Optimized locking for Get() -- 1fdb3f -- 1.5x QPS increase for some workloads
  • Cache speedup - e8d40c3
  • Implemented autovector, which allocates first N elements on stack. Most of vectors in RocksDB are small. Also, we never want to allocate heap objects while holding a mutex. -- c01676e4
  • Lots of efforts to move malloc, memcpy and IO outside of locks