Revision 2a0f3d0de12ddb0d538e2d221c682536acd885d1 authored by Aaron Gao on 21 February 2017, 18:11:04 UTC, committed by Facebook Github Bot on 21 February 2017, 18:24:17 UTC
Summary:
reimplement the compaction expansion on lower level.

Considering such a case:
input level file: 1[B E] 2[F G] 3[H I] 4 [J M]
output level file: 5[A C] 6[D K] 7[L O]

If we initially pick file 2, now we will compact file 2 and 6. But we can safely compact 2, 3 and 6 without expanding the output level.

The previous code is messy and wrong.

In this diff, I first determine the input range [a, b], and output range [c, d],
then we get the range [e,f] = [min(a, c), max(b, d] and put all eligible clean-cut files within [e, f] into this compaction.

**Note: clean-cut means the files don't have the same user key on the boundaries of some files that are not chosen in this compaction**.
Closes https://github.com/facebook/rocksdb/pull/1760

Differential Revision: D4395564

Pulled By: lightmark

fbshipit-source-id: 2dc2c5c
1 parent ebc8a79
History
File Mode Size
arcanist_util
build_tools
cmake
coverage
db
docs
examples
hdfs
include
java
memtable
port
table
third-party
tools
util
utilities
.arcconfig -rw-r--r-- 566 bytes
.clang-format -rw-r--r-- 138 bytes
.gitignore -rw-r--r-- 700 bytes
.travis.yml -rw-r--r-- 1.7 KB
AUTHORS -rw-r--r-- 247 bytes
CMakeLists.txt -rw-r--r-- 25.6 KB
CONTRIBUTING.md -rw-r--r-- 733 bytes
DEFAULT_OPTIONS_HISTORY.md -rw-r--r-- 1.4 KB
DUMP_FORMAT.md -rw-r--r-- 763 bytes
HISTORY.md -rw-r--r-- 40.5 KB
INSTALL.md -rw-r--r-- 4.3 KB
LANGUAGE-BINDINGS.md -rw-r--r-- 712 bytes
LICENSE -rw-r--r-- 1.6 KB
Makefile -rw-r--r-- 52.1 KB
PATENTS -rw-r--r-- 1.9 KB
README.md -rw-r--r-- 1.4 KB
ROCKSDB_LITE.md -rw-r--r-- 1.0 KB
USERS.md -rw-r--r-- 4.9 KB
Vagrantfile -rw-r--r-- 877 bytes
WINDOWS_PORT.md -rw-r--r-- 12.5 KB
appveyor.yml -rw-r--r-- 511 bytes
src.mk -rw-r--r-- 24.0 KB
thirdparty.inc -rw-r--r-- 7.8 KB

README.md

back to top