Find a file
Levi Tamasi 44d04582cb Aggregate blob file related changes in VersionBuilder as VersionEdits are applied (#9085)
Summary:
The current VersionBuilder code on mainline keeps track of blob file related
changes ("delta") induced by a series of `VersionEdit`s in the form of
`BlobFileMetaDataDelta` objects. Specifically, `BlobFileMetaDataDelta`
contains the amount of additional garbage generated by compactions, as well
as the set of newly linked/unlinked SSTs. This is very handy for detecting trivial moves,
since in that case the newly linked and unlinked SSTs cancel each other out.
However, this representation does not allow us to easily tell whether a certain
blob file is obsolete after applying a set of `VersionEdit`s or not. In order to
solve this issue, the patch introduces `MutableBlobFileMetaData`, which, in addition
to the delta, also contains the materialized state after applying a set of version edits
(i.e. the total amount of garbage and the resulting set of linked SSTs). This will
enable us to add further consistency checks and to improve certain pieces of
functionality where knowing up front which blob files get obsoleted is beneficial.
(Note: this patch is just the refactoring part; I plan to create separate PRs for
the enhancements.)

Pull Request resolved: https://github.com/facebook/rocksdb/pull/9085

Test Plan: Ran `make check` and the stress tests in BlobDB mode.

Reviewed By: riversand963

Differential Revision: D31980867

Pulled By: ltamasi

fbshipit-source-id: cc4286778b10900af720423d6b772c77f28a93e3
2021-10-29 17:47:02 -07:00
.circleci Fix EnvLibrados and add to CI (#9088) 2021-10-29 08:19:03 -07:00
.github/workflows
buckifier
build_tools Make format-diff.sh locale-independent (#9079) 2021-10-27 12:26:36 -07:00
cache Add lowest_used_cache_tier to ImmutableDBOptions to enable or disable Secondary Cache (#9050) 2021-10-19 15:54:23 -07:00
cmake
coverage
db Aggregate blob file related changes in VersionBuilder as VersionEdits are applied (#9085) 2021-10-29 17:47:02 -07:00
db_stress_tool Fix stress/crash test handling of SST unique IDs (#9054) 2021-10-19 11:52:07 -07:00
docs Misc doc fixes (#8983) 2021-10-07 11:22:17 -07:00
env Experimental support for SST unique IDs (#8990) 2021-10-18 23:32:01 -07:00
examples
file Add (Live)FileStorageInfo API (#8968) 2021-10-16 10:04:32 -07:00
fuzz
hdfs
include/rocksdb Fix EnvLibrados and add to CI (#9088) 2021-10-29 08:19:03 -07:00
java Introduce allowStall option for write buffer manager constructor (#9076) 2021-10-26 12:09:54 -07:00
logging
memory
memtable Fix race in WriteBufferManager (#9009) 2021-10-12 00:16:21 -07:00
microbench
monitoring Add support for building on s390x platform (#8962) 2021-10-22 10:13:15 -07:00
options Implement XXH3 block checksum type (#9069) 2021-10-28 22:15:17 -07:00
plugin
port Fix incorrect order of comments in win_thread.cc (#9033) 2021-10-27 13:25:01 -07:00
table Implement XXH3 block checksum type (#9069) 2021-10-28 22:15:17 -07:00
test_util SyncPoint::Process thrashes heap ... fix it (#9023) 2021-10-15 13:30:29 -07:00
third-party Add support for building on s390x platform (#8962) 2021-10-22 10:13:15 -07:00
tools Implement XXH3 block checksum type (#9069) 2021-10-28 22:15:17 -07:00
trace_replay Cleanup includes in dbformat.h (#8930) 2021-09-29 04:04:40 -07:00
util Add support for building on s390x platform (#8962) 2021-10-22 10:13:15 -07:00
utilities Fix a compaction bug for write-prepared txn (#9061) 2021-10-29 15:23:17 -07:00
.clang-format
.gitignore
.lgtm.yml
.travis.yml Temporarily disable s390x+cmake* Travis jobs (#9095) 2021-10-29 11:06:50 -07:00
.watchmanconfig
appveyor.yml
AUTHORS
CMakeLists.txt Add support for building on s390x platform (#8962) 2021-10-22 10:13:15 -07:00
CODE_OF_CONDUCT.md
CONTRIBUTING.md
COPYING
DEFAULT_OPTIONS_HISTORY.md
defs.bzl
DUMP_FORMAT.md
HISTORY.md Fix a compaction bug for write-prepared txn (#9061) 2021-10-29 15:23:17 -07:00
INSTALL.md
issue_template.md
LANGUAGE-BINDINGS.md
LICENSE.Apache
LICENSE.leveldb
Makefile Fix EnvLibrados and add to CI (#9088) 2021-10-29 08:19:03 -07:00
PLUGINS.md
README.md
ROCKSDB_LITE.md
src.mk Experimental support for SST unique IDs (#8990) 2021-10-18 23:32:01 -07:00
TARGETS Experimental support for SST unique IDs (#8990) 2021-10-18 23:32:01 -07:00
thirdparty.inc
USERS.md Update USERS.md (#8923) 2021-10-01 16:10:35 -07:00
Vagrantfile
WINDOWS_PORT.md

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

CircleCI Status TravisCI Status Appveyor 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 especially suitable for storing multiple terabytes of data in a single database.

Start with example usage here: https://github.com/facebook/rocksdb/tree/main/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/ and https://rocksdb.slack.com/

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.