Skip to content
A library that provides an embeddable, persistent key-value store for fast storage.
Branch: master
Clone or download
jsteemann and facebook-github-bot refactor SavePoints (#5192)
Summary:
Savepoints are assumed to be used in a stack-wise fashion (only
the top element should be used), so they were stored by `WriteBatch`
in a member variable `save_points` using an std::stack.

Conceptually this is fine, but the implementation had a few issues:
- the `save_points_` instance variable was a plain pointer to a heap-
  allocated `SavePoints` struct. The destructor of `WriteBatch` simply
  deletes this pointer. However, the copy constructor of WriteBatch
  just copied that pointer, meaning that copying a WriteBatch with
  active savepoints will very likely have crashed before. Now a proper
  copy of the savepoints is made in the copy constructor, and not just
  a copy of the pointer
- `save_points_` was an std::stack, which defaults to `std::deque` for
  the underlying container. A deque is a bit over the top here, as we
  only need access to the most recent savepoint (i.e. stack.top()) but
  never any elements at the front. std::deque is rather expensive to
  initialize in common environments. For example, the STL implementation
  shipped with GNU g++ will perform a heap allocation of more than 500
  bytes to create an empty deque object. Although the `save_points_`
  container is created lazily by RocksDB, moving from a deque to a plain
  `std::vector` is much more memory-efficient. So `save_points_` is now
  a vector.
- `save_points_` was changed from a plain pointer to an `std::unique_ptr`,
  making ownership more explicit.
Pull Request resolved: #5192

Differential Revision: D15024074

Pulled By: maysamyabandeh

fbshipit-source-id: 5b128786d3789cde94e46465c9e91badd07a25d7
Latest commit de76909 Apr 20, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
buckifier Add copyright headers per FB open-source checkup tool. (#5199) Apr 18, 2019
build_tools Add copyright headers per FB open-source checkup tool. (#5199) Apr 18, 2019
cache
cmake Make FindZLIB consistent with official definitions (#4823) Jan 2, 2019
coverage Add copyright headers per FB open-source checkup tool. (#5199) Apr 18, 2019
db refactor SavePoints (#5192) Apr 20, 2019
docs Blog post for format_version=4 Mar 9, 2019
env
examples Support for single-primary, multi-secondary instances (#4899) Mar 26, 2019
hdfs Add copyright headers per FB open-source checkup tool. (#5199) Apr 18, 2019
include/rocksdb refactor SavePoints (#5192) Apr 20, 2019
java Add copyright headers per FB open-source checkup tool. (#5199) Apr 18, 2019
memtable WriteBufferManager's dummy entry size to block cache 1MB -> 256KB (#5175 Apr 16, 2019
monitoring Still implement StatisticsImpl::measureTime() (#5181) Apr 12, 2019
options Change OptimizeForPointLookup() and OptimizeForSmallDb() (#5165) Apr 11, 2019
port
table Remove a couple of non-public includes from public header file (#5219) Apr 19, 2019
third-party/gtest-1.7.0/fused-src/gtest remove bundled but unused fbson library (#5108) Mar 26, 2019
tools Add copyright headers per FB open-source checkup tool. (#5199) Apr 18, 2019
util refactor SavePoints (#5192) Apr 20, 2019
utilities refactor SavePoints (#5192) Apr 20, 2019
.clang-format A script that automatically reformat affected lines Jan 14, 2014
.gitignore RocksDB Trace Analyzer (#4091) Aug 13, 2018
.lgtm.yml Create lgtm.yml for LGTM.com C/C++ analysis (#4058) Jun 26, 2018
.travis.yml Fix printf formatting on MacOS (#4533) Oct 19, 2018
AUTHORS Update RocksDB Authors File Oct 18, 2017
CMakeLists.txt Support for single-primary, multi-secondary instances (#4899) Mar 26, 2019
CODE_OF_CONDUCT.md Add Code of Conduct Dec 6, 2017
CONTRIBUTING.md Add Code of Conduct Dec 6, 2017
COPYING Add GPLv2 as an alternative license. Apr 28, 2017
DEFAULT_OPTIONS_HISTORY.md options.delayed_write_rate use the rate of rate_limiter by default. May 24, 2017
DUMP_FORMAT.md First version of rocksdb_dump and rocksdb_undump. Jun 19, 2015
HISTORY.md Fix history to not include some features in 6.1 (#5224) Apr 19, 2019
INSTALL.md Update the version of the dependencies used by the RocksJava static b… Dec 19, 2018
LANGUAGE-BINDINGS.md LANGUAGE-BINDINGS.md: mention python-rocksdb Mar 20, 2019
LICENSE.Apache Change RocksDB License Jul 15, 2017
LICENSE.leveldb Add back the LevelDB license file Jul 17, 2017
Makefile Support for single-primary, multi-secondary instances (#4899) Mar 26, 2019
README.md
ROCKSDB_LITE.md Fix some typos in comments and docs. Mar 8, 2018
TARGETS Support for single-primary, multi-secondary instances (#4899) Mar 26, 2019
USERS.md Adding IOTA Foundation to USERS.MD (#4436) Oct 2, 2018
Vagrantfile
WINDOWS_PORT.md #5145 , rename port/dirent.h to port/port_dirent.h to avoid compile e… Apr 4, 2019
appveyor.yml Add RocksJava build to AppVeyor Jan 3, 2019
defs.bzl Add copyright headers per FB open-source checkup tool. (#5199) Apr 18, 2019
issue_template.md Add a template for issues Sep 29, 2017
src.mk Support for single-primary, multi-secondary instances (#4899) Mar 26, 2019
thirdparty.inc Add copyright headers per FB open-source checkup tool. (#5199) Apr 18, 2019

README.md

RocksDB: A Persistent Key-Value Store for Flash and RAM Storage

Linux/Mac Build Status Windows Build status PPC64le Build Status

RocksDB is developed and maintained by Facebook Database Engineering Team. It is built on earlier work on LevelDB by Sanjay Ghemawat (sanjay@google.com) and Jeff Dean (jeff@google.com)

This code is a library that forms the core building block for a fast key value server, especially suited for storing data on flash drives. It has a Log-Structured-Merge-Database (LSM) design with flexible tradeoffs between Write-Amplification-Factor (WAF), Read-Amplification-Factor (RAF) and Space-Amplification-Factor (SAF). It has multi-threaded compactions, making it specially suitable for storing multiple terabytes of data in a single database.

Start with example usage here: https://github.com/facebook/rocksdb/tree/master/examples

See the github wiki for more explanation.

The public interface is in include/. Callers should not include or rely on the details of any other header files in this package. Those internal APIs may be changed without warning.

Design discussions are conducted in https://www.facebook.com/groups/rocksdb.dev/

License

RocksDB is dual-licensed under both the GPLv2 (found in the COPYING file in the root directory) and Apache 2.0 License (found in the LICENSE.Apache file in the root directory). You may select, at your option, one of the above-listed licenses.

You can’t perform that action at this time.