A library that provides an embeddable, persistent key-value store for fast storage.
Go to file
Aaron Gao db74b1a219 fix bug in merge_iterator when data race happens
Summary:
core dump when run
`./db_stress --max_background_compactions=1 --max_write_buffer_number=3 --sync=0 --reopen=20 --write_buffer_size=33554432 --delpercent=5 --log2_keys_per_lock=10 --block_size=16384 --allow_concurrent_memtable_write=1 --test_batches_snapshots=0 --max_bytes_for_level_base=67108864 --progress_reports=0 --mmap_read=1 --kill_prefix_blacklist=WritableFileWriter::Append,WritableFileWriter::WriteBuffered --writepercent=35 --disable_data_sync=0 --readpercent=50 --subcompactions=3 --ops_per_thread=20000000 --memtablerep=skip_list --prefix_size=0 --target_file_size_multiplier=1 --column_families=1 --db=/dev/shm/rocksdb/rocksdb_crashtest_whitebox --threads=32 --disable_wal=0 --open_files=500000 --destroy_db_initially=0 --target_file_size_base=16777216 --nooverwritepercent=1 --iterpercent=10 --max_key=100000000 --prefixpercent=0 --use_clock_cache=false --kill_random_test=189 --cache_size=1048576 --verify_checksum=1`
Actually the relevant flag is `--threads`, data race when --thread > 1 cause problem.
It is possible that multiple
threads read/write memtable simultaneously. After one thread
calls Prev(), another thread may insert a new key just between
the current key and the key next, which may cause the
assert(current_ == CurrentForward()) failure when the first
thread calls Next() again if in prefix seek mode

Test Plan: rerun db_stress with >1 thread / make all check -j64

Reviewers: sdong, andrewkr, IslamAbdelRahman

Reviewed By: IslamAbdelRahman

Subscribers: andrewkr, dhruba, leveldb

Differential Revision: https://reviews.facebook.net/D62979
2016-08-30 22:19:42 -07:00
arcanist_util cat tests logs sorted by exit code 2016-08-25 12:53:26 -07:00
build_tools Update and slightly clarify instructions in build_detect_platform (#1301) 2016-08-25 10:40:38 -07:00
coverage Fix coverage script 2014-11-03 14:53:00 -08:00
db support Prev() in prefix seek mode 2016-08-29 20:55:39 -07:00
doc Lint everything 2015-11-16 12:56:21 -08:00
docs Update docs README.md 2016-08-30 08:05:43 -07:00
examples Introduce FullMergeV2 (eliminate memcpy from merge operators) 2016-07-20 09:49:03 -07:00
hdfs using java7 in runtime for hdfs env (#1072) 2016-04-12 00:08:26 -04:00
include/rocksdb Introduce Read amplification bitmap (read amp statistics) 2016-08-26 18:55:58 -07:00
java Fix the Windows build of RocksDB Java. Similar to https://github.com/facebook/rocksdb/issues/1220 (#1284) 2016-08-25 10:16:26 -07:00
memtable Updated all copyright headers to the new format. 2016-02-09 15:12:00 -08:00
port Expose ThreadPool under include/rocksdb/threadpool.h 2016-08-26 10:41:35 -07:00
table fix bug in merge_iterator when data race happens 2016-08-30 22:19:42 -07:00
third-party Fix clang analyzer errors 2016-07-08 17:50:51 -07:00
tools Introduce Read amplification bitmap (read amp statistics) 2016-08-26 18:55:58 -07:00
util Fix cache_test valgrind_check failure 2016-08-29 10:40:00 -07:00
utilities LRU cache mid-point insertion 2016-08-19 16:43:31 -07:00
.arcconfig Integrate Jenkins with Phabricator 2015-04-07 11:56:29 -07:00
.clang-format A script that automatically reformat affected lines 2014-01-14 12:21:24 -08:00
.gitignore Experiments on column-aware encodings 2016-08-01 14:50:19 -07:00
.travis.yml set travis open file descriptor limit 2016-08-08 22:38:04 -07:00
appveyor.yml fix vs generator (#1269) 2016-08-10 09:08:13 -07:00
AUTHORS Add AUTHORS file. Fix #203 2014-09-29 10:52:18 -07:00
CMakeLists.txt Expose ThreadPool under include/rocksdb/threadpool.h 2016-08-26 10:41:35 -07:00
CONTRIBUTING.md facebook accounts are not required for CLA signers 2014-07-08 05:57:54 -04:00
DEFAULT_OPTIONS_HISTORY.md Release RocksDB 4.8.0 2016-05-02 14:38:04 -07:00
DUMP_FORMAT.md First version of rocksdb_dump and rocksdb_undump. 2015-06-19 16:24:36 -07:00
HISTORY.md Document memtable flush behavior in CancelAllBackgroundWork() 2016-08-26 10:14:40 -07:00
INSTALL.md Simple changes to support builds for ppc64[le] consistent with X86 2016-01-19 09:08:19 -06:00
LANGUAGE-BINDINGS.md Update LANGUAGE-BINDINGS.md 2016-07-15 13:09:30 +02:00
LICENSE Updated all copyright headers to the new format. 2016-02-09 15:12:00 -08:00
Makefile Update the download location of Snappy (#1304) 2016-08-28 20:24:08 -07:00
PATENTS Update Patent Grant. 2015-04-13 10:33:43 +01:00
README.md Appveyor badge to show master branch 2016-07-26 13:54:08 -07:00
ROCKSDB_LITE.md Optimistic Transactions 2015-05-29 14:36:35 -07:00
src.mk Expose ThreadPool under include/rocksdb/threadpool.h 2016-08-26 10:41:35 -07:00
thirdparty.inc Introduce XPRESS compresssion on Windows. (#1081) 2016-04-19 22:54:24 -07:00
USERS.md Update USER.md to include more services at Facebook. 2016-07-06 14:27:08 -07:00
Vagrantfile RocksDB on FreeBSD support 2015-02-26 15:19:17 -08:00
WINDOWS_PORT.md Commit both PR and internal code review changes 2015-07-07 16:58:20 -07:00

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

Build Status 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/