2021-01-28 00:19:43 +00:00
|
|
|
# This file @generated by:
|
|
|
|
#$ python3 buckifier/buckify_rocksdb.py
|
2019-11-06 04:19:17 +00:00
|
|
|
# --> DO NOT EDIT MANUALLY <--
|
|
|
|
# This file is a Facebook-specific integration for buck builds, so can
|
|
|
|
# only be validated by Facebook employees.
|
|
|
|
#
|
2018-08-29 04:14:52 +00:00
|
|
|
load("@fbcode_macros//build_defs:auto_headers.bzl", "AutoHeaders")
|
2019-01-22 23:20:28 +00:00
|
|
|
load("@fbcode_macros//build_defs:cpp_library.bzl", "cpp_library")
|
2019-01-07 21:35:12 +00:00
|
|
|
load(":defs.bzl", "test_binary")
|
2018-08-29 04:14:52 +00:00
|
|
|
|
2017-11-30 23:22:41 +00:00
|
|
|
REPO_PATH = package_name() + "/"
|
2017-11-15 22:13:39 +00:00
|
|
|
|
2021-06-04 20:18:04 +00:00
|
|
|
ROCKSDB_COMPILER_FLAGS_0 = [
|
2017-11-15 22:13:39 +00:00
|
|
|
"-fno-builtin-memcmp",
|
|
|
|
# Needed to compile in fbcode
|
|
|
|
"-Wno-expansion-to-defined",
|
2018-03-30 21:23:55 +00:00
|
|
|
# Added missing flags from output of build_detect_platform
|
2018-06-21 21:30:00 +00:00
|
|
|
"-Wnarrowing",
|
2019-06-04 05:59:54 +00:00
|
|
|
"-DROCKSDB_NO_DYNAMIC_EXTENSION",
|
2017-04-04 23:09:31 +00:00
|
|
|
]
|
|
|
|
|
2019-01-07 21:35:12 +00:00
|
|
|
ROCKSDB_EXTERNAL_DEPS = [
|
2017-11-15 22:13:39 +00:00
|
|
|
("bzip2", None, "bz2"),
|
|
|
|
("snappy", None, "snappy"),
|
|
|
|
("zlib", None, "z"),
|
|
|
|
("gflags", None, "gflags"),
|
|
|
|
("lz4", None, "lz4"),
|
2021-02-08 22:44:02 +00:00
|
|
|
("zstd", None, "zstd"),
|
2017-04-04 23:09:31 +00:00
|
|
|
]
|
|
|
|
|
2021-06-04 20:18:04 +00:00
|
|
|
ROCKSDB_OS_DEPS_0 = [
|
2019-07-25 18:42:31 +00:00
|
|
|
(
|
|
|
|
"linux",
|
2020-09-23 19:54:29 +00:00
|
|
|
["third-party//numa:numa", "third-party//liburing:uring", "third-party//tbb:tbb"],
|
|
|
|
),
|
|
|
|
(
|
|
|
|
"macos",
|
|
|
|
["third-party//tbb:tbb"],
|
2019-07-25 18:42:31 +00:00
|
|
|
),
|
|
|
|
]
|
|
|
|
|
2021-06-04 20:18:04 +00:00
|
|
|
ROCKSDB_OS_PREPROCESSOR_FLAGS_0 = [
|
2019-07-25 18:42:31 +00:00
|
|
|
(
|
|
|
|
"linux",
|
|
|
|
[
|
|
|
|
"-DOS_LINUX",
|
|
|
|
"-DROCKSDB_FALLOCATE_PRESENT",
|
|
|
|
"-DROCKSDB_MALLOC_USABLE_SIZE",
|
|
|
|
"-DROCKSDB_PTHREAD_ADAPTIVE_MUTEX",
|
|
|
|
"-DROCKSDB_RANGESYNC_PRESENT",
|
|
|
|
"-DROCKSDB_SCHED_GETCPU_PRESENT",
|
2020-02-24 23:45:47 +00:00
|
|
|
"-DROCKSDB_IOURING_PRESENT",
|
2019-07-25 18:42:31 +00:00
|
|
|
"-DHAVE_SSE42",
|
2020-02-24 23:45:47 +00:00
|
|
|
"-DLIBURING",
|
2019-07-25 18:42:31 +00:00
|
|
|
"-DNUMA",
|
2020-09-23 19:54:29 +00:00
|
|
|
"-DROCKSDB_PLATFORM_POSIX",
|
|
|
|
"-DROCKSDB_LIB_IO_POSIX",
|
|
|
|
"-DTBB",
|
2019-07-25 18:42:31 +00:00
|
|
|
],
|
|
|
|
),
|
|
|
|
(
|
|
|
|
"macos",
|
2020-09-23 19:54:29 +00:00
|
|
|
[
|
|
|
|
"-DOS_MACOSX",
|
|
|
|
"-DROCKSDB_PLATFORM_POSIX",
|
|
|
|
"-DROCKSDB_LIB_IO_POSIX",
|
|
|
|
"-DTBB",
|
|
|
|
],
|
|
|
|
),
|
|
|
|
(
|
|
|
|
"windows",
|
|
|
|
[ "-DOS_WIN", "-DWIN32", "-D_MBCS", "-DWIN64", "-DNOMINMAX" ]
|
2019-07-25 18:42:31 +00:00
|
|
|
),
|
|
|
|
]
|
|
|
|
|
2019-01-07 21:35:12 +00:00
|
|
|
ROCKSDB_PREPROCESSOR_FLAGS = [
|
2019-07-25 18:42:31 +00:00
|
|
|
"-DROCKSDB_SUPPORT_THREAD_LOCAL",
|
|
|
|
|
|
|
|
# Flags to enable libs we include
|
|
|
|
"-DSNAPPY",
|
|
|
|
"-DZLIB",
|
|
|
|
"-DBZIP2",
|
|
|
|
"-DLZ4",
|
|
|
|
"-DZSTD",
|
|
|
|
"-DZSTD_STATIC_LINKING_ONLY",
|
|
|
|
"-DGFLAGS=gflags",
|
|
|
|
|
|
|
|
# Added missing flags from output of build_detect_platform
|
|
|
|
"-DROCKSDB_BACKTRACE",
|
2021-04-03 21:41:25 +00:00
|
|
|
]
|
2019-07-25 18:42:31 +00:00
|
|
|
|
2021-04-03 21:41:25 +00:00
|
|
|
# Directories with files for #include
|
|
|
|
ROCKSDB_INCLUDE_PATHS = [
|
|
|
|
"",
|
|
|
|
"include",
|
2017-04-04 23:09:31 +00:00
|
|
|
]
|
|
|
|
|
2019-01-07 21:35:12 +00:00
|
|
|
ROCKSDB_ARCH_PREPROCESSOR_FLAGS = {
|
2018-03-06 20:19:15 +00:00
|
|
|
"x86_64": [
|
|
|
|
"-DHAVE_PCLMUL",
|
|
|
|
],
|
2017-08-14 00:04:19 +00:00
|
|
|
}
|
|
|
|
|
2017-11-30 18:40:39 +00:00
|
|
|
build_mode = read_config("fbcode", "build_mode")
|
|
|
|
|
|
|
|
is_opt_mode = build_mode.startswith("opt")
|
|
|
|
|
|
|
|
# -DNDEBUG is added by default in opt mode in fbcode. But adding it twice
|
|
|
|
# doesn't harm and avoid forgetting to add it.
|
2021-06-04 20:18:04 +00:00
|
|
|
ROCKSDB_COMPILER_FLAGS = ROCKSDB_COMPILER_FLAGS_0 + (["-DNDEBUG"] if is_opt_mode else [])
|
2017-11-30 18:40:39 +00:00
|
|
|
|
2018-10-15 18:39:54 +00:00
|
|
|
sanitizer = read_config("fbcode", "sanitizer")
|
|
|
|
|
2019-01-04 00:26:31 +00:00
|
|
|
# Do not enable jemalloc if sanitizer presents. RocksDB will further detect
|
|
|
|
# whether the binary is linked with jemalloc at runtime.
|
2021-06-04 20:18:04 +00:00
|
|
|
ROCKSDB_OS_PREPROCESSOR_FLAGS = ROCKSDB_OS_PREPROCESSOR_FLAGS_0 + ([(
|
2019-07-25 18:42:31 +00:00
|
|
|
"linux",
|
|
|
|
["-DROCKSDB_JEMALLOC"],
|
|
|
|
)] if sanitizer == "" else [])
|
2019-01-07 21:35:12 +00:00
|
|
|
|
2021-06-04 20:18:04 +00:00
|
|
|
ROCKSDB_OS_DEPS = ROCKSDB_OS_DEPS_0 + ([(
|
2019-07-25 18:42:31 +00:00
|
|
|
"linux",
|
|
|
|
["third-party//jemalloc:headers"],
|
|
|
|
)] if sanitizer == "" else [])
|
2018-10-15 18:39:54 +00:00
|
|
|
|
2020-05-17 04:46:21 +00:00
|
|
|
ROCKSDB_LIB_DEPS = [
|
|
|
|
":rocksdb_lib",
|
|
|
|
":rocksdb_test_lib",
|
|
|
|
] if not is_opt_mode else [":rocksdb_lib"]
|
|
|
|
|
2017-04-04 23:09:31 +00:00
|
|
|
cpp_library(
|
|
|
|
name = "rocksdb_lib",
|
|
|
|
srcs = [
|
2020-04-29 01:02:11 +00:00
|
|
|
"cache/cache.cc",
|
Use deleters to label cache entries and collect stats (#8297)
Summary:
This change gathers and publishes statistics about the
kinds of items in block cache. This is especially important for
profiling relative usage of cache by index vs. filter vs. data blocks.
It works by iterating over the cache during periodic stats dump
(InternalStats, stats_dump_period_sec) or on demand when
DB::Get(Map)Property(kBlockCacheEntryStats), except that for
efficiency and sharing among column families, saved data from
the last scan is used when the data is not considered too old.
The new information can be seen in info LOG, for example:
Block cache LRUCache@0x7fca62229330 capacity: 95.37 MB collections: 8 last_copies: 0 last_secs: 0.00178 secs_since: 0
Block cache entry stats(count,size,portion): DataBlock(7092,28.24 MB,29.6136%) FilterBlock(215,867.90 KB,0.888728%) FilterMetaBlock(2,5.31 KB,0.00544%) IndexBlock(217,180.11 KB,0.184432%) WriteBuffer(1,256.00 KB,0.262144%) Misc(1,0.00 KB,0%)
And also through DB::GetProperty and GetMapProperty (here using
ldb just for demonstration):
$ ./ldb --db=/dev/shm/dbbench/ get_property rocksdb.block-cache-entry-stats
rocksdb.block-cache-entry-stats.bytes.data-block: 0
rocksdb.block-cache-entry-stats.bytes.deprecated-filter-block: 0
rocksdb.block-cache-entry-stats.bytes.filter-block: 0
rocksdb.block-cache-entry-stats.bytes.filter-meta-block: 0
rocksdb.block-cache-entry-stats.bytes.index-block: 178992
rocksdb.block-cache-entry-stats.bytes.misc: 0
rocksdb.block-cache-entry-stats.bytes.other-block: 0
rocksdb.block-cache-entry-stats.bytes.write-buffer: 0
rocksdb.block-cache-entry-stats.capacity: 8388608
rocksdb.block-cache-entry-stats.count.data-block: 0
rocksdb.block-cache-entry-stats.count.deprecated-filter-block: 0
rocksdb.block-cache-entry-stats.count.filter-block: 0
rocksdb.block-cache-entry-stats.count.filter-meta-block: 0
rocksdb.block-cache-entry-stats.count.index-block: 215
rocksdb.block-cache-entry-stats.count.misc: 1
rocksdb.block-cache-entry-stats.count.other-block: 0
rocksdb.block-cache-entry-stats.count.write-buffer: 0
rocksdb.block-cache-entry-stats.id: LRUCache@0x7f3636661290
rocksdb.block-cache-entry-stats.percent.data-block: 0.000000
rocksdb.block-cache-entry-stats.percent.deprecated-filter-block: 0.000000
rocksdb.block-cache-entry-stats.percent.filter-block: 0.000000
rocksdb.block-cache-entry-stats.percent.filter-meta-block: 0.000000
rocksdb.block-cache-entry-stats.percent.index-block: 2.133751
rocksdb.block-cache-entry-stats.percent.misc: 0.000000
rocksdb.block-cache-entry-stats.percent.other-block: 0.000000
rocksdb.block-cache-entry-stats.percent.write-buffer: 0.000000
rocksdb.block-cache-entry-stats.secs_for_last_collection: 0.000052
rocksdb.block-cache-entry-stats.secs_since_last_collection: 0
Solution detail - We need some way to flag what kind of blocks each
entry belongs to, preferably without changing the Cache API.
One of the complications is that Cache is a general interface that could
have other users that don't adhere to whichever convention we decide
on for keys and values. Or we would pay for an extra field in the Handle
that would only be used for this purpose.
This change uses a back-door approach, the deleter, to indicate the
"role" of a Cache entry (in addition to the value type, implicitly).
This has the added benefit of ensuring proper code origin whenever we
recognize a particular role for a cache entry; if the entry came from
some other part of the code, it will use an unrecognized deleter, which
we simply attribute to the "Misc" role.
An internal API makes for simple instantiation and automatic
registration of Cache deleters for a given value type and "role".
Another internal API, CacheEntryStatsCollector, solves the problem of
caching the results of a scan and sharing them, to ensure scans are
neither excessive nor redundant so as not to harm Cache performance.
Because code is added to BlocklikeTraits, it is pulled out of
block_based_table_reader.cc into its own file.
This is a reformulation of https://github.com/facebook/rocksdb/issues/8276, without the type checking option
(could still be added), and with actual stat gathering.
Pull Request resolved: https://github.com/facebook/rocksdb/pull/8297
Test Plan: manual testing with db_bench, and a couple of basic unit tests
Reviewed By: ltamasi
Differential Revision: D28488721
Pulled By: pdillinger
fbshipit-source-id: 472f524a9691b5afb107934be2d41d84f2b129fb
2021-05-19 23:45:51 +00:00
|
|
|
"cache/cache_entry_roles.cc",
|
2017-11-15 22:13:39 +00:00
|
|
|
"cache/clock_cache.cc",
|
|
|
|
"cache/lru_cache.cc",
|
|
|
|
"cache/sharded_cache.cc",
|
2019-09-13 20:48:04 +00:00
|
|
|
"db/arena_wrapped_db_iter.cc",
|
2021-06-10 19:55:29 +00:00
|
|
|
"db/blob/blob_fetcher.cc",
|
2020-03-12 17:58:27 +00:00
|
|
|
"db/blob/blob_file_addition.cc",
|
2020-08-27 18:54:43 +00:00
|
|
|
"db/blob/blob_file_builder.cc",
|
2020-10-15 20:02:44 +00:00
|
|
|
"db/blob/blob_file_cache.cc",
|
2020-03-12 17:58:27 +00:00
|
|
|
"db/blob/blob_file_garbage.cc",
|
Add blob files to VersionStorageInfo/VersionBuilder (#6597)
Summary:
The patch adds a couple of classes to represent metadata about
blob files: `SharedBlobFileMetaData` contains the information elements
that are immutable (once the blob file is closed), e.g. blob file number,
total number and size of blob files, checksum method/value, while
`BlobFileMetaData` contains attributes that can vary across versions like
the amount of garbage in the file. There is a single `SharedBlobFileMetaData`
for each blob file, which is jointly owned by the `BlobFileMetaData` objects
that point to it; `BlobFileMetaData` objects, in turn, are owned by `Version`s
and can also be shared if the (immutable _and_ mutable) state of the blob file
is the same in two versions.
In addition, the patch adds the blob file metadata to `VersionStorageInfo`, and extends
`VersionBuilder` so that it can apply blob file related `VersionEdit`s (i.e. those
containing `BlobFileAddition`s and/or `BlobFileGarbage`), and save blob file metadata
to a new `VersionStorageInfo`. Consistency checks are also extended to ensure
that table files point to blob files that are part of the `Version`, and that all blob files
that are part of any given `Version` have at least some _non_-garbage data in them.
Pull Request resolved: https://github.com/facebook/rocksdb/pull/6597
Test Plan: `make check`
Reviewed By: riversand963
Differential Revision: D20656803
Pulled By: ltamasi
fbshipit-source-id: f1f74d135045b3b42d0146f03ee576ef0a4bfd80
2020-03-27 01:48:55 +00:00
|
|
|
"db/blob/blob_file_meta.cc",
|
Introduce a blob file reader class (#7461)
Summary:
The patch adds a class called `BlobFileReader` that can be used to retrieve blobs
using the information available in blob references (e.g. blob file number, offset, and
size). This will come in handy when implementing blob support for `Get`, `MultiGet`,
and iterators, and also for compaction/garbage collection.
When a `BlobFileReader` object is created (using the factory method `Create`),
it first checks whether the specified file is potentially valid by comparing the file
size against the combined size of the blob file header and footer (files smaller than
the threshold are considered malformed). Then, it opens the file, and reads and verifies
the header and footer. The verification involves magic number/CRC checks
as well as checking for unexpected header/footer fields, e.g. incorrect column family ID
or TTL blob files.
Blobs can be retrieved using `GetBlob`. `GetBlob` validates the offset and compression
type passed by the caller (because of the presence of the header and footer, the
specified offset cannot be too close to the start/end of the file; also, the compression type
has to match the one in the blob file header), and retrieves and potentially verifies and
uncompresses the blob. In particular, when `ReadOptions::verify_checksums` is set,
`BlobFileReader` reads the blob record header as well (as opposed to just the blob itself)
and verifies the key/value size, the key itself, as well as the CRC of the blob record header
and the key/value pair.
In addition, the patch exposes the compression type from `BlobIndex` (both using an
accessor and via `DebugString`), and adds a blob file read latency histogram to
`InternalStats` that can be used with `BlobFileReader`.
Pull Request resolved: https://github.com/facebook/rocksdb/pull/7461
Test Plan: `make check`
Reviewed By: riversand963
Differential Revision: D23999219
Pulled By: ltamasi
fbshipit-source-id: deb6b1160d251258b308d5156e2ec063c3e12e5e
2020-10-07 22:43:23 +00:00
|
|
|
"db/blob/blob_file_reader.cc",
|
2020-06-09 22:12:59 +00:00
|
|
|
"db/blob/blob_log_format.cc",
|
2020-10-08 00:46:50 +00:00
|
|
|
"db/blob/blob_log_sequential_reader.cc",
|
2020-06-09 22:12:59 +00:00
|
|
|
"db/blob/blob_log_writer.cc",
|
2017-11-15 22:13:39 +00:00
|
|
|
"db/builder.cc",
|
|
|
|
"db/c.cc",
|
|
|
|
"db/column_family.cc",
|
2019-05-31 18:52:59 +00:00
|
|
|
"db/compaction/compaction.cc",
|
|
|
|
"db/compaction/compaction_iterator.cc",
|
|
|
|
"db/compaction/compaction_job.cc",
|
|
|
|
"db/compaction/compaction_picker.cc",
|
|
|
|
"db/compaction/compaction_picker_fifo.cc",
|
|
|
|
"db/compaction/compaction_picker_level.cc",
|
|
|
|
"db/compaction/compaction_picker_universal.cc",
|
2020-07-24 20:43:14 +00:00
|
|
|
"db/compaction/sst_partitioner.cc",
|
2017-11-15 22:13:39 +00:00
|
|
|
"db/convenience.cc",
|
|
|
|
"db/db_filesnapshot.cc",
|
2021-03-23 20:47:56 +00:00
|
|
|
"db/db_impl/compacted_db_impl.cc",
|
2019-05-31 18:52:59 +00:00
|
|
|
"db/db_impl/db_impl.cc",
|
|
|
|
"db/db_impl/db_impl_compaction_flush.cc",
|
|
|
|
"db/db_impl/db_impl_debug.cc",
|
|
|
|
"db/db_impl/db_impl_experimental.cc",
|
|
|
|
"db/db_impl/db_impl_files.cc",
|
|
|
|
"db/db_impl/db_impl_open.cc",
|
|
|
|
"db/db_impl/db_impl_readonly.cc",
|
|
|
|
"db/db_impl/db_impl_secondary.cc",
|
|
|
|
"db/db_impl/db_impl_write.cc",
|
2017-11-15 22:13:39 +00:00
|
|
|
"db/db_info_dumper.cc",
|
|
|
|
"db/db_iter.cc",
|
|
|
|
"db/dbformat.cc",
|
2018-06-28 19:23:57 +00:00
|
|
|
"db/error_handler.cc",
|
2017-11-15 22:13:39 +00:00
|
|
|
"db/event_helpers.cc",
|
|
|
|
"db/experimental.cc",
|
|
|
|
"db/external_sst_file_ingestion_job.cc",
|
|
|
|
"db/file_indexer.cc",
|
|
|
|
"db/flush_job.cc",
|
|
|
|
"db/flush_scheduler.cc",
|
|
|
|
"db/forward_iterator.cc",
|
Export Import sst files (#5495)
Summary:
Refresh of the earlier change here - https://github.com/facebook/rocksdb/issues/5135
This is a review request for code change needed for - https://github.com/facebook/rocksdb/issues/3469
"Add support for taking snapshot of a column family and creating column family from a given CF snapshot"
We have an implementation for this that we have been testing internally. We have two new APIs that together provide this functionality.
(1) ExportColumnFamily() - This API is modelled after CreateCheckpoint() as below.
// Exports all live SST files of a specified Column Family onto export_dir,
// returning SST files information in metadata.
// - SST files will be created as hard links when the directory specified
// is in the same partition as the db directory, copied otherwise.
// - export_dir should not already exist and will be created by this API.
// - Always triggers a flush.
virtual Status ExportColumnFamily(ColumnFamilyHandle* handle,
const std::string& export_dir,
ExportImportFilesMetaData** metadata);
Internally, the API will DisableFileDeletions(), GetColumnFamilyMetaData(), Parse through
metadata, creating links/copies of all the sst files, EnableFileDeletions() and complete the call by
returning the list of file metadata.
(2) CreateColumnFamilyWithImport() - This API is modeled after IngestExternalFile(), but invoked only during a CF creation as below.
// CreateColumnFamilyWithImport() will create a new column family with
// column_family_name and import external SST files specified in metadata into
// this column family.
// (1) External SST files can be created using SstFileWriter.
// (2) External SST files can be exported from a particular column family in
// an existing DB.
// Option in import_options specifies whether the external files are copied or
// moved (default is copy). When option specifies copy, managing files at
// external_file_path is caller's responsibility. When option specifies a
// move, the call ensures that the specified files at external_file_path are
// deleted on successful return and files are not modified on any error
// return.
// On error return, column family handle returned will be nullptr.
// ColumnFamily will be present on successful return and will not be present
// on error return. ColumnFamily may be present on any crash during this call.
virtual Status CreateColumnFamilyWithImport(
const ColumnFamilyOptions& options, const std::string& column_family_name,
const ImportColumnFamilyOptions& import_options,
const ExportImportFilesMetaData& metadata,
ColumnFamilyHandle** handle);
Internally, this API creates a new CF, parses all the sst files and adds it to the specified column family, at the same level and with same sequence number as in the metadata. Also performs safety checks with respect to overlaps between the sst files being imported.
If incoming sequence number is higher than current local sequence number, local sequence
number is updated to reflect this.
Note, as the sst files is are being moved across Column Families, Column Family name in sst file
will no longer match the actual column family on destination DB. The API does not modify Column
Family name or id in the sst files being imported.
Pull Request resolved: https://github.com/facebook/rocksdb/pull/5495
Differential Revision: D16018881
fbshipit-source-id: 9ae2251025d5916d35a9fc4ea4d6707f6be16ff9
2019-07-17 19:22:21 +00:00
|
|
|
"db/import_column_family_job.cc",
|
2017-11-15 22:13:39 +00:00
|
|
|
"db/internal_stats.cc",
|
|
|
|
"db/log_reader.cc",
|
|
|
|
"db/log_writer.cc",
|
Skip deleted WALs during recovery
Summary:
This patch record min log number to keep to the manifest while flushing SST files to ignore them and any WAL older than them during recovery. This is to avoid scenarios when we have a gap between the WAL files are fed to the recovery procedure. The gap could happen by for example out-of-order WAL deletion. Such gap could cause problems in 2PC recovery where the prepared and commit entry are placed into two separate WAL and gap in the WALs could result into not processing the WAL with the commit entry and hence breaking the 2PC recovery logic.
Before the commit, for 2PC case, we determined which log number to keep in FindObsoleteFiles(). We looked at the earliest logs with outstanding prepare entries, or prepare entries whose respective commit or abort are in memtable. With the commit, the same calculation is done while we apply the SST flush. Just before installing the flush file, we precompute the earliest log file to keep after the flush finishes using the same logic (but skipping the memtables just flushed), record this information to the manifest entry for this new flushed SST file. This pre-computed value is also remembered in memory, and will later be used to determine whether a log file can be deleted. This value is unlikely to change until next flush because the commit entry will stay in memtable. (In WritePrepared, we could have removed the older log files as soon as all prepared entries are committed. It's not yet done anyway. Even if we do it, the only thing we loss with this new approach is earlier log deletion between two flushes, which does not guarantee to happen anyway because the obsolete file clean-up function is only executed after flush or compaction)
This min log number to keep is stored in the manifest using the safely-ignore customized field of AddFile entry, in order to guarantee that the DB generated using newer release can be opened by previous releases no older than 4.2.
Closes https://github.com/facebook/rocksdb/pull/3765
Differential Revision: D7747618
Pulled By: siying
fbshipit-source-id: d00c92105b4f83852e9754a1b70d6b64cb590729
2018-05-03 22:35:11 +00:00
|
|
|
"db/logs_with_prep_tracker.cc",
|
2017-11-15 22:13:39 +00:00
|
|
|
"db/malloc_stats.cc",
|
|
|
|
"db/memtable.cc",
|
|
|
|
"db/memtable_list.cc",
|
|
|
|
"db/merge_helper.cc",
|
|
|
|
"db/merge_operator.cc",
|
2020-10-01 17:08:52 +00:00
|
|
|
"db/output_validator.cc",
|
2020-10-02 02:12:26 +00:00
|
|
|
"db/periodic_work_scheduler.cc",
|
2017-11-15 22:13:39 +00:00
|
|
|
"db/range_del_aggregator.cc",
|
Use only "local" range tombstones during Get (#4449)
Summary:
Previously, range tombstones were accumulated from every level, which
was necessary if a range tombstone in a higher level covered a key in a lower
level. However, RangeDelAggregator::AddTombstones's complexity is based on
the number of tombstones that are currently stored in it, which is wasteful in
the Get case, where we only need to know the highest sequence number of range
tombstones that cover the key from higher levels, and compute the highest covering
sequence number at the current level. This change introduces this optimization, and
removes the use of RangeDelAggregator from the Get path.
In the benchmark results, the following command was used to initialize the database:
```
./db_bench -db=/dev/shm/5k-rts -use_existing_db=false -benchmarks=filluniquerandom -write_buffer_size=1048576 -compression_type=lz4 -target_file_size_base=1048576 -max_bytes_for_level_base=4194304 -value_size=112 -key_size=16 -block_size=4096 -level_compaction_dynamic_level_bytes=true -num=5000000 -max_background_jobs=12 -benchmark_write_rate_limit=20971520 -range_tombstone_width=100 -writes_per_range_tombstone=100 -max_num_range_tombstones=50000 -bloom_bits=8
```
...and the following command was used to measure read throughput:
```
./db_bench -db=/dev/shm/5k-rts/ -use_existing_db=true -benchmarks=readrandom -disable_auto_compactions=true -num=5000000 -reads=100000 -threads=32
```
The filluniquerandom command was only run once, and the resulting database was used
to measure read performance before and after the PR. Both binaries were compiled with
`DEBUG_LEVEL=0`.
Readrandom results before PR:
```
readrandom : 4.544 micros/op 220090 ops/sec; 16.9 MB/s (63103 of 100000 found)
```
Readrandom results after PR:
```
readrandom : 11.147 micros/op 89707 ops/sec; 6.9 MB/s (63103 of 100000 found)
```
So it's actually slower right now, but this PR paves the way for future optimizations (see #4493).
----
Pull Request resolved: https://github.com/facebook/rocksdb/pull/4449
Differential Revision: D10370575
Pulled By: abhimadan
fbshipit-source-id: 9a2e152be1ef36969055c0e9eb4beb0d96c11f4d
2018-10-24 19:29:29 +00:00
|
|
|
"db/range_tombstone_fragmenter.cc",
|
2017-11-15 22:13:39 +00:00
|
|
|
"db/repair.cc",
|
|
|
|
"db/snapshot_impl.cc",
|
|
|
|
"db/table_cache.cc",
|
|
|
|
"db/table_properties_collector.cc",
|
|
|
|
"db/transaction_log_impl.cc",
|
Refactor trimming logic for immutable memtables (#5022)
Summary:
MyRocks currently sets `max_write_buffer_number_to_maintain` in order to maintain enough history for transaction conflict checking. The effectiveness of this approach depends on the size of memtables. When memtables are small, it may not keep enough history; when memtables are large, this may consume too much memory.
We are proposing a new way to configure memtable list history: by limiting the memory usage of immutable memtables. The new option is `max_write_buffer_size_to_maintain` and it will take precedence over the old `max_write_buffer_number_to_maintain` if they are both set to non-zero values. The new option accounts for the total memory usage of flushed immutable memtables and mutable memtable. When the total usage exceeds the limit, RocksDB may start dropping immutable memtables (which is also called trimming history), starting from the oldest one.
The semantics of the old option actually works both as an upper bound and lower bound. History trimming will start if number of immutable memtables exceeds the limit, but it will never go below (limit-1) due to history trimming.
In order the mimic the behavior with the new option, history trimming will stop if dropping the next immutable memtable causes the total memory usage go below the size limit. For example, assuming the size limit is set to 64MB, and there are 3 immutable memtables with sizes of 20, 30, 30. Although the total memory usage is 80MB > 64MB, dropping the oldest memtable will reduce the memory usage to 60MB < 64MB, so in this case no memtable will be dropped.
Pull Request resolved: https://github.com/facebook/rocksdb/pull/5022
Differential Revision: D14394062
Pulled By: miasantreble
fbshipit-source-id: 60457a509c6af89d0993f988c9b5c2aa9e45f5c5
2019-08-23 20:54:09 +00:00
|
|
|
"db/trim_history_scheduler.cc",
|
2017-11-15 22:13:39 +00:00
|
|
|
"db/version_builder.cc",
|
|
|
|
"db/version_edit.cc",
|
2020-03-21 02:17:54 +00:00
|
|
|
"db/version_edit_handler.cc",
|
2017-11-15 22:13:39 +00:00
|
|
|
"db/version_set.cc",
|
Define WAL related classes to be used in VersionEdit and VersionSet (#7164)
Summary:
`WalAddition`, `WalDeletion` are defined in `wal_version.h` and used in `VersionEdit`.
`WalAddition` is used to represent events of creating a new WAL (no size, just log number), or closing a WAL (with size).
`WalDeletion` is used to represent events of deleting or archiving a WAL, it means the WAL is no longer alive (won't be replayed during recovery).
`WalSet` is the set of alive WALs kept in `VersionSet`.
1. Why use `WalDeletion` instead of relying on `MinLogNumber` to identify outdated WALs
On recovery, we can compute `MinLogNumber()` based on the log numbers kept in MANIFEST, any log with number < MinLogNumber can be ignored. So it seems that we don't need to persist `WalDeletion` to MANIFEST, since we can ignore the WALs based on MinLogNumber.
But the `MinLogNumber()` is actually a lower bound, it does not exactly mean that logs starting from MinLogNumber must exist. This is because in a corner case, when a column family is empty and never flushed, its log number is set to the largest log number, but not persisted in MANIFEST. So let's say there are 2 column families, when creating the DB, the first WAL has log number 1, so it's persisted to MANIFEST for both column families. Then CF 0 is empty and never flushed, CF 1 is updated and flushed, so a new WAL with log number 2 is created and persisted to MANIFEST for CF 1. But CF 0's log number in MANIFEST is still 1. So on recovery, MinLogNumber is 1, but since log 1 only contains data for CF 1, and CF 1 is flushed, log 1 might have already been deleted from disk.
We can make `MinLogNumber()` be the exactly minimum log number that must exist, by persisting the most recent log number for empty column families that are not flushed. But if there are N such column families, then every time a new WAL is created, we need to add N records to MANIFEST.
In current design, a record is persisted to MANIFEST only when WAL is created, closed, or deleted/archived, so the number of WAL related records are bounded to 3x number of WALs.
2. Why keep `WalSet` in `VersionSet` instead of applying the `VersionEdit`s to `VersionStorageInfo`
`VersionEdit`s are originally designed to track the addition and deletion of SST files. The SST files are related to column families, each column family has a list of `Version`s, and each `Version` keeps the set of active SST files in `VersionStorageInfo`.
But WALs are a concept of DB, they are not bounded to specific column families. So logically it does not make sense to store WALs in a column family's `Version`s.
Also, `Version`'s purpose is to keep reference to SST / blob files, so that they are not deleted until there is no version referencing them. But a WAL is deleted regardless of version references.
So we keep the WALs in `VersionSet` for the purpose of writing out the DB state's snapshot when creating new MANIFESTs.
Pull Request resolved: https://github.com/facebook/rocksdb/pull/7164
Test Plan:
make version_edit_test && ./version_edit_test
make wal_edit_test && ./wal_edit_test
Reviewed By: ltamasi
Differential Revision: D22677936
Pulled By: cheng-chang
fbshipit-source-id: 5a3b6890140e572ffd79eb37e6e4c3c32361a859
2020-08-05 23:32:26 +00:00
|
|
|
"db/wal_edit.cc",
|
2017-11-15 22:13:39 +00:00
|
|
|
"db/wal_manager.cc",
|
|
|
|
"db/write_batch.cc",
|
|
|
|
"db/write_batch_base.cc",
|
|
|
|
"db/write_controller.cc",
|
|
|
|
"db/write_thread.cc",
|
2021-01-26 06:07:26 +00:00
|
|
|
"env/composite_env.cc",
|
2017-11-15 22:13:39 +00:00
|
|
|
"env/env.cc",
|
|
|
|
"env/env_chroot.cc",
|
|
|
|
"env/env_encryption.cc",
|
|
|
|
"env/env_hdfs.cc",
|
|
|
|
"env/env_posix.cc",
|
Introduce a new storage specific Env API (#5761)
Summary:
The current Env API encompasses both storage/file operations, as well as OS related operations. Most of the APIs return a Status, which does not have enough metadata about an error, such as whether its retry-able or not, scope (i.e fault domain) of the error etc., that may be required in order to properly handle a storage error. The file APIs also do not provide enough control over the IO SLA, such as timeout, prioritization, hinting about placement and redundancy etc.
This PR separates out the file/storage APIs from Env into a new FileSystem class. The APIs are updated to return an IOStatus with metadata about the error, as well as to take an IOOptions structure as input in order to allow more control over the IO.
The user can set both ```options.env``` and ```options.file_system``` to specify that RocksDB should use the former for OS related operations and the latter for storage operations. Internally, a ```CompositeEnvWrapper``` has been introduced that inherits from ```Env``` and redirects individual methods to either an ```Env``` implementation or the ```FileSystem``` as appropriate. When options are sanitized during ```DB::Open```, ```options.env``` is replaced with a newly allocated ```CompositeEnvWrapper``` instance if both env and file_system have been specified. This way, the rest of the RocksDB code can continue to function as before.
This PR also ports PosixEnv to the new API by splitting it into two - PosixEnv and PosixFileSystem. PosixEnv is defined as a sub-class of CompositeEnvWrapper, and threading/time functions are overridden with Posix specific implementations in order to avoid an extra level of indirection.
The ```CompositeEnvWrapper``` translates ```IOStatus``` return code to ```Status```, and sets the severity to ```kSoftError``` if the io_status is retryable. The error handling code in RocksDB can then recover the DB automatically.
Pull Request resolved: https://github.com/facebook/rocksdb/pull/5761
Differential Revision: D18868376
Pulled By: anand1976
fbshipit-source-id: 39efe18a162ea746fabac6360ff529baba48486f
2019-12-13 22:47:08 +00:00
|
|
|
"env/file_system.cc",
|
2020-07-13 23:35:29 +00:00
|
|
|
"env/file_system_tracer.cc",
|
Introduce a new storage specific Env API (#5761)
Summary:
The current Env API encompasses both storage/file operations, as well as OS related operations. Most of the APIs return a Status, which does not have enough metadata about an error, such as whether its retry-able or not, scope (i.e fault domain) of the error etc., that may be required in order to properly handle a storage error. The file APIs also do not provide enough control over the IO SLA, such as timeout, prioritization, hinting about placement and redundancy etc.
This PR separates out the file/storage APIs from Env into a new FileSystem class. The APIs are updated to return an IOStatus with metadata about the error, as well as to take an IOOptions structure as input in order to allow more control over the IO.
The user can set both ```options.env``` and ```options.file_system``` to specify that RocksDB should use the former for OS related operations and the latter for storage operations. Internally, a ```CompositeEnvWrapper``` has been introduced that inherits from ```Env``` and redirects individual methods to either an ```Env``` implementation or the ```FileSystem``` as appropriate. When options are sanitized during ```DB::Open```, ```options.env``` is replaced with a newly allocated ```CompositeEnvWrapper``` instance if both env and file_system have been specified. This way, the rest of the RocksDB code can continue to function as before.
This PR also ports PosixEnv to the new API by splitting it into two - PosixEnv and PosixFileSystem. PosixEnv is defined as a sub-class of CompositeEnvWrapper, and threading/time functions are overridden with Posix specific implementations in order to avoid an extra level of indirection.
The ```CompositeEnvWrapper``` translates ```IOStatus``` return code to ```Status```, and sets the severity to ```kSoftError``` if the io_status is retryable. The error handling code in RocksDB can then recover the DB automatically.
Pull Request resolved: https://github.com/facebook/rocksdb/pull/5761
Differential Revision: D18868376
Pulled By: anand1976
fbshipit-source-id: 39efe18a162ea746fabac6360ff529baba48486f
2019-12-13 22:47:08 +00:00
|
|
|
"env/fs_posix.cc",
|
Make backups openable as read-only DBs (#8142)
Summary:
A current limitation of backups is that you don't know the
exact database state of when the backup was taken. With this new
feature, you can at least inspect the backup's DB state without
restoring it by opening it as a read-only DB.
Rather than add something like OpenAsReadOnlyDB to the BackupEngine API,
which would inhibit opening stackable DB implementations read-only
(if/when their APIs support it), we instead provide a DB name and Env
that can be used to open as a read-only DB.
Possible follow-up work:
* Add a version of GetBackupInfo for a single backup.
* Let CreateNewBackup return the BackupID of the newly-created backup.
Implementation details:
Refactored ChrootFileSystem to split off new base class RemapFileSystem,
which allows more general remapping of files. We use this base class to
implement BackupEngineImpl::RemapSharedFileSystem.
To minimize API impact, I decided to just add these fields `name_for_open`
and `env_for_open` to those set by GetBackupInfo when
include_file_details=true. Creating the RemapSharedFileSystem adds a bit
to the memory consumption, perhaps unnecessarily in some cases, but this
has been mitigated by (a) only initialize the RemapSharedFileSystem
lazily when GetBackupInfo with include_file_details=true is called, and
(b) using the existing `shared_ptr<FileInfo>` objects to hold most of the
mapping data.
To enhance API safety, RemapSharedFileSystem is wrapped by new
ReadOnlyFileSystem which rejects any attempts to write. This uncovered a
couple of places in which DB::OpenForReadOnly would write to the
filesystem, so I fixed these. Added a release note because this affects
logging.
Additional minor refactoring in backupable_db.cc to support the new
functionality.
Pull Request resolved: https://github.com/facebook/rocksdb/pull/8142
Test Plan:
new test (run with ASAN and UBSAN), added to stress test and
ran it for a while with amplified backup_one_in
Reviewed By: ajkr
Differential Revision: D27535408
Pulled By: pdillinger
fbshipit-source-id: 04666d310aa0261ef6b2385c43ca793ce1dfd148
2021-04-06 21:36:45 +00:00
|
|
|
"env/fs_remap.cc",
|
2017-11-15 22:13:39 +00:00
|
|
|
"env/io_posix.cc",
|
|
|
|
"env/mock_env.cc",
|
2019-05-30 03:44:08 +00:00
|
|
|
"file/delete_scheduler.cc",
|
2019-09-16 17:31:27 +00:00
|
|
|
"file/file_prefetch_buffer.cc",
|
2019-05-30 03:44:08 +00:00
|
|
|
"file/file_util.cc",
|
|
|
|
"file/filename.cc",
|
2021-03-10 04:10:51 +00:00
|
|
|
"file/line_file_reader.cc",
|
2019-09-16 17:31:27 +00:00
|
|
|
"file/random_access_file_reader.cc",
|
|
|
|
"file/read_write_util.cc",
|
|
|
|
"file/readahead_raf.cc",
|
|
|
|
"file/sequence_file_reader.cc",
|
2019-05-30 03:44:08 +00:00
|
|
|
"file/sst_file_manager_impl.cc",
|
2019-09-16 17:31:27 +00:00
|
|
|
"file/writable_file_writer.cc",
|
2019-06-01 00:19:43 +00:00
|
|
|
"logging/auto_roll_logger.cc",
|
|
|
|
"logging/event_logger.cc",
|
|
|
|
"logging/log_buffer.cc",
|
2019-05-31 00:39:43 +00:00
|
|
|
"memory/arena.cc",
|
|
|
|
"memory/concurrent_arena.cc",
|
|
|
|
"memory/jemalloc_nodump_allocator.cc",
|
2020-04-27 00:33:50 +00:00
|
|
|
"memory/memkind_kmem_allocator.cc",
|
2017-11-15 22:13:39 +00:00
|
|
|
"memtable/alloc_tracker.cc",
|
|
|
|
"memtable/hash_linklist_rep.cc",
|
|
|
|
"memtable/hash_skiplist_rep.cc",
|
|
|
|
"memtable/skiplistrep.cc",
|
|
|
|
"memtable/vectorrep.cc",
|
|
|
|
"memtable/write_buffer_manager.cc",
|
|
|
|
"monitoring/histogram.cc",
|
|
|
|
"monitoring/histogram_windowing.cc",
|
2019-06-17 22:17:43 +00:00
|
|
|
"monitoring/in_memory_stats_history.cc",
|
2017-11-15 22:13:39 +00:00
|
|
|
"monitoring/instrumented_mutex.cc",
|
|
|
|
"monitoring/iostats_context.cc",
|
|
|
|
"monitoring/perf_context.cc",
|
|
|
|
"monitoring/perf_level.cc",
|
2019-06-17 22:17:43 +00:00
|
|
|
"monitoring/persistent_stats_history.cc",
|
2017-11-15 22:13:39 +00:00
|
|
|
"monitoring/statistics.cc",
|
|
|
|
"monitoring/thread_status_impl.cc",
|
|
|
|
"monitoring/thread_status_updater.cc",
|
|
|
|
"monitoring/thread_status_updater_debug.cc",
|
|
|
|
"monitoring/thread_status_util.cc",
|
|
|
|
"monitoring/thread_status_util_debug.cc",
|
|
|
|
"options/cf_options.cc",
|
2020-09-14 23:59:00 +00:00
|
|
|
"options/configurable.cc",
|
2020-11-11 23:09:14 +00:00
|
|
|
"options/customizable.cc",
|
2017-11-15 22:13:39 +00:00
|
|
|
"options/db_options.cc",
|
|
|
|
"options/options.cc",
|
|
|
|
"options/options_helper.cc",
|
|
|
|
"options/options_parser.cc",
|
|
|
|
"port/port_posix.cc",
|
|
|
|
"port/stack_trace.cc",
|
2020-09-23 19:54:29 +00:00
|
|
|
"port/win/env_default.cc",
|
|
|
|
"port/win/env_win.cc",
|
|
|
|
"port/win/io_win.cc",
|
|
|
|
"port/win/port_win.cc",
|
|
|
|
"port/win/win_logger.cc",
|
|
|
|
"port/win/win_thread.cc",
|
2019-05-30 21:47:29 +00:00
|
|
|
"table/adaptive/adaptive_table_factory.cc",
|
2020-03-13 04:39:36 +00:00
|
|
|
"table/block_based/binary_search_index_reader.cc",
|
2019-05-30 21:47:29 +00:00
|
|
|
"table/block_based/block.cc",
|
|
|
|
"table/block_based/block_based_filter_block.cc",
|
|
|
|
"table/block_based/block_based_table_builder.cc",
|
|
|
|
"table/block_based/block_based_table_factory.cc",
|
De-template block based table iterator (#6531)
Summary:
Right now block based table iterator is used as both of iterating data for block based table, and for the index iterator for partitioend index. This was initially convenient for introducing a new iterator and block type for new index format, while reducing code change. However, these two usage doesn't go with each other very well. For example, Prev() is never called for partitioned index iterator, and some other complexity is maintained in block based iterators, which is not needed for index iterator but maintainers will always need to reason about it. Furthermore, the template usage is not following Google C++ Style which we are following, and makes a large chunk of code tangled together. This commit separate the two iterators. Right now, here is what it is done:
1. Copy the block based iterator code into partitioned index iterator, and de-template them.
2. Remove some code not needed for partitioned index. The upper bound check and tricks are removed. We never tested performance for those tricks when partitioned index is enabled in the first place. It's unlikelyl to generate performance regression, as creating new partitioned index block is much rarer than data blocks.
3. Separate out the prefetch logic to a helper class and both classes call them.
This commit will enable future follow-ups. One direction is that we might separate index iterator interface for data blocks and index blocks, as they are quite different.
Pull Request resolved: https://github.com/facebook/rocksdb/pull/6531
Test Plan: build using make and cmake. And build release
Differential Revision: D20473108
fbshipit-source-id: e48011783b339a4257c204cc07507b171b834b0f
2020-03-16 19:17:34 +00:00
|
|
|
"table/block_based/block_based_table_iterator.cc",
|
2019-05-30 21:47:29 +00:00
|
|
|
"table/block_based/block_based_table_reader.cc",
|
|
|
|
"table/block_based/block_builder.cc",
|
De-template block based table iterator (#6531)
Summary:
Right now block based table iterator is used as both of iterating data for block based table, and for the index iterator for partitioend index. This was initially convenient for introducing a new iterator and block type for new index format, while reducing code change. However, these two usage doesn't go with each other very well. For example, Prev() is never called for partitioned index iterator, and some other complexity is maintained in block based iterators, which is not needed for index iterator but maintainers will always need to reason about it. Furthermore, the template usage is not following Google C++ Style which we are following, and makes a large chunk of code tangled together. This commit separate the two iterators. Right now, here is what it is done:
1. Copy the block based iterator code into partitioned index iterator, and de-template them.
2. Remove some code not needed for partitioned index. The upper bound check and tricks are removed. We never tested performance for those tricks when partitioned index is enabled in the first place. It's unlikelyl to generate performance regression, as creating new partitioned index block is much rarer than data blocks.
3. Separate out the prefetch logic to a helper class and both classes call them.
This commit will enable future follow-ups. One direction is that we might separate index iterator interface for data blocks and index blocks, as they are quite different.
Pull Request resolved: https://github.com/facebook/rocksdb/pull/6531
Test Plan: build using make and cmake. And build release
Differential Revision: D20473108
fbshipit-source-id: e48011783b339a4257c204cc07507b171b834b0f
2020-03-16 19:17:34 +00:00
|
|
|
"table/block_based/block_prefetcher.cc",
|
2019-05-30 21:47:29 +00:00
|
|
|
"table/block_based/block_prefix_index.cc",
|
|
|
|
"table/block_based/data_block_footer.cc",
|
2019-05-31 00:39:43 +00:00
|
|
|
"table/block_based/data_block_hash_index.cc",
|
Move the filter readers out of the block cache (#5504)
Summary:
Currently, when the block cache is used for the filter block, it is not
really the block itself that is stored in the cache but a FilterBlockReader
object. Since this object is not pure data (it has, for instance, pointers that
might dangle, including in one case a back pointer to the TableReader), it's not
really sharable. To avoid the issues around this, the current code erases the
cache entries when the TableReader is closed (which, BTW, is not sufficient
since a concurrent TableReader might have picked up the object in the meantime).
Instead of doing this, the patch moves the FilterBlockReader out of the cache
altogether, and decouples the filter reader object from the filter block.
In particular, instead of the TableReader owning, or caching/pinning the
FilterBlockReader (based on the customer's settings), with the change the
TableReader unconditionally owns the FilterBlockReader, which in turn
owns/caches/pins the filter block. This change also enables us to reuse the code
paths historically used for data blocks for filters as well.
Note:
Eviction statistics for filter blocks are temporarily broken. We plan to fix this in a
separate phase.
Pull Request resolved: https://github.com/facebook/rocksdb/pull/5504
Test Plan: make asan_check
Differential Revision: D16036974
Pulled By: ltamasi
fbshipit-source-id: 770f543c5fb4ed126fd1e04bfd3809cf4ff9c091
2019-07-16 20:11:23 +00:00
|
|
|
"table/block_based/filter_block_reader_common.cc",
|
2019-10-24 22:43:27 +00:00
|
|
|
"table/block_based/filter_policy.cc",
|
2019-05-30 21:47:29 +00:00
|
|
|
"table/block_based/flush_block_policy.cc",
|
|
|
|
"table/block_based/full_filter_block.cc",
|
2020-03-13 04:39:36 +00:00
|
|
|
"table/block_based/hash_index_reader.cc",
|
2019-05-30 21:47:29 +00:00
|
|
|
"table/block_based/index_builder.cc",
|
2020-03-13 04:39:36 +00:00
|
|
|
"table/block_based/index_reader_common.cc",
|
2019-10-19 02:30:47 +00:00
|
|
|
"table/block_based/parsed_full_filter_block.cc",
|
2019-05-30 21:47:29 +00:00
|
|
|
"table/block_based/partitioned_filter_block.cc",
|
De-template block based table iterator (#6531)
Summary:
Right now block based table iterator is used as both of iterating data for block based table, and for the index iterator for partitioend index. This was initially convenient for introducing a new iterator and block type for new index format, while reducing code change. However, these two usage doesn't go with each other very well. For example, Prev() is never called for partitioned index iterator, and some other complexity is maintained in block based iterators, which is not needed for index iterator but maintainers will always need to reason about it. Furthermore, the template usage is not following Google C++ Style which we are following, and makes a large chunk of code tangled together. This commit separate the two iterators. Right now, here is what it is done:
1. Copy the block based iterator code into partitioned index iterator, and de-template them.
2. Remove some code not needed for partitioned index. The upper bound check and tricks are removed. We never tested performance for those tricks when partitioned index is enabled in the first place. It's unlikelyl to generate performance regression, as creating new partitioned index block is much rarer than data blocks.
3. Separate out the prefetch logic to a helper class and both classes call them.
This commit will enable future follow-ups. One direction is that we might separate index iterator interface for data blocks and index blocks, as they are quite different.
Pull Request resolved: https://github.com/facebook/rocksdb/pull/6531
Test Plan: build using make and cmake. And build release
Differential Revision: D20473108
fbshipit-source-id: e48011783b339a4257c204cc07507b171b834b0f
2020-03-16 19:17:34 +00:00
|
|
|
"table/block_based/partitioned_index_iterator.cc",
|
2020-03-13 04:39:36 +00:00
|
|
|
"table/block_based/partitioned_index_reader.cc",
|
|
|
|
"table/block_based/reader_common.cc",
|
2019-07-23 22:57:43 +00:00
|
|
|
"table/block_based/uncompression_dict_reader.cc",
|
2017-12-11 23:16:37 +00:00
|
|
|
"table/block_fetcher.cc",
|
2019-05-30 21:47:29 +00:00
|
|
|
"table/cuckoo/cuckoo_table_builder.cc",
|
|
|
|
"table/cuckoo/cuckoo_table_factory.cc",
|
|
|
|
"table/cuckoo/cuckoo_table_reader.cc",
|
2017-11-15 22:13:39 +00:00
|
|
|
"table/format.cc",
|
|
|
|
"table/get_context.cc",
|
|
|
|
"table/iterator.cc",
|
|
|
|
"table/merging_iterator.cc",
|
|
|
|
"table/meta_blocks.cc",
|
|
|
|
"table/persistent_cache_helper.cc",
|
2019-09-05 17:03:42 +00:00
|
|
|
"table/plain/plain_table_bloom.cc",
|
2019-05-30 21:47:29 +00:00
|
|
|
"table/plain/plain_table_builder.cc",
|
|
|
|
"table/plain/plain_table_factory.cc",
|
|
|
|
"table/plain/plain_table_index.cc",
|
|
|
|
"table/plain/plain_table_key_coding.cc",
|
|
|
|
"table/plain/plain_table_reader.cc",
|
2020-06-25 02:30:15 +00:00
|
|
|
"table/sst_file_dumper.cc",
|
2018-11-27 20:59:27 +00:00
|
|
|
"table/sst_file_reader.cc",
|
2017-11-15 22:13:39 +00:00
|
|
|
"table/sst_file_writer.cc",
|
2020-09-14 23:59:00 +00:00
|
|
|
"table/table_factory.cc",
|
2017-11-15 22:13:39 +00:00
|
|
|
"table/table_properties.cc",
|
|
|
|
"table/two_level_iterator.cc",
|
2019-05-30 18:21:38 +00:00
|
|
|
"test_util/sync_point.cc",
|
|
|
|
"test_util/sync_point_impl.cc",
|
|
|
|
"test_util/transaction_test_util.cc",
|
2017-11-15 22:13:39 +00:00
|
|
|
"tools/dump/db_dump_tool.cc",
|
2020-09-23 22:49:11 +00:00
|
|
|
"tools/io_tracer_parser_tool.cc",
|
2017-11-15 22:13:39 +00:00
|
|
|
"tools/ldb_cmd.cc",
|
|
|
|
"tools/ldb_tool.cc",
|
|
|
|
"tools/sst_dump_tool.cc",
|
2019-06-13 22:39:52 +00:00
|
|
|
"trace_replay/block_cache_tracer.cc",
|
2020-06-18 17:44:32 +00:00
|
|
|
"trace_replay/io_tracer.cc",
|
2019-06-03 20:21:02 +00:00
|
|
|
"trace_replay/trace_replay.cc",
|
2017-11-15 22:13:39 +00:00
|
|
|
"util/build_version.cc",
|
|
|
|
"util/coding.cc",
|
|
|
|
"util/compaction_job_stats_impl.cc",
|
|
|
|
"util/comparator.cc",
|
2018-06-04 19:04:52 +00:00
|
|
|
"util/compression_context_cache.cc",
|
Concurrent task limiter for compaction thread control (#4332)
Summary:
The PR is targeting to resolve the issue of:
https://github.com/facebook/rocksdb/issues/3972#issue-330771918
We have a rocksdb created with leveled-compaction with multiple column families (CFs), some of CFs are using HDD to store big and less frequently accessed data and others are using SSD.
When there are continuously write traffics going on to all CFs, the compaction thread pool is mostly occupied by those slow HDD compactions, which blocks fully utilize SSD bandwidth.
Since atomic write and transaction is needed across CFs, so splitting it to multiple rocksdb instance is not an option for us.
With the compaction thread control, we got 30%+ HDD write throughput gain, and also a lot smooth SSD write since less write stall happening.
ConcurrentTaskLimiter can be shared with multi-CFs across rocksdb instances, so the feature does not only work for multi-CFs scenarios, but also for multi-rocksdbs scenarios, who need disk IO resource control per tenant.
The usage is straight forward:
e.g.:
//
// Enable compaction thread limiter thru ColumnFamilyOptions
//
std::shared_ptr<ConcurrentTaskLimiter> ctl(NewConcurrentTaskLimiter("foo_limiter", 4));
Options options;
ColumnFamilyOptions cf_opt(options);
cf_opt.compaction_thread_limiter = ctl;
...
//
// Compaction thread limiter can be tuned or disabled on-the-fly
//
ctl->SetMaxOutstandingTask(12); // enlarge to 12 tasks
...
ctl->ResetMaxOutstandingTask(); // disable (bypass) thread limiter
ctl->SetMaxOutstandingTask(-1); // Same as above
...
ctl->SetMaxOutstandingTask(0); // full throttle (0 task)
//
// Sharing compaction thread limiter among CFs (to resolve multiple storage perf issue)
//
std::shared_ptr<ConcurrentTaskLimiter> ctl_ssd(NewConcurrentTaskLimiter("ssd_limiter", 8));
std::shared_ptr<ConcurrentTaskLimiter> ctl_hdd(NewConcurrentTaskLimiter("hdd_limiter", 4));
Options options;
ColumnFamilyOptions cf_opt_ssd1(options);
ColumnFamilyOptions cf_opt_ssd2(options);
ColumnFamilyOptions cf_opt_hdd1(options);
ColumnFamilyOptions cf_opt_hdd2(options);
ColumnFamilyOptions cf_opt_hdd3(options);
// SSD CFs
cf_opt_ssd1.compaction_thread_limiter = ctl_ssd;
cf_opt_ssd2.compaction_thread_limiter = ctl_ssd;
// HDD CFs
cf_opt_hdd1.compaction_thread_limiter = ctl_hdd;
cf_opt_hdd2.compaction_thread_limiter = ctl_hdd;
cf_opt_hdd3.compaction_thread_limiter = ctl_hdd;
...
//
// The limiter is disabled by default (or set to nullptr explicitly)
//
Options options;
ColumnFamilyOptions cf_opt(options);
cf_opt.compaction_thread_limiter = nullptr;
Pull Request resolved: https://github.com/facebook/rocksdb/pull/4332
Differential Revision: D13226590
Pulled By: siying
fbshipit-source-id: 14307aec55b8bd59c8223d04aa6db3c03d1b0c1d
2018-12-13 21:16:04 +00:00
|
|
|
"util/concurrent_task_limiter_impl.cc",
|
2017-11-15 22:13:39 +00:00
|
|
|
"util/crc32c.cc",
|
2021-04-12 17:56:42 +00:00
|
|
|
"util/crc32c_arm64.cc",
|
2017-11-15 22:13:39 +00:00
|
|
|
"util/dynamic_bloom.cc",
|
2020-02-10 23:42:46 +00:00
|
|
|
"util/file_checksum_helper.cc",
|
2017-11-15 22:13:39 +00:00
|
|
|
"util/hash.cc",
|
|
|
|
"util/murmurhash.cc",
|
|
|
|
"util/random.cc",
|
|
|
|
"util/rate_limiter.cc",
|
Refine Ribbon configuration, improve testing, add Homogeneous (#7879)
Summary:
This change only affects non-schema-critical aspects of the production candidate Ribbon filter. Specifically, it refines choice of internal configuration parameters based on inputs. The changes are minor enough that the schema tests in bloom_test, some of which depend on this, are unaffected. There are also some minor optimizations and refactorings.
This would be a schema change for "smash" Ribbon, to fix some known issues with small filters, but "smash" Ribbon is not accessible in public APIs. Unit test CompactnessAndBacktrackAndFpRate updated to test small and medium-large filters. Run with --thoroughness=100 or so for much better detection power (not appropriate for continuous regression testing).
Homogenous Ribbon:
This change adds internally a Ribbon filter variant we call Homogeneous Ribbon, in collaboration with Stefan Walzer. The expected "result" value for every key is zero, instead of computed from a hash. Entropy for queries not to be false positives comes from free variables ("overhead") in the solution structure, which are populated pseudorandomly. Construction is slightly faster for not tracking result values, and never fails. Instead, FP rate can jump up whenever and whereever entries are packed too tightly. For small structures, we can choose overhead to make this FP rate jump unlikely, as seen in updated unit test CompactnessAndBacktrackAndFpRate.
Unlike standard Ribbon, Homogeneous Ribbon seems to scale to arbitrary number of keys when accepting an FP rate penalty for small pockets of high FP rate in the structure. For example, 64-bit ribbon with 8 solution columns and 10% allocated space overhead for slots seems to achieve about 10.5% space overhead vs. information-theoretic minimum based on its observed FP rate with expected pockets of degradation. (FP rate is close to 1/256.) If targeting a higher FP rate with fewer solution columns, Homogeneous Ribbon can be even more space efficient, because the penalty from degradation is relatively smaller. If targeting a lower FP rate, Homogeneous Ribbon is less space efficient, as more allocated overhead is needed to keep the FP rate impact of degradation relatively under control. The new OptimizeHomogAtScale tool in ribbon_test helps to find these optimal allocation overheads for different numbers of solution columns. And Ribbon widths, with 128-bit Ribbon apparently cutting space overheads in half vs. 64-bit.
Other misc item specifics:
* Ribbon APIs in util/ribbon_config.h now provide configuration data for not just 5% construction failure rate (95% success), but also 50% and 0.1%.
* Note that the Ribbon structure does not exhibit "threshold" behavior as standard Xor filter does, so there is a roughly fixed space penalty to cut construction failure rate in half. Thus, there isn't really an "almost sure" setting.
* Although we can extrapolate settings for large filters, we don't have a good formula for configuring smaller filters (< 2^17 slots or so), and efforts to summarize with a formula have failed. Thus, small data is hard-coded from updated FindOccupancy tool.
* Enhances ApproximateNumEntries for public API Ribbon using more precise data (new API GetNumToAdd), thus a more accurate but not perfect reversal of CalculateSpace. (bloom_test updated to expect the greater precision)
* Move EndianSwapValue from coding.h to coding_lean.h to keep Ribbon code easily transferable from RocksDB
* Add some missing 'const' to member functions
* Small optimization to 128-bit BitParity
* Small refactoring of BandingStorage in ribbon_alg.h to support Homogeneous Ribbon
* CompactnessAndBacktrackAndFpRate now has an "expand" test: on construction failure, a possible alternative to re-seeding hash functions is simply to increase the number of slots (allocated space overhead) and try again with essentially the same hash values. (Start locations will be different roundings of the same scaled hash values--because fastrange not mod.) This seems to be as effective or more effective than re-seeding, as long as we increase the number of slots (m) by roughly m += m/w where w is the Ribbon width. This way, there is effectively an expansion by one slot for each ribbon-width window in the banding. (This approach assumes that getting "bad data" from your hash function is as unlikely as it naturally should be, e.g. no adversary.)
* 32-bit and 16-bit Ribbon configurations are added to ribbon_test for understanding their behavior, e.g. with FindOccupancy. They are not considered useful at this time and not tested with CompactnessAndBacktrackAndFpRate.
Pull Request resolved: https://github.com/facebook/rocksdb/pull/7879
Test Plan: unit test updates included
Reviewed By: jay-zhuang
Differential Revision: D26371245
Pulled By: pdillinger
fbshipit-source-id: da6600d90a3785b99ad17a88b2a3027710b4ea3a
2021-02-26 16:48:55 +00:00
|
|
|
"util/ribbon_config.cc",
|
2017-11-15 22:13:39 +00:00
|
|
|
"util/slice.cc",
|
|
|
|
"util/status.cc",
|
|
|
|
"util/string_util.cc",
|
|
|
|
"util/thread_local.cc",
|
|
|
|
"util/threadpool_imp.cc",
|
|
|
|
"util/xxhash.cc",
|
|
|
|
"utilities/backupable/backupable_db.cc",
|
2018-03-06 19:46:20 +00:00
|
|
|
"utilities/blob_db/blob_compaction_filter.cc",
|
2017-11-15 22:13:39 +00:00
|
|
|
"utilities/blob_db/blob_db.cc",
|
|
|
|
"utilities/blob_db/blob_db_impl.cc",
|
2018-08-27 17:56:28 +00:00
|
|
|
"utilities/blob_db/blob_db_impl_filesnapshot.cc",
|
2017-11-15 22:13:39 +00:00
|
|
|
"utilities/blob_db/blob_dump_tool.cc",
|
|
|
|
"utilities/blob_db/blob_file.cc",
|
|
|
|
"utilities/cassandra/cassandra_compaction_filter.cc",
|
|
|
|
"utilities/cassandra/format.cc",
|
|
|
|
"utilities/cassandra/merge_operator.cc",
|
|
|
|
"utilities/checkpoint/checkpoint_impl.cc",
|
|
|
|
"utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc",
|
|
|
|
"utilities/convenience/info_log_finder.cc",
|
|
|
|
"utilities/debug.cc",
|
|
|
|
"utilities/env_mirror.cc",
|
|
|
|
"utilities/env_timed.cc",
|
2020-07-09 21:33:42 +00:00
|
|
|
"utilities/fault_injection_env.cc",
|
|
|
|
"utilities/fault_injection_fs.cc",
|
2017-11-15 22:13:39 +00:00
|
|
|
"utilities/leveldb_options/leveldb_options.cc",
|
|
|
|
"utilities/memory/memory_util.cc",
|
2018-03-06 18:20:52 +00:00
|
|
|
"utilities/merge_operators/bytesxor.cc",
|
2017-11-15 22:13:39 +00:00
|
|
|
"utilities/merge_operators/max.cc",
|
|
|
|
"utilities/merge_operators/put.cc",
|
New API to get all merge operands for a Key (#5604)
Summary:
This is a new API added to db.h to allow for fetching all merge operands associated with a Key. The main motivation for this API is to support use cases where doing a full online merge is not necessary as it is performance sensitive. Example use-cases:
1. Update subset of columns and read subset of columns -
Imagine a SQL Table, a row is encoded as a K/V pair (as it is done in MyRocks). If there are many columns and users only updated one of them, we can use merge operator to reduce write amplification. While users only read one or two columns in the read query, this feature can avoid a full merging of the whole row, and save some CPU.
2. Updating very few attributes in a value which is a JSON-like document -
Updating one attribute can be done efficiently using merge operator, while reading back one attribute can be done more efficiently if we don't need to do a full merge.
----------------------------------------------------------------------------------------------------
API :
Status GetMergeOperands(
const ReadOptions& options, ColumnFamilyHandle* column_family,
const Slice& key, PinnableSlice* merge_operands,
GetMergeOperandsOptions* get_merge_operands_options,
int* number_of_operands)
Example usage :
int size = 100;
int number_of_operands = 0;
std::vector<PinnableSlice> values(size);
GetMergeOperandsOptions merge_operands_info;
db_->GetMergeOperands(ReadOptions(), db_->DefaultColumnFamily(), "k1", values.data(), merge_operands_info, &number_of_operands);
Description :
Returns all the merge operands corresponding to the key. If the number of merge operands in DB is greater than merge_operands_options.expected_max_number_of_operands no merge operands are returned and status is Incomplete. Merge operands returned are in the order of insertion.
merge_operands-> Points to an array of at-least merge_operands_options.expected_max_number_of_operands and the caller is responsible for allocating it. If the status returned is Incomplete then number_of_operands will contain the total number of merge operands found in DB for key.
Pull Request resolved: https://github.com/facebook/rocksdb/pull/5604
Test Plan:
Added unit test and perf test in db_bench that can be run using the command:
./db_bench -benchmarks=getmergeoperands --merge_operator=sortlist
Differential Revision: D16657366
Pulled By: vjnadimpalli
fbshipit-source-id: 0faadd752351745224ee12d4ae9ef3cb529951bf
2019-08-06 21:22:34 +00:00
|
|
|
"utilities/merge_operators/sortlist.cc",
|
2017-11-15 22:13:39 +00:00
|
|
|
"utilities/merge_operators/string_append/stringappend.cc",
|
|
|
|
"utilities/merge_operators/string_append/stringappend2.cc",
|
|
|
|
"utilities/merge_operators/uint64add.cc",
|
2019-07-24 00:08:26 +00:00
|
|
|
"utilities/object_registry.cc",
|
2017-11-15 22:13:39 +00:00
|
|
|
"utilities/option_change_migration/option_change_migration.cc",
|
|
|
|
"utilities/options/options_util.cc",
|
|
|
|
"utilities/persistent_cache/block_cache_tier.cc",
|
|
|
|
"utilities/persistent_cache/block_cache_tier_file.cc",
|
|
|
|
"utilities/persistent_cache/block_cache_tier_metadata.cc",
|
|
|
|
"utilities/persistent_cache/persistent_cache_tier.cc",
|
|
|
|
"utilities/persistent_cache/volatile_tier_impl.cc",
|
2019-07-01 19:43:14 +00:00
|
|
|
"utilities/simulator_cache/cache_simulator.cc",
|
2017-11-15 22:13:39 +00:00
|
|
|
"utilities/simulator_cache/sim_cache.cc",
|
|
|
|
"utilities/table_properties_collectors/compact_on_deletion_collector.cc",
|
2018-08-15 21:27:47 +00:00
|
|
|
"utilities/trace/file_trace_reader_writer.cc",
|
2020-10-19 17:12:53 +00:00
|
|
|
"utilities/transactions/lock/lock_manager.cc",
|
|
|
|
"utilities/transactions/lock/point/point_lock_manager.cc",
|
|
|
|
"utilities/transactions/lock/point/point_lock_tracker.cc",
|
2020-12-09 20:09:46 +00:00
|
|
|
"utilities/transactions/lock/range/range_tree/lib/locktree/concurrent_tree.cc",
|
|
|
|
"utilities/transactions/lock/range/range_tree/lib/locktree/keyrange.cc",
|
|
|
|
"utilities/transactions/lock/range/range_tree/lib/locktree/lock_request.cc",
|
|
|
|
"utilities/transactions/lock/range/range_tree/lib/locktree/locktree.cc",
|
|
|
|
"utilities/transactions/lock/range/range_tree/lib/locktree/manager.cc",
|
|
|
|
"utilities/transactions/lock/range/range_tree/lib/locktree/range_buffer.cc",
|
|
|
|
"utilities/transactions/lock/range/range_tree/lib/locktree/treenode.cc",
|
|
|
|
"utilities/transactions/lock/range/range_tree/lib/locktree/txnid_set.cc",
|
|
|
|
"utilities/transactions/lock/range/range_tree/lib/locktree/wfg.cc",
|
|
|
|
"utilities/transactions/lock/range/range_tree/lib/standalone_port.cc",
|
|
|
|
"utilities/transactions/lock/range/range_tree/lib/util/dbt.cc",
|
|
|
|
"utilities/transactions/lock/range/range_tree/lib/util/memarena.cc",
|
2020-12-23 03:10:56 +00:00
|
|
|
"utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc",
|
|
|
|
"utilities/transactions/lock/range/range_tree/range_tree_lock_tracker.cc",
|
2017-11-15 22:13:39 +00:00
|
|
|
"utilities/transactions/optimistic_transaction.cc",
|
|
|
|
"utilities/transactions/optimistic_transaction_db_impl.cc",
|
|
|
|
"utilities/transactions/pessimistic_transaction.cc",
|
|
|
|
"utilities/transactions/pessimistic_transaction_db.cc",
|
|
|
|
"utilities/transactions/snapshot_checker.cc",
|
|
|
|
"utilities/transactions/transaction_base.cc",
|
|
|
|
"utilities/transactions/transaction_db_mutex_impl.cc",
|
|
|
|
"utilities/transactions/transaction_util.cc",
|
|
|
|
"utilities/transactions/write_prepared_txn.cc",
|
|
|
|
"utilities/transactions/write_prepared_txn_db.cc",
|
2018-05-31 17:42:44 +00:00
|
|
|
"utilities/transactions/write_unprepared_txn.cc",
|
|
|
|
"utilities/transactions/write_unprepared_txn_db.cc",
|
2017-11-15 22:13:39 +00:00
|
|
|
"utilities/ttl/db_ttl_impl.cc",
|
|
|
|
"utilities/write_batch_with_index/write_batch_with_index.cc",
|
|
|
|
"utilities/write_batch_with_index/write_batch_with_index_internal.cc",
|
2017-04-04 23:09:31 +00:00
|
|
|
],
|
2018-10-18 20:56:46 +00:00
|
|
|
auto_headers = AutoHeaders.RECURSIVE_GLOB,
|
2019-01-07 21:35:12 +00:00
|
|
|
arch_preprocessor_flags = ROCKSDB_ARCH_PREPROCESSOR_FLAGS,
|
|
|
|
compiler_flags = ROCKSDB_COMPILER_FLAGS,
|
2019-07-25 18:42:31 +00:00
|
|
|
os_deps = ROCKSDB_OS_DEPS,
|
|
|
|
os_preprocessor_flags = ROCKSDB_OS_PREPROCESSOR_FLAGS,
|
2019-01-07 21:35:12 +00:00
|
|
|
preprocessor_flags = ROCKSDB_PREPROCESSOR_FLAGS,
|
2021-04-03 21:41:25 +00:00
|
|
|
include_paths = ROCKSDB_INCLUDE_PATHS,
|
2017-11-15 22:13:39 +00:00
|
|
|
deps = [],
|
2019-01-07 21:35:12 +00:00
|
|
|
external_deps = ROCKSDB_EXTERNAL_DEPS,
|
2020-10-01 05:49:20 +00:00
|
|
|
link_whole = False,
|
|
|
|
)
|
|
|
|
|
|
|
|
cpp_library(
|
|
|
|
name = "rocksdb_whole_archive_lib",
|
|
|
|
srcs = [
|
|
|
|
"cache/cache.cc",
|
Use deleters to label cache entries and collect stats (#8297)
Summary:
This change gathers and publishes statistics about the
kinds of items in block cache. This is especially important for
profiling relative usage of cache by index vs. filter vs. data blocks.
It works by iterating over the cache during periodic stats dump
(InternalStats, stats_dump_period_sec) or on demand when
DB::Get(Map)Property(kBlockCacheEntryStats), except that for
efficiency and sharing among column families, saved data from
the last scan is used when the data is not considered too old.
The new information can be seen in info LOG, for example:
Block cache LRUCache@0x7fca62229330 capacity: 95.37 MB collections: 8 last_copies: 0 last_secs: 0.00178 secs_since: 0
Block cache entry stats(count,size,portion): DataBlock(7092,28.24 MB,29.6136%) FilterBlock(215,867.90 KB,0.888728%) FilterMetaBlock(2,5.31 KB,0.00544%) IndexBlock(217,180.11 KB,0.184432%) WriteBuffer(1,256.00 KB,0.262144%) Misc(1,0.00 KB,0%)
And also through DB::GetProperty and GetMapProperty (here using
ldb just for demonstration):
$ ./ldb --db=/dev/shm/dbbench/ get_property rocksdb.block-cache-entry-stats
rocksdb.block-cache-entry-stats.bytes.data-block: 0
rocksdb.block-cache-entry-stats.bytes.deprecated-filter-block: 0
rocksdb.block-cache-entry-stats.bytes.filter-block: 0
rocksdb.block-cache-entry-stats.bytes.filter-meta-block: 0
rocksdb.block-cache-entry-stats.bytes.index-block: 178992
rocksdb.block-cache-entry-stats.bytes.misc: 0
rocksdb.block-cache-entry-stats.bytes.other-block: 0
rocksdb.block-cache-entry-stats.bytes.write-buffer: 0
rocksdb.block-cache-entry-stats.capacity: 8388608
rocksdb.block-cache-entry-stats.count.data-block: 0
rocksdb.block-cache-entry-stats.count.deprecated-filter-block: 0
rocksdb.block-cache-entry-stats.count.filter-block: 0
rocksdb.block-cache-entry-stats.count.filter-meta-block: 0
rocksdb.block-cache-entry-stats.count.index-block: 215
rocksdb.block-cache-entry-stats.count.misc: 1
rocksdb.block-cache-entry-stats.count.other-block: 0
rocksdb.block-cache-entry-stats.count.write-buffer: 0
rocksdb.block-cache-entry-stats.id: LRUCache@0x7f3636661290
rocksdb.block-cache-entry-stats.percent.data-block: 0.000000
rocksdb.block-cache-entry-stats.percent.deprecated-filter-block: 0.000000
rocksdb.block-cache-entry-stats.percent.filter-block: 0.000000
rocksdb.block-cache-entry-stats.percent.filter-meta-block: 0.000000
rocksdb.block-cache-entry-stats.percent.index-block: 2.133751
rocksdb.block-cache-entry-stats.percent.misc: 0.000000
rocksdb.block-cache-entry-stats.percent.other-block: 0.000000
rocksdb.block-cache-entry-stats.percent.write-buffer: 0.000000
rocksdb.block-cache-entry-stats.secs_for_last_collection: 0.000052
rocksdb.block-cache-entry-stats.secs_since_last_collection: 0
Solution detail - We need some way to flag what kind of blocks each
entry belongs to, preferably without changing the Cache API.
One of the complications is that Cache is a general interface that could
have other users that don't adhere to whichever convention we decide
on for keys and values. Or we would pay for an extra field in the Handle
that would only be used for this purpose.
This change uses a back-door approach, the deleter, to indicate the
"role" of a Cache entry (in addition to the value type, implicitly).
This has the added benefit of ensuring proper code origin whenever we
recognize a particular role for a cache entry; if the entry came from
some other part of the code, it will use an unrecognized deleter, which
we simply attribute to the "Misc" role.
An internal API makes for simple instantiation and automatic
registration of Cache deleters for a given value type and "role".
Another internal API, CacheEntryStatsCollector, solves the problem of
caching the results of a scan and sharing them, to ensure scans are
neither excessive nor redundant so as not to harm Cache performance.
Because code is added to BlocklikeTraits, it is pulled out of
block_based_table_reader.cc into its own file.
This is a reformulation of https://github.com/facebook/rocksdb/issues/8276, without the type checking option
(could still be added), and with actual stat gathering.
Pull Request resolved: https://github.com/facebook/rocksdb/pull/8297
Test Plan: manual testing with db_bench, and a couple of basic unit tests
Reviewed By: ltamasi
Differential Revision: D28488721
Pulled By: pdillinger
fbshipit-source-id: 472f524a9691b5afb107934be2d41d84f2b129fb
2021-05-19 23:45:51 +00:00
|
|
|
"cache/cache_entry_roles.cc",
|
2020-10-01 05:49:20 +00:00
|
|
|
"cache/clock_cache.cc",
|
|
|
|
"cache/lru_cache.cc",
|
|
|
|
"cache/sharded_cache.cc",
|
|
|
|
"db/arena_wrapped_db_iter.cc",
|
2021-06-10 19:55:29 +00:00
|
|
|
"db/blob/blob_fetcher.cc",
|
2020-10-01 05:49:20 +00:00
|
|
|
"db/blob/blob_file_addition.cc",
|
|
|
|
"db/blob/blob_file_builder.cc",
|
2020-10-15 20:02:44 +00:00
|
|
|
"db/blob/blob_file_cache.cc",
|
2020-10-01 05:49:20 +00:00
|
|
|
"db/blob/blob_file_garbage.cc",
|
|
|
|
"db/blob/blob_file_meta.cc",
|
Introduce a blob file reader class (#7461)
Summary:
The patch adds a class called `BlobFileReader` that can be used to retrieve blobs
using the information available in blob references (e.g. blob file number, offset, and
size). This will come in handy when implementing blob support for `Get`, `MultiGet`,
and iterators, and also for compaction/garbage collection.
When a `BlobFileReader` object is created (using the factory method `Create`),
it first checks whether the specified file is potentially valid by comparing the file
size against the combined size of the blob file header and footer (files smaller than
the threshold are considered malformed). Then, it opens the file, and reads and verifies
the header and footer. The verification involves magic number/CRC checks
as well as checking for unexpected header/footer fields, e.g. incorrect column family ID
or TTL blob files.
Blobs can be retrieved using `GetBlob`. `GetBlob` validates the offset and compression
type passed by the caller (because of the presence of the header and footer, the
specified offset cannot be too close to the start/end of the file; also, the compression type
has to match the one in the blob file header), and retrieves and potentially verifies and
uncompresses the blob. In particular, when `ReadOptions::verify_checksums` is set,
`BlobFileReader` reads the blob record header as well (as opposed to just the blob itself)
and verifies the key/value size, the key itself, as well as the CRC of the blob record header
and the key/value pair.
In addition, the patch exposes the compression type from `BlobIndex` (both using an
accessor and via `DebugString`), and adds a blob file read latency histogram to
`InternalStats` that can be used with `BlobFileReader`.
Pull Request resolved: https://github.com/facebook/rocksdb/pull/7461
Test Plan: `make check`
Reviewed By: riversand963
Differential Revision: D23999219
Pulled By: ltamasi
fbshipit-source-id: deb6b1160d251258b308d5156e2ec063c3e12e5e
2020-10-07 22:43:23 +00:00
|
|
|
"db/blob/blob_file_reader.cc",
|
2020-10-01 05:49:20 +00:00
|
|
|
"db/blob/blob_log_format.cc",
|
2020-10-08 00:46:50 +00:00
|
|
|
"db/blob/blob_log_sequential_reader.cc",
|
2020-10-01 05:49:20 +00:00
|
|
|
"db/blob/blob_log_writer.cc",
|
|
|
|
"db/builder.cc",
|
|
|
|
"db/c.cc",
|
|
|
|
"db/column_family.cc",
|
|
|
|
"db/compaction/compaction.cc",
|
|
|
|
"db/compaction/compaction_iterator.cc",
|
|
|
|
"db/compaction/compaction_job.cc",
|
|
|
|
"db/compaction/compaction_picker.cc",
|
|
|
|
"db/compaction/compaction_picker_fifo.cc",
|
|
|
|
"db/compaction/compaction_picker_level.cc",
|
|
|
|
"db/compaction/compaction_picker_universal.cc",
|
|
|
|
"db/compaction/sst_partitioner.cc",
|
|
|
|
"db/convenience.cc",
|
|
|
|
"db/db_filesnapshot.cc",
|
2021-03-23 20:47:56 +00:00
|
|
|
"db/db_impl/compacted_db_impl.cc",
|
2020-10-01 05:49:20 +00:00
|
|
|
"db/db_impl/db_impl.cc",
|
|
|
|
"db/db_impl/db_impl_compaction_flush.cc",
|
|
|
|
"db/db_impl/db_impl_debug.cc",
|
|
|
|
"db/db_impl/db_impl_experimental.cc",
|
|
|
|
"db/db_impl/db_impl_files.cc",
|
|
|
|
"db/db_impl/db_impl_open.cc",
|
|
|
|
"db/db_impl/db_impl_readonly.cc",
|
|
|
|
"db/db_impl/db_impl_secondary.cc",
|
|
|
|
"db/db_impl/db_impl_write.cc",
|
|
|
|
"db/db_info_dumper.cc",
|
|
|
|
"db/db_iter.cc",
|
|
|
|
"db/dbformat.cc",
|
|
|
|
"db/error_handler.cc",
|
|
|
|
"db/event_helpers.cc",
|
|
|
|
"db/experimental.cc",
|
|
|
|
"db/external_sst_file_ingestion_job.cc",
|
|
|
|
"db/file_indexer.cc",
|
|
|
|
"db/flush_job.cc",
|
|
|
|
"db/flush_scheduler.cc",
|
|
|
|
"db/forward_iterator.cc",
|
|
|
|
"db/import_column_family_job.cc",
|
|
|
|
"db/internal_stats.cc",
|
|
|
|
"db/log_reader.cc",
|
|
|
|
"db/log_writer.cc",
|
|
|
|
"db/logs_with_prep_tracker.cc",
|
|
|
|
"db/malloc_stats.cc",
|
|
|
|
"db/memtable.cc",
|
|
|
|
"db/memtable_list.cc",
|
|
|
|
"db/merge_helper.cc",
|
|
|
|
"db/merge_operator.cc",
|
2020-10-01 22:57:28 +00:00
|
|
|
"db/output_validator.cc",
|
2020-10-02 02:12:26 +00:00
|
|
|
"db/periodic_work_scheduler.cc",
|
2020-10-01 05:49:20 +00:00
|
|
|
"db/range_del_aggregator.cc",
|
|
|
|
"db/range_tombstone_fragmenter.cc",
|
|
|
|
"db/repair.cc",
|
|
|
|
"db/snapshot_impl.cc",
|
|
|
|
"db/table_cache.cc",
|
|
|
|
"db/table_properties_collector.cc",
|
|
|
|
"db/transaction_log_impl.cc",
|
|
|
|
"db/trim_history_scheduler.cc",
|
|
|
|
"db/version_builder.cc",
|
|
|
|
"db/version_edit.cc",
|
|
|
|
"db/version_edit_handler.cc",
|
|
|
|
"db/version_set.cc",
|
|
|
|
"db/wal_edit.cc",
|
|
|
|
"db/wal_manager.cc",
|
|
|
|
"db/write_batch.cc",
|
|
|
|
"db/write_batch_base.cc",
|
|
|
|
"db/write_controller.cc",
|
|
|
|
"db/write_thread.cc",
|
2021-01-26 06:07:26 +00:00
|
|
|
"env/composite_env.cc",
|
2020-10-01 05:49:20 +00:00
|
|
|
"env/env.cc",
|
|
|
|
"env/env_chroot.cc",
|
|
|
|
"env/env_encryption.cc",
|
|
|
|
"env/env_hdfs.cc",
|
|
|
|
"env/env_posix.cc",
|
|
|
|
"env/file_system.cc",
|
|
|
|
"env/file_system_tracer.cc",
|
|
|
|
"env/fs_posix.cc",
|
Make backups openable as read-only DBs (#8142)
Summary:
A current limitation of backups is that you don't know the
exact database state of when the backup was taken. With this new
feature, you can at least inspect the backup's DB state without
restoring it by opening it as a read-only DB.
Rather than add something like OpenAsReadOnlyDB to the BackupEngine API,
which would inhibit opening stackable DB implementations read-only
(if/when their APIs support it), we instead provide a DB name and Env
that can be used to open as a read-only DB.
Possible follow-up work:
* Add a version of GetBackupInfo for a single backup.
* Let CreateNewBackup return the BackupID of the newly-created backup.
Implementation details:
Refactored ChrootFileSystem to split off new base class RemapFileSystem,
which allows more general remapping of files. We use this base class to
implement BackupEngineImpl::RemapSharedFileSystem.
To minimize API impact, I decided to just add these fields `name_for_open`
and `env_for_open` to those set by GetBackupInfo when
include_file_details=true. Creating the RemapSharedFileSystem adds a bit
to the memory consumption, perhaps unnecessarily in some cases, but this
has been mitigated by (a) only initialize the RemapSharedFileSystem
lazily when GetBackupInfo with include_file_details=true is called, and
(b) using the existing `shared_ptr<FileInfo>` objects to hold most of the
mapping data.
To enhance API safety, RemapSharedFileSystem is wrapped by new
ReadOnlyFileSystem which rejects any attempts to write. This uncovered a
couple of places in which DB::OpenForReadOnly would write to the
filesystem, so I fixed these. Added a release note because this affects
logging.
Additional minor refactoring in backupable_db.cc to support the new
functionality.
Pull Request resolved: https://github.com/facebook/rocksdb/pull/8142
Test Plan:
new test (run with ASAN and UBSAN), added to stress test and
ran it for a while with amplified backup_one_in
Reviewed By: ajkr
Differential Revision: D27535408
Pulled By: pdillinger
fbshipit-source-id: 04666d310aa0261ef6b2385c43ca793ce1dfd148
2021-04-06 21:36:45 +00:00
|
|
|
"env/fs_remap.cc",
|
2020-10-01 05:49:20 +00:00
|
|
|
"env/io_posix.cc",
|
|
|
|
"env/mock_env.cc",
|
|
|
|
"file/delete_scheduler.cc",
|
|
|
|
"file/file_prefetch_buffer.cc",
|
|
|
|
"file/file_util.cc",
|
|
|
|
"file/filename.cc",
|
2021-03-10 04:10:51 +00:00
|
|
|
"file/line_file_reader.cc",
|
2020-10-01 05:49:20 +00:00
|
|
|
"file/random_access_file_reader.cc",
|
|
|
|
"file/read_write_util.cc",
|
|
|
|
"file/readahead_raf.cc",
|
|
|
|
"file/sequence_file_reader.cc",
|
|
|
|
"file/sst_file_manager_impl.cc",
|
|
|
|
"file/writable_file_writer.cc",
|
|
|
|
"logging/auto_roll_logger.cc",
|
|
|
|
"logging/event_logger.cc",
|
|
|
|
"logging/log_buffer.cc",
|
|
|
|
"memory/arena.cc",
|
|
|
|
"memory/concurrent_arena.cc",
|
|
|
|
"memory/jemalloc_nodump_allocator.cc",
|
|
|
|
"memory/memkind_kmem_allocator.cc",
|
|
|
|
"memtable/alloc_tracker.cc",
|
|
|
|
"memtable/hash_linklist_rep.cc",
|
|
|
|
"memtable/hash_skiplist_rep.cc",
|
|
|
|
"memtable/skiplistrep.cc",
|
|
|
|
"memtable/vectorrep.cc",
|
|
|
|
"memtable/write_buffer_manager.cc",
|
|
|
|
"monitoring/histogram.cc",
|
|
|
|
"monitoring/histogram_windowing.cc",
|
|
|
|
"monitoring/in_memory_stats_history.cc",
|
|
|
|
"monitoring/instrumented_mutex.cc",
|
|
|
|
"monitoring/iostats_context.cc",
|
|
|
|
"monitoring/perf_context.cc",
|
|
|
|
"monitoring/perf_level.cc",
|
|
|
|
"monitoring/persistent_stats_history.cc",
|
|
|
|
"monitoring/statistics.cc",
|
|
|
|
"monitoring/thread_status_impl.cc",
|
|
|
|
"monitoring/thread_status_updater.cc",
|
|
|
|
"monitoring/thread_status_updater_debug.cc",
|
|
|
|
"monitoring/thread_status_util.cc",
|
|
|
|
"monitoring/thread_status_util_debug.cc",
|
|
|
|
"options/cf_options.cc",
|
|
|
|
"options/configurable.cc",
|
2020-11-11 23:09:14 +00:00
|
|
|
"options/customizable.cc",
|
2020-10-01 05:49:20 +00:00
|
|
|
"options/db_options.cc",
|
|
|
|
"options/options.cc",
|
|
|
|
"options/options_helper.cc",
|
|
|
|
"options/options_parser.cc",
|
|
|
|
"port/port_posix.cc",
|
|
|
|
"port/stack_trace.cc",
|
|
|
|
"port/win/env_default.cc",
|
|
|
|
"port/win/env_win.cc",
|
|
|
|
"port/win/io_win.cc",
|
|
|
|
"port/win/port_win.cc",
|
|
|
|
"port/win/win_logger.cc",
|
|
|
|
"port/win/win_thread.cc",
|
|
|
|
"table/adaptive/adaptive_table_factory.cc",
|
|
|
|
"table/block_based/binary_search_index_reader.cc",
|
|
|
|
"table/block_based/block.cc",
|
|
|
|
"table/block_based/block_based_filter_block.cc",
|
|
|
|
"table/block_based/block_based_table_builder.cc",
|
|
|
|
"table/block_based/block_based_table_factory.cc",
|
|
|
|
"table/block_based/block_based_table_iterator.cc",
|
|
|
|
"table/block_based/block_based_table_reader.cc",
|
|
|
|
"table/block_based/block_builder.cc",
|
|
|
|
"table/block_based/block_prefetcher.cc",
|
|
|
|
"table/block_based/block_prefix_index.cc",
|
|
|
|
"table/block_based/data_block_footer.cc",
|
|
|
|
"table/block_based/data_block_hash_index.cc",
|
|
|
|
"table/block_based/filter_block_reader_common.cc",
|
|
|
|
"table/block_based/filter_policy.cc",
|
|
|
|
"table/block_based/flush_block_policy.cc",
|
|
|
|
"table/block_based/full_filter_block.cc",
|
|
|
|
"table/block_based/hash_index_reader.cc",
|
|
|
|
"table/block_based/index_builder.cc",
|
|
|
|
"table/block_based/index_reader_common.cc",
|
|
|
|
"table/block_based/parsed_full_filter_block.cc",
|
|
|
|
"table/block_based/partitioned_filter_block.cc",
|
|
|
|
"table/block_based/partitioned_index_iterator.cc",
|
|
|
|
"table/block_based/partitioned_index_reader.cc",
|
|
|
|
"table/block_based/reader_common.cc",
|
|
|
|
"table/block_based/uncompression_dict_reader.cc",
|
|
|
|
"table/block_fetcher.cc",
|
|
|
|
"table/cuckoo/cuckoo_table_builder.cc",
|
|
|
|
"table/cuckoo/cuckoo_table_factory.cc",
|
|
|
|
"table/cuckoo/cuckoo_table_reader.cc",
|
|
|
|
"table/format.cc",
|
|
|
|
"table/get_context.cc",
|
|
|
|
"table/iterator.cc",
|
|
|
|
"table/merging_iterator.cc",
|
|
|
|
"table/meta_blocks.cc",
|
|
|
|
"table/persistent_cache_helper.cc",
|
|
|
|
"table/plain/plain_table_bloom.cc",
|
|
|
|
"table/plain/plain_table_builder.cc",
|
|
|
|
"table/plain/plain_table_factory.cc",
|
|
|
|
"table/plain/plain_table_index.cc",
|
|
|
|
"table/plain/plain_table_key_coding.cc",
|
|
|
|
"table/plain/plain_table_reader.cc",
|
|
|
|
"table/sst_file_dumper.cc",
|
|
|
|
"table/sst_file_reader.cc",
|
|
|
|
"table/sst_file_writer.cc",
|
|
|
|
"table/table_factory.cc",
|
|
|
|
"table/table_properties.cc",
|
|
|
|
"table/two_level_iterator.cc",
|
|
|
|
"test_util/sync_point.cc",
|
|
|
|
"test_util/sync_point_impl.cc",
|
|
|
|
"test_util/transaction_test_util.cc",
|
|
|
|
"tools/dump/db_dump_tool.cc",
|
|
|
|
"tools/io_tracer_parser_tool.cc",
|
|
|
|
"tools/ldb_cmd.cc",
|
|
|
|
"tools/ldb_tool.cc",
|
|
|
|
"tools/sst_dump_tool.cc",
|
|
|
|
"trace_replay/block_cache_tracer.cc",
|
|
|
|
"trace_replay/io_tracer.cc",
|
|
|
|
"trace_replay/trace_replay.cc",
|
|
|
|
"util/build_version.cc",
|
|
|
|
"util/coding.cc",
|
|
|
|
"util/compaction_job_stats_impl.cc",
|
|
|
|
"util/comparator.cc",
|
|
|
|
"util/compression_context_cache.cc",
|
|
|
|
"util/concurrent_task_limiter_impl.cc",
|
|
|
|
"util/crc32c.cc",
|
2021-04-12 17:56:42 +00:00
|
|
|
"util/crc32c_arm64.cc",
|
2020-10-01 05:49:20 +00:00
|
|
|
"util/dynamic_bloom.cc",
|
|
|
|
"util/file_checksum_helper.cc",
|
|
|
|
"util/hash.cc",
|
|
|
|
"util/murmurhash.cc",
|
|
|
|
"util/random.cc",
|
|
|
|
"util/rate_limiter.cc",
|
Refine Ribbon configuration, improve testing, add Homogeneous (#7879)
Summary:
This change only affects non-schema-critical aspects of the production candidate Ribbon filter. Specifically, it refines choice of internal configuration parameters based on inputs. The changes are minor enough that the schema tests in bloom_test, some of which depend on this, are unaffected. There are also some minor optimizations and refactorings.
This would be a schema change for "smash" Ribbon, to fix some known issues with small filters, but "smash" Ribbon is not accessible in public APIs. Unit test CompactnessAndBacktrackAndFpRate updated to test small and medium-large filters. Run with --thoroughness=100 or so for much better detection power (not appropriate for continuous regression testing).
Homogenous Ribbon:
This change adds internally a Ribbon filter variant we call Homogeneous Ribbon, in collaboration with Stefan Walzer. The expected "result" value for every key is zero, instead of computed from a hash. Entropy for queries not to be false positives comes from free variables ("overhead") in the solution structure, which are populated pseudorandomly. Construction is slightly faster for not tracking result values, and never fails. Instead, FP rate can jump up whenever and whereever entries are packed too tightly. For small structures, we can choose overhead to make this FP rate jump unlikely, as seen in updated unit test CompactnessAndBacktrackAndFpRate.
Unlike standard Ribbon, Homogeneous Ribbon seems to scale to arbitrary number of keys when accepting an FP rate penalty for small pockets of high FP rate in the structure. For example, 64-bit ribbon with 8 solution columns and 10% allocated space overhead for slots seems to achieve about 10.5% space overhead vs. information-theoretic minimum based on its observed FP rate with expected pockets of degradation. (FP rate is close to 1/256.) If targeting a higher FP rate with fewer solution columns, Homogeneous Ribbon can be even more space efficient, because the penalty from degradation is relatively smaller. If targeting a lower FP rate, Homogeneous Ribbon is less space efficient, as more allocated overhead is needed to keep the FP rate impact of degradation relatively under control. The new OptimizeHomogAtScale tool in ribbon_test helps to find these optimal allocation overheads for different numbers of solution columns. And Ribbon widths, with 128-bit Ribbon apparently cutting space overheads in half vs. 64-bit.
Other misc item specifics:
* Ribbon APIs in util/ribbon_config.h now provide configuration data for not just 5% construction failure rate (95% success), but also 50% and 0.1%.
* Note that the Ribbon structure does not exhibit "threshold" behavior as standard Xor filter does, so there is a roughly fixed space penalty to cut construction failure rate in half. Thus, there isn't really an "almost sure" setting.
* Although we can extrapolate settings for large filters, we don't have a good formula for configuring smaller filters (< 2^17 slots or so), and efforts to summarize with a formula have failed. Thus, small data is hard-coded from updated FindOccupancy tool.
* Enhances ApproximateNumEntries for public API Ribbon using more precise data (new API GetNumToAdd), thus a more accurate but not perfect reversal of CalculateSpace. (bloom_test updated to expect the greater precision)
* Move EndianSwapValue from coding.h to coding_lean.h to keep Ribbon code easily transferable from RocksDB
* Add some missing 'const' to member functions
* Small optimization to 128-bit BitParity
* Small refactoring of BandingStorage in ribbon_alg.h to support Homogeneous Ribbon
* CompactnessAndBacktrackAndFpRate now has an "expand" test: on construction failure, a possible alternative to re-seeding hash functions is simply to increase the number of slots (allocated space overhead) and try again with essentially the same hash values. (Start locations will be different roundings of the same scaled hash values--because fastrange not mod.) This seems to be as effective or more effective than re-seeding, as long as we increase the number of slots (m) by roughly m += m/w where w is the Ribbon width. This way, there is effectively an expansion by one slot for each ribbon-width window in the banding. (This approach assumes that getting "bad data" from your hash function is as unlikely as it naturally should be, e.g. no adversary.)
* 32-bit and 16-bit Ribbon configurations are added to ribbon_test for understanding their behavior, e.g. with FindOccupancy. They are not considered useful at this time and not tested with CompactnessAndBacktrackAndFpRate.
Pull Request resolved: https://github.com/facebook/rocksdb/pull/7879
Test Plan: unit test updates included
Reviewed By: jay-zhuang
Differential Revision: D26371245
Pulled By: pdillinger
fbshipit-source-id: da6600d90a3785b99ad17a88b2a3027710b4ea3a
2021-02-26 16:48:55 +00:00
|
|
|
"util/ribbon_config.cc",
|
2020-10-01 05:49:20 +00:00
|
|
|
"util/slice.cc",
|
|
|
|
"util/status.cc",
|
|
|
|
"util/string_util.cc",
|
|
|
|
"util/thread_local.cc",
|
|
|
|
"util/threadpool_imp.cc",
|
|
|
|
"util/xxhash.cc",
|
|
|
|
"utilities/backupable/backupable_db.cc",
|
|
|
|
"utilities/blob_db/blob_compaction_filter.cc",
|
|
|
|
"utilities/blob_db/blob_db.cc",
|
|
|
|
"utilities/blob_db/blob_db_impl.cc",
|
|
|
|
"utilities/blob_db/blob_db_impl_filesnapshot.cc",
|
|
|
|
"utilities/blob_db/blob_dump_tool.cc",
|
|
|
|
"utilities/blob_db/blob_file.cc",
|
|
|
|
"utilities/cassandra/cassandra_compaction_filter.cc",
|
|
|
|
"utilities/cassandra/format.cc",
|
|
|
|
"utilities/cassandra/merge_operator.cc",
|
|
|
|
"utilities/checkpoint/checkpoint_impl.cc",
|
|
|
|
"utilities/compaction_filters/remove_emptyvalue_compactionfilter.cc",
|
|
|
|
"utilities/convenience/info_log_finder.cc",
|
|
|
|
"utilities/debug.cc",
|
|
|
|
"utilities/env_mirror.cc",
|
|
|
|
"utilities/env_timed.cc",
|
|
|
|
"utilities/fault_injection_env.cc",
|
|
|
|
"utilities/fault_injection_fs.cc",
|
|
|
|
"utilities/leveldb_options/leveldb_options.cc",
|
|
|
|
"utilities/memory/memory_util.cc",
|
|
|
|
"utilities/merge_operators/bytesxor.cc",
|
|
|
|
"utilities/merge_operators/max.cc",
|
|
|
|
"utilities/merge_operators/put.cc",
|
|
|
|
"utilities/merge_operators/sortlist.cc",
|
|
|
|
"utilities/merge_operators/string_append/stringappend.cc",
|
|
|
|
"utilities/merge_operators/string_append/stringappend2.cc",
|
|
|
|
"utilities/merge_operators/uint64add.cc",
|
|
|
|
"utilities/object_registry.cc",
|
|
|
|
"utilities/option_change_migration/option_change_migration.cc",
|
|
|
|
"utilities/options/options_util.cc",
|
|
|
|
"utilities/persistent_cache/block_cache_tier.cc",
|
|
|
|
"utilities/persistent_cache/block_cache_tier_file.cc",
|
|
|
|
"utilities/persistent_cache/block_cache_tier_metadata.cc",
|
|
|
|
"utilities/persistent_cache/persistent_cache_tier.cc",
|
|
|
|
"utilities/persistent_cache/volatile_tier_impl.cc",
|
|
|
|
"utilities/simulator_cache/cache_simulator.cc",
|
|
|
|
"utilities/simulator_cache/sim_cache.cc",
|
|
|
|
"utilities/table_properties_collectors/compact_on_deletion_collector.cc",
|
|
|
|
"utilities/trace/file_trace_reader_writer.cc",
|
2020-10-19 17:12:53 +00:00
|
|
|
"utilities/transactions/lock/lock_manager.cc",
|
|
|
|
"utilities/transactions/lock/point/point_lock_manager.cc",
|
|
|
|
"utilities/transactions/lock/point/point_lock_tracker.cc",
|
2020-12-09 20:09:46 +00:00
|
|
|
"utilities/transactions/lock/range/range_tree/lib/locktree/concurrent_tree.cc",
|
|
|
|
"utilities/transactions/lock/range/range_tree/lib/locktree/keyrange.cc",
|
|
|
|
"utilities/transactions/lock/range/range_tree/lib/locktree/lock_request.cc",
|
|
|
|
"utilities/transactions/lock/range/range_tree/lib/locktree/locktree.cc",
|
|
|
|
"utilities/transactions/lock/range/range_tree/lib/locktree/manager.cc",
|
|
|
|
"utilities/transactions/lock/range/range_tree/lib/locktree/range_buffer.cc",
|
|
|
|
"utilities/transactions/lock/range/range_tree/lib/locktree/treenode.cc",
|
|
|
|
"utilities/transactions/lock/range/range_tree/lib/locktree/txnid_set.cc",
|
|
|
|
"utilities/transactions/lock/range/range_tree/lib/locktree/wfg.cc",
|
|
|
|
"utilities/transactions/lock/range/range_tree/lib/standalone_port.cc",
|
|
|
|
"utilities/transactions/lock/range/range_tree/lib/util/dbt.cc",
|
|
|
|
"utilities/transactions/lock/range/range_tree/lib/util/memarena.cc",
|
2020-12-23 03:10:56 +00:00
|
|
|
"utilities/transactions/lock/range/range_tree/range_tree_lock_manager.cc",
|
|
|
|
"utilities/transactions/lock/range/range_tree/range_tree_lock_tracker.cc",
|
2020-10-01 05:49:20 +00:00
|
|
|
"utilities/transactions/optimistic_transaction.cc",
|
|
|
|
"utilities/transactions/optimistic_transaction_db_impl.cc",
|
|
|
|
"utilities/transactions/pessimistic_transaction.cc",
|
|
|
|
"utilities/transactions/pessimistic_transaction_db.cc",
|
|
|
|
"utilities/transactions/snapshot_checker.cc",
|
|
|
|
"utilities/transactions/transaction_base.cc",
|
|
|
|
"utilities/transactions/transaction_db_mutex_impl.cc",
|
|
|
|
"utilities/transactions/transaction_util.cc",
|
|
|
|
"utilities/transactions/write_prepared_txn.cc",
|
|
|
|
"utilities/transactions/write_prepared_txn_db.cc",
|
|
|
|
"utilities/transactions/write_unprepared_txn.cc",
|
|
|
|
"utilities/transactions/write_unprepared_txn_db.cc",
|
|
|
|
"utilities/ttl/db_ttl_impl.cc",
|
|
|
|
"utilities/write_batch_with_index/write_batch_with_index.cc",
|
|
|
|
"utilities/write_batch_with_index/write_batch_with_index_internal.cc",
|
|
|
|
],
|
|
|
|
auto_headers = AutoHeaders.RECURSIVE_GLOB,
|
|
|
|
arch_preprocessor_flags = ROCKSDB_ARCH_PREPROCESSOR_FLAGS,
|
|
|
|
compiler_flags = ROCKSDB_COMPILER_FLAGS,
|
|
|
|
os_deps = ROCKSDB_OS_DEPS,
|
|
|
|
os_preprocessor_flags = ROCKSDB_OS_PREPROCESSOR_FLAGS,
|
|
|
|
preprocessor_flags = ROCKSDB_PREPROCESSOR_FLAGS,
|
2021-04-03 21:41:25 +00:00
|
|
|
include_paths = ROCKSDB_INCLUDE_PATHS,
|
2020-10-01 05:49:20 +00:00
|
|
|
deps = [],
|
|
|
|
external_deps = ROCKSDB_EXTERNAL_DEPS,
|
|
|
|
link_whole = True,
|
2017-04-04 23:09:31 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
cpp_library(
|
|
|
|
name = "rocksdb_test_lib",
|
|
|
|
srcs = [
|
2017-11-15 22:13:39 +00:00
|
|
|
"db/db_test_util.cc",
|
|
|
|
"table/mock_table.cc",
|
2020-09-23 18:32:44 +00:00
|
|
|
"test_util/mock_time_env.cc",
|
2019-05-30 18:21:38 +00:00
|
|
|
"test_util/testharness.cc",
|
|
|
|
"test_util/testutil.cc",
|
Block cache simulator: Add pysim to simulate caches using reinforcement learning. (#5610)
Summary:
This PR implements cache eviction using reinforcement learning. It includes two implementations:
1. An implementation of Thompson Sampling for the Bernoulli Bandit [1].
2. An implementation of LinUCB with disjoint linear models [2].
The idea is that a cache uses multiple eviction policies, e.g., MRU, LRU, and LFU. The cache learns which eviction policy is the best and uses it upon a cache miss.
Thompson Sampling is contextless and does not include any features.
LinUCB includes features such as level, block type, caller, column family id to decide which eviction policy to use.
[1] Daniel J. Russo, Benjamin Van Roy, Abbas Kazerouni, Ian Osband, and Zheng Wen. 2018. A Tutorial on Thompson Sampling. Found. Trends Mach. Learn. 11, 1 (July 2018), 1-96. DOI: https://doi.org/10.1561/2200000070
[2] Lihong Li, Wei Chu, John Langford, and Robert E. Schapire. 2010. A contextual-bandit approach to personalized news article recommendation. In Proceedings of the 19th international conference on World wide web (WWW '10). ACM, New York, NY, USA, 661-670. DOI=http://dx.doi.org/10.1145/1772690.1772758
Pull Request resolved: https://github.com/facebook/rocksdb/pull/5610
Differential Revision: D16435067
Pulled By: HaoyuHuang
fbshipit-source-id: 6549239ae14115c01cb1e70548af9e46d8dc21bb
2019-07-26 21:36:16 +00:00
|
|
|
"tools/block_cache_analyzer/block_cache_trace_analyzer.cc",
|
2018-09-16 02:50:19 +00:00
|
|
|
"tools/trace_analyzer_tool.cc",
|
2017-11-15 22:13:39 +00:00
|
|
|
"utilities/cassandra/test_utils.cc",
|
2017-04-04 23:09:31 +00:00
|
|
|
],
|
2018-10-18 20:56:46 +00:00
|
|
|
auto_headers = AutoHeaders.RECURSIVE_GLOB,
|
2019-01-07 21:35:12 +00:00
|
|
|
arch_preprocessor_flags = ROCKSDB_ARCH_PREPROCESSOR_FLAGS,
|
|
|
|
compiler_flags = ROCKSDB_COMPILER_FLAGS,
|
2019-07-25 18:42:31 +00:00
|
|
|
os_deps = ROCKSDB_OS_DEPS,
|
|
|
|
os_preprocessor_flags = ROCKSDB_OS_PREPROCESSOR_FLAGS,
|
2019-01-07 21:35:12 +00:00
|
|
|
preprocessor_flags = ROCKSDB_PREPROCESSOR_FLAGS,
|
2021-04-03 21:41:25 +00:00
|
|
|
include_paths = ROCKSDB_INCLUDE_PATHS,
|
2020-06-05 19:14:42 +00:00
|
|
|
deps = [":rocksdb_lib"],
|
|
|
|
external_deps = ROCKSDB_EXTERNAL_DEPS + [
|
|
|
|
("googletest", None, "gtest"),
|
2020-05-20 18:35:28 +00:00
|
|
|
],
|
2020-10-01 05:49:20 +00:00
|
|
|
link_whole = False,
|
2017-04-04 23:09:31 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
cpp_library(
|
|
|
|
name = "rocksdb_tools_lib",
|
|
|
|
srcs = [
|
2019-05-30 18:21:38 +00:00
|
|
|
"test_util/testutil.cc",
|
Block cache simulator: Add pysim to simulate caches using reinforcement learning. (#5610)
Summary:
This PR implements cache eviction using reinforcement learning. It includes two implementations:
1. An implementation of Thompson Sampling for the Bernoulli Bandit [1].
2. An implementation of LinUCB with disjoint linear models [2].
The idea is that a cache uses multiple eviction policies, e.g., MRU, LRU, and LFU. The cache learns which eviction policy is the best and uses it upon a cache miss.
Thompson Sampling is contextless and does not include any features.
LinUCB includes features such as level, block type, caller, column family id to decide which eviction policy to use.
[1] Daniel J. Russo, Benjamin Van Roy, Abbas Kazerouni, Ian Osband, and Zheng Wen. 2018. A Tutorial on Thompson Sampling. Found. Trends Mach. Learn. 11, 1 (July 2018), 1-96. DOI: https://doi.org/10.1561/2200000070
[2] Lihong Li, Wei Chu, John Langford, and Robert E. Schapire. 2010. A contextual-bandit approach to personalized news article recommendation. In Proceedings of the 19th international conference on World wide web (WWW '10). ACM, New York, NY, USA, 661-670. DOI=http://dx.doi.org/10.1145/1772690.1772758
Pull Request resolved: https://github.com/facebook/rocksdb/pull/5610
Differential Revision: D16435067
Pulled By: HaoyuHuang
fbshipit-source-id: 6549239ae14115c01cb1e70548af9e46d8dc21bb
2019-07-26 21:36:16 +00:00
|
|
|
"tools/block_cache_analyzer/block_cache_trace_analyzer.cc",
|
2017-11-15 22:13:39 +00:00
|
|
|
"tools/db_bench_tool.cc",
|
2021-05-03 20:30:00 +00:00
|
|
|
"tools/simulated_hybrid_file_system.cc",
|
2018-09-25 21:12:12 +00:00
|
|
|
"tools/trace_analyzer_tool.cc",
|
2017-04-04 23:09:31 +00:00
|
|
|
],
|
2018-10-18 20:56:46 +00:00
|
|
|
auto_headers = AutoHeaders.RECURSIVE_GLOB,
|
2019-01-07 21:35:12 +00:00
|
|
|
arch_preprocessor_flags = ROCKSDB_ARCH_PREPROCESSOR_FLAGS,
|
|
|
|
compiler_flags = ROCKSDB_COMPILER_FLAGS,
|
2019-07-25 18:42:31 +00:00
|
|
|
os_deps = ROCKSDB_OS_DEPS,
|
|
|
|
os_preprocessor_flags = ROCKSDB_OS_PREPROCESSOR_FLAGS,
|
2019-01-07 21:35:12 +00:00
|
|
|
preprocessor_flags = ROCKSDB_PREPROCESSOR_FLAGS,
|
2021-04-03 21:41:25 +00:00
|
|
|
include_paths = ROCKSDB_INCLUDE_PATHS,
|
2021-05-19 22:24:37 +00:00
|
|
|
deps = [":rocksdb_lib"],
|
|
|
|
external_deps = ROCKSDB_EXTERNAL_DEPS,
|
|
|
|
link_whole = False,
|
|
|
|
)
|
|
|
|
|
|
|
|
cpp_library(
|
|
|
|
name = "rocksdb_cache_bench_tools_lib",
|
|
|
|
srcs = ["cache/cache_bench_tool.cc"],
|
|
|
|
auto_headers = AutoHeaders.RECURSIVE_GLOB,
|
|
|
|
arch_preprocessor_flags = ROCKSDB_ARCH_PREPROCESSOR_FLAGS,
|
|
|
|
compiler_flags = ROCKSDB_COMPILER_FLAGS,
|
|
|
|
os_deps = ROCKSDB_OS_DEPS,
|
|
|
|
os_preprocessor_flags = ROCKSDB_OS_PREPROCESSOR_FLAGS,
|
|
|
|
preprocessor_flags = ROCKSDB_PREPROCESSOR_FLAGS,
|
|
|
|
include_paths = ROCKSDB_INCLUDE_PATHS,
|
2017-11-15 22:13:39 +00:00
|
|
|
deps = [":rocksdb_lib"],
|
2019-01-07 21:35:12 +00:00
|
|
|
external_deps = ROCKSDB_EXTERNAL_DEPS,
|
2020-10-01 05:49:20 +00:00
|
|
|
link_whole = False,
|
2017-04-04 23:09:31 +00:00
|
|
|
)
|
|
|
|
|
2019-10-22 02:38:42 +00:00
|
|
|
cpp_library(
|
|
|
|
name = "rocksdb_stress_lib",
|
|
|
|
srcs = [
|
2019-12-09 07:49:32 +00:00
|
|
|
"db_stress_tool/batched_ops_stress.cc",
|
|
|
|
"db_stress_tool/cf_consistency_stress.cc",
|
|
|
|
"db_stress_tool/db_stress_common.cc",
|
|
|
|
"db_stress_tool/db_stress_driver.cc",
|
|
|
|
"db_stress_tool/db_stress_gflags.cc",
|
|
|
|
"db_stress_tool/db_stress_shared_state.cc",
|
|
|
|
"db_stress_tool/db_stress_test_base.cc",
|
|
|
|
"db_stress_tool/db_stress_tool.cc",
|
|
|
|
"db_stress_tool/no_batched_ops_stress.cc",
|
2019-10-22 02:38:42 +00:00
|
|
|
"test_util/testutil.cc",
|
|
|
|
"tools/block_cache_analyzer/block_cache_trace_analyzer.cc",
|
|
|
|
"tools/trace_analyzer_tool.cc",
|
|
|
|
],
|
|
|
|
auto_headers = AutoHeaders.RECURSIVE_GLOB,
|
|
|
|
arch_preprocessor_flags = ROCKSDB_ARCH_PREPROCESSOR_FLAGS,
|
|
|
|
compiler_flags = ROCKSDB_COMPILER_FLAGS,
|
|
|
|
os_deps = ROCKSDB_OS_DEPS,
|
|
|
|
os_preprocessor_flags = ROCKSDB_OS_PREPROCESSOR_FLAGS,
|
|
|
|
preprocessor_flags = ROCKSDB_PREPROCESSOR_FLAGS,
|
2021-04-03 21:41:25 +00:00
|
|
|
include_paths = ROCKSDB_INCLUDE_PATHS,
|
2020-05-17 04:46:21 +00:00
|
|
|
deps = ROCKSDB_LIB_DEPS,
|
2019-10-22 02:38:42 +00:00
|
|
|
external_deps = ROCKSDB_EXTERNAL_DEPS,
|
|
|
|
)
|
|
|
|
|
2020-12-07 18:26:20 +00:00
|
|
|
cpp_binary(
|
|
|
|
name = "c_test_bin",
|
|
|
|
srcs = ["db/c_test.c"],
|
|
|
|
arch_preprocessor_flags = ROCKSDB_ARCH_PREPROCESSOR_FLAGS,
|
|
|
|
os_preprocessor_flags = ROCKSDB_OS_PREPROCESSOR_FLAGS,
|
|
|
|
compiler_flags = ROCKSDB_COMPILER_FLAGS,
|
|
|
|
preprocessor_flags = ROCKSDB_PREPROCESSOR_FLAGS,
|
2021-04-03 21:41:25 +00:00
|
|
|
include_paths = ROCKSDB_INCLUDE_PATHS,
|
2020-12-07 18:26:20 +00:00
|
|
|
deps = [":rocksdb_test_lib"],
|
|
|
|
) if not is_opt_mode else None
|
2020-07-03 03:27:31 +00:00
|
|
|
|
2020-12-07 18:26:20 +00:00
|
|
|
custom_unittest(
|
2020-12-10 03:23:06 +00:00
|
|
|
name = "c_test",
|
2020-12-07 18:26:20 +00:00
|
|
|
command = [
|
|
|
|
native.package_name() + "/buckifier/rocks_test_runner.sh",
|
|
|
|
"$(location :{})".format("c_test_bin"),
|
|
|
|
],
|
|
|
|
type = "simple",
|
|
|
|
) if not is_opt_mode else None
|
2020-07-03 03:27:31 +00:00
|
|
|
|
2017-04-04 23:09:31 +00:00
|
|
|
cpp_library(
|
|
|
|
name = "env_basic_test_lib",
|
2017-06-02 21:13:59 +00:00
|
|
|
srcs = ["env/env_basic_test.cc"],
|
2018-10-18 20:56:46 +00:00
|
|
|
auto_headers = AutoHeaders.RECURSIVE_GLOB,
|
2019-01-07 21:35:12 +00:00
|
|
|
arch_preprocessor_flags = ROCKSDB_ARCH_PREPROCESSOR_FLAGS,
|
|
|
|
compiler_flags = ROCKSDB_COMPILER_FLAGS,
|
2019-07-25 18:42:31 +00:00
|
|
|
os_deps = ROCKSDB_OS_DEPS,
|
|
|
|
os_preprocessor_flags = ROCKSDB_OS_PREPROCESSOR_FLAGS,
|
2019-01-07 21:35:12 +00:00
|
|
|
preprocessor_flags = ROCKSDB_PREPROCESSOR_FLAGS,
|
2021-04-03 21:41:25 +00:00
|
|
|
include_paths = ROCKSDB_INCLUDE_PATHS,
|
2017-11-15 22:13:39 +00:00
|
|
|
deps = [":rocksdb_test_lib"],
|
2019-01-07 21:35:12 +00:00
|
|
|
external_deps = ROCKSDB_EXTERNAL_DEPS,
|
2020-10-01 05:49:20 +00:00
|
|
|
link_whole = False,
|
2017-04-04 23:09:31 +00:00
|
|
|
)
|
|
|
|
|
2019-08-02 17:40:32 +00:00
|
|
|
# [test_name, test_src, test_type, extra_deps, extra_compiler_flags]
|
2017-11-15 22:13:39 +00:00
|
|
|
ROCKS_TESTS = [
|
|
|
|
[
|
|
|
|
"arena_test",
|
2019-05-31 00:39:43 +00:00
|
|
|
"memory/arena_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"auto_roll_logger_test",
|
2019-06-01 00:19:43 +00:00
|
|
|
"logging/auto_roll_logger_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"autovector_test",
|
|
|
|
"util/autovector_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"backupable_db_test",
|
|
|
|
"utilities/backupable/backupable_db_test.cc",
|
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"blob_db_test",
|
|
|
|
"utilities/blob_db/blob_db_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2020-02-25 02:38:00 +00:00
|
|
|
[],
|
|
|
|
[],
|
|
|
|
],
|
|
|
|
[
|
2020-03-11 00:24:38 +00:00
|
|
|
"blob_file_addition_test",
|
2020-03-12 17:58:27 +00:00
|
|
|
"db/blob/blob_file_addition_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2020-03-11 00:24:38 +00:00
|
|
|
[],
|
|
|
|
[],
|
|
|
|
],
|
2020-08-27 18:54:43 +00:00
|
|
|
[
|
|
|
|
"blob_file_builder_test",
|
|
|
|
"db/blob/blob_file_builder_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2020-08-27 18:54:43 +00:00
|
|
|
[],
|
|
|
|
[],
|
|
|
|
],
|
2020-10-15 20:02:44 +00:00
|
|
|
[
|
|
|
|
"blob_file_cache_test",
|
|
|
|
"db/blob/blob_file_cache_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2020-10-15 20:02:44 +00:00
|
|
|
[],
|
|
|
|
[],
|
|
|
|
],
|
2020-03-11 00:24:38 +00:00
|
|
|
[
|
|
|
|
"blob_file_garbage_test",
|
2020-03-12 17:58:27 +00:00
|
|
|
"db/blob/blob_file_garbage_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
Introduce a blob file reader class (#7461)
Summary:
The patch adds a class called `BlobFileReader` that can be used to retrieve blobs
using the information available in blob references (e.g. blob file number, offset, and
size). This will come in handy when implementing blob support for `Get`, `MultiGet`,
and iterators, and also for compaction/garbage collection.
When a `BlobFileReader` object is created (using the factory method `Create`),
it first checks whether the specified file is potentially valid by comparing the file
size against the combined size of the blob file header and footer (files smaller than
the threshold are considered malformed). Then, it opens the file, and reads and verifies
the header and footer. The verification involves magic number/CRC checks
as well as checking for unexpected header/footer fields, e.g. incorrect column family ID
or TTL blob files.
Blobs can be retrieved using `GetBlob`. `GetBlob` validates the offset and compression
type passed by the caller (because of the presence of the header and footer, the
specified offset cannot be too close to the start/end of the file; also, the compression type
has to match the one in the blob file header), and retrieves and potentially verifies and
uncompresses the blob. In particular, when `ReadOptions::verify_checksums` is set,
`BlobFileReader` reads the blob record header as well (as opposed to just the blob itself)
and verifies the key/value size, the key itself, as well as the CRC of the blob record header
and the key/value pair.
In addition, the patch exposes the compression type from `BlobIndex` (both using an
accessor and via `DebugString`), and adds a blob file read latency histogram to
`InternalStats` that can be used with `BlobFileReader`.
Pull Request resolved: https://github.com/facebook/rocksdb/pull/7461
Test Plan: `make check`
Reviewed By: riversand963
Differential Revision: D23999219
Pulled By: ltamasi
fbshipit-source-id: deb6b1160d251258b308d5156e2ec063c3e12e5e
2020-10-07 22:43:23 +00:00
|
|
|
"blob_file_reader_test",
|
|
|
|
"db/blob/blob_file_reader_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
Introduce a blob file reader class (#7461)
Summary:
The patch adds a class called `BlobFileReader` that can be used to retrieve blobs
using the information available in blob references (e.g. blob file number, offset, and
size). This will come in handy when implementing blob support for `Get`, `MultiGet`,
and iterators, and also for compaction/garbage collection.
When a `BlobFileReader` object is created (using the factory method `Create`),
it first checks whether the specified file is potentially valid by comparing the file
size against the combined size of the blob file header and footer (files smaller than
the threshold are considered malformed). Then, it opens the file, and reads and verifies
the header and footer. The verification involves magic number/CRC checks
as well as checking for unexpected header/footer fields, e.g. incorrect column family ID
or TTL blob files.
Blobs can be retrieved using `GetBlob`. `GetBlob` validates the offset and compression
type passed by the caller (because of the presence of the header and footer, the
specified offset cannot be too close to the start/end of the file; also, the compression type
has to match the one in the blob file header), and retrieves and potentially verifies and
uncompresses the blob. In particular, when `ReadOptions::verify_checksums` is set,
`BlobFileReader` reads the blob record header as well (as opposed to just the blob itself)
and verifies the key/value size, the key itself, as well as the CRC of the blob record header
and the key/value pair.
In addition, the patch exposes the compression type from `BlobIndex` (both using an
accessor and via `DebugString`), and adds a blob file read latency histogram to
`InternalStats` that can be used with `BlobFileReader`.
Pull Request resolved: https://github.com/facebook/rocksdb/pull/7461
Test Plan: `make check`
Reviewed By: riversand963
Differential Revision: D23999219
Pulled By: ltamasi
fbshipit-source-id: deb6b1160d251258b308d5156e2ec063c3e12e5e
2020-10-07 22:43:23 +00:00
|
|
|
[],
|
|
|
|
[],
|
|
|
|
],
|
|
|
|
[
|
2017-11-15 22:13:39 +00:00
|
|
|
"block_based_filter_block_test",
|
2019-05-30 21:47:29 +00:00
|
|
|
"table/block_based/block_based_filter_block_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
2020-05-15 06:23:32 +00:00
|
|
|
[
|
|
|
|
"block_based_table_reader_test",
|
|
|
|
"table/block_based/block_based_table_reader_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2020-05-15 06:23:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
|
|
|
],
|
2019-06-13 22:39:52 +00:00
|
|
|
[
|
|
|
|
"block_cache_trace_analyzer_test",
|
Block cache simulator: Add pysim to simulate caches using reinforcement learning. (#5610)
Summary:
This PR implements cache eviction using reinforcement learning. It includes two implementations:
1. An implementation of Thompson Sampling for the Bernoulli Bandit [1].
2. An implementation of LinUCB with disjoint linear models [2].
The idea is that a cache uses multiple eviction policies, e.g., MRU, LRU, and LFU. The cache learns which eviction policy is the best and uses it upon a cache miss.
Thompson Sampling is contextless and does not include any features.
LinUCB includes features such as level, block type, caller, column family id to decide which eviction policy to use.
[1] Daniel J. Russo, Benjamin Van Roy, Abbas Kazerouni, Ian Osband, and Zheng Wen. 2018. A Tutorial on Thompson Sampling. Found. Trends Mach. Learn. 11, 1 (July 2018), 1-96. DOI: https://doi.org/10.1561/2200000070
[2] Lihong Li, Wei Chu, John Langford, and Robert E. Schapire. 2010. A contextual-bandit approach to personalized news article recommendation. In Proceedings of the 19th international conference on World wide web (WWW '10). ACM, New York, NY, USA, 661-670. DOI=http://dx.doi.org/10.1145/1772690.1772758
Pull Request resolved: https://github.com/facebook/rocksdb/pull/5610
Differential Revision: D16435067
Pulled By: HaoyuHuang
fbshipit-source-id: 6549239ae14115c01cb1e70548af9e46d8dc21bb
2019-07-26 21:36:16 +00:00
|
|
|
"tools/block_cache_analyzer/block_cache_trace_analyzer_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2019-06-13 22:39:52 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"block_cache_tracer_test",
|
|
|
|
"trace_replay/block_cache_tracer_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2019-06-13 22:39:52 +00:00
|
|
|
],
|
2020-04-24 22:30:12 +00:00
|
|
|
[
|
|
|
|
"block_fetcher_test",
|
|
|
|
"table/block_fetcher_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2020-04-24 22:30:12 +00:00
|
|
|
[],
|
|
|
|
[],
|
|
|
|
],
|
2017-11-15 22:13:39 +00:00
|
|
|
[
|
|
|
|
"block_test",
|
2019-05-30 21:47:29 +00:00
|
|
|
"table/block_based/block_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"bloom_test",
|
|
|
|
"util/bloom_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
2019-07-24 00:08:26 +00:00
|
|
|
"cache_simulator_test",
|
|
|
|
"utilities/simulator_cache/cache_simulator_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
2019-07-11 19:40:08 +00:00
|
|
|
[
|
2019-07-24 00:08:26 +00:00
|
|
|
"cache_test",
|
|
|
|
"cache/cache_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2019-07-11 19:40:08 +00:00
|
|
|
],
|
2017-11-15 22:13:39 +00:00
|
|
|
[
|
|
|
|
"cassandra_format_test",
|
|
|
|
"utilities/cassandra/cassandra_format_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"cassandra_functional_test",
|
|
|
|
"utilities/cassandra/cassandra_functional_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"cassandra_row_merge_test",
|
|
|
|
"utilities/cassandra/cassandra_row_merge_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"cassandra_serialize_test",
|
|
|
|
"utilities/cassandra/cassandra_serialize_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"checkpoint_test",
|
|
|
|
"utilities/checkpoint/checkpoint_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"cleanable_test",
|
|
|
|
"table/cleanable_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
2021-06-09 22:40:16 +00:00
|
|
|
[
|
|
|
|
"clipping_iterator_test",
|
|
|
|
"db/compaction/clipping_iterator_test.cc",
|
|
|
|
"parallel",
|
|
|
|
[],
|
|
|
|
[],
|
|
|
|
],
|
2017-11-15 22:13:39 +00:00
|
|
|
[
|
|
|
|
"coding_test",
|
|
|
|
"util/coding_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"column_family_test",
|
|
|
|
"db/column_family_test.cc",
|
2020-07-20 21:59:49 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"compact_files_test",
|
|
|
|
"db/compact_files_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"compact_on_deletion_collector_test",
|
|
|
|
"utilities/table_properties_collectors/compact_on_deletion_collector_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"compaction_iterator_test",
|
2019-05-31 18:52:59 +00:00
|
|
|
"db/compaction/compaction_iterator_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"compaction_job_stats_test",
|
2019-05-31 18:52:59 +00:00
|
|
|
"db/compaction/compaction_job_stats_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"compaction_job_test",
|
2019-05-31 18:52:59 +00:00
|
|
|
"db/compaction/compaction_job_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"compaction_picker_test",
|
2019-05-31 18:52:59 +00:00
|
|
|
"db/compaction/compaction_picker_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
2021-05-20 04:40:43 +00:00
|
|
|
[
|
|
|
|
"compaction_service_test",
|
|
|
|
"db/compaction/compaction_service_test.cc",
|
|
|
|
"parallel",
|
|
|
|
[],
|
|
|
|
[],
|
|
|
|
],
|
2017-11-15 22:13:39 +00:00
|
|
|
[
|
|
|
|
"comparator_db_test",
|
|
|
|
"db/comparator_db_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
2020-09-14 23:59:00 +00:00
|
|
|
[
|
|
|
|
"configurable_test",
|
|
|
|
"options/configurable_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2020-09-14 23:59:00 +00:00
|
|
|
[],
|
|
|
|
[],
|
|
|
|
],
|
2017-11-15 22:13:39 +00:00
|
|
|
[
|
|
|
|
"corruption_test",
|
|
|
|
"db/corruption_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"crc32c_test",
|
|
|
|
"util/crc32c_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"cuckoo_table_builder_test",
|
2019-05-30 21:47:29 +00:00
|
|
|
"table/cuckoo/cuckoo_table_builder_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"cuckoo_table_db_test",
|
|
|
|
"db/cuckoo_table_db_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"cuckoo_table_reader_test",
|
2019-05-30 21:47:29 +00:00
|
|
|
"table/cuckoo/cuckoo_table_reader_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
2020-11-11 23:09:14 +00:00
|
|
|
[
|
|
|
|
"customizable_test",
|
|
|
|
"options/customizable_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2020-11-11 23:09:14 +00:00
|
|
|
[],
|
|
|
|
[],
|
|
|
|
],
|
2018-08-27 17:56:28 +00:00
|
|
|
[
|
|
|
|
"data_block_hash_index_test",
|
2019-05-30 21:47:29 +00:00
|
|
|
"table/block_based/data_block_hash_index_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2018-08-27 17:56:28 +00:00
|
|
|
],
|
2017-11-15 22:13:39 +00:00
|
|
|
[
|
|
|
|
"db_basic_test",
|
|
|
|
"db/db_basic_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
2020-10-15 20:02:44 +00:00
|
|
|
[
|
|
|
|
"db_blob_basic_test",
|
|
|
|
"db/blob/db_blob_basic_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2020-10-15 20:02:44 +00:00
|
|
|
[],
|
|
|
|
[],
|
|
|
|
],
|
2021-02-26 00:30:27 +00:00
|
|
|
[
|
|
|
|
"db_blob_compaction_test",
|
|
|
|
"db/blob/db_blob_compaction_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2021-02-26 00:30:27 +00:00
|
|
|
[],
|
|
|
|
[],
|
|
|
|
],
|
2021-02-23 06:07:59 +00:00
|
|
|
[
|
|
|
|
"db_blob_corruption_test",
|
|
|
|
"db/blob/db_blob_corruption_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2021-02-23 06:07:59 +00:00
|
|
|
[],
|
|
|
|
[],
|
|
|
|
],
|
2017-11-15 22:13:39 +00:00
|
|
|
[
|
|
|
|
"db_blob_index_test",
|
2020-03-12 17:58:27 +00:00
|
|
|
"db/blob/db_blob_index_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"db_block_cache_test",
|
|
|
|
"db/db_block_cache_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"db_bloom_filter_test",
|
|
|
|
"db/db_bloom_filter_test.cc",
|
2019-07-26 18:44:32 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"db_compaction_filter_test",
|
|
|
|
"db/db_compaction_filter_test.cc",
|
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"db_compaction_test",
|
|
|
|
"db/db_compaction_test.cc",
|
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"db_dynamic_level_test",
|
|
|
|
"db/db_dynamic_level_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"db_encryption_test",
|
|
|
|
"db/db_encryption_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"db_flush_test",
|
|
|
|
"db/db_flush_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"db_inplace_update_test",
|
|
|
|
"db/db_inplace_update_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"db_io_failure_test",
|
|
|
|
"db/db_io_failure_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
2018-06-21 21:30:00 +00:00
|
|
|
"db_iter_stress_test",
|
|
|
|
"db/db_iter_stress_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
Change and clarify the relationship between Valid(), status() and Seek*() for all iterators. Also fix some bugs
Summary:
Before this PR, Iterator/InternalIterator may simultaneously have non-ok status() and Valid() = true. That state means that the last operation failed, but the iterator is nevertheless positioned on some unspecified record. Likely intended uses of that are:
* If some sst files are corrupted, a normal iterator can be used to read the data from files that are not corrupted.
* When using read_tier = kBlockCacheTier, read the data that's in block cache, skipping over the data that is not.
However, this behavior wasn't documented well (and until recently the wiki on github had misleading incorrect information). In the code there's a lot of confusion about the relationship between status() and Valid(), and about whether Seek()/SeekToLast()/etc reset the status or not. There were a number of bugs caused by this confusion, both inside rocksdb and in the code that uses rocksdb (including ours).
This PR changes the convention to:
* If status() is not ok, Valid() always returns false.
* Any seek operation resets status. (Before the PR, it depended on iterator type and on particular error.)
This does sacrifice the two use cases listed above, but siying said it's ok.
Overview of the changes:
* A commit that adds missing status checks in MergingIterator. This fixes a bug that actually affects us, and we need it fixed. `DBIteratorTest.NonBlockingIterationBugRepro` explains the scenario.
* Changes to lots of iterator types to make all of them conform to the new convention. Some bug fixes along the way. By far the biggest changes are in DBIter, which is a big messy piece of code; I tried to make it less big and messy but mostly failed.
* A stress-test for DBIter, to gain some confidence that I didn't break it. It does a few million random operations on the iterator, while occasionally modifying the underlying data (like ForwardIterator does) and occasionally returning non-ok status from internal iterator.
To find the iterator types that needed changes I searched for "public .*Iterator" in the code. Here's an overview of all 27 iterator types:
Iterators that didn't need changes:
* status() is always ok(), or Valid() is always false: MemTableIterator, ModelIter, TestIterator, KVIter (2 classes with this name anonymous namespaces), LoggingForwardVectorIterator, VectorIterator, MockTableIterator, EmptyIterator, EmptyInternalIterator.
* Thin wrappers that always pass through Valid() and status(): ArenaWrappedDBIter, TtlIterator, InternalIteratorFromIterator.
Iterators with changes (see inline comments for details):
* DBIter - an overhaul:
- It used to silently skip corrupted keys (`FindParseableKey()`), which seems dangerous. This PR makes it just stop immediately after encountering a corrupted key, just like it would for other kinds of corruption. Let me know if there was actually some deeper meaning in this behavior and I should put it back.
- It had a few code paths silently discarding subiterator's status. The stress test caught a few.
- The backwards iteration code path was expecting the internal iterator's set of keys to be immutable. It's probably always true in practice at the moment, since ForwardIterator doesn't support backwards iteration, but this PR fixes it anyway. See added DBIteratorTest.ReverseToForwardBug for an example.
- Some parts of backwards iteration code path even did things like `assert(iter_->Valid())` after a seek, which is never a safe assumption.
- It used to not reset status on seek for some types of errors.
- Some simplifications and better comments.
- Some things got more complicated from the added error handling. I'm open to ideas for how to make it nicer.
* MergingIterator - check status after every operation on every subiterator, and in some places assert that valid subiterators have ok status.
* ForwardIterator - changed to the new convention, also slightly simplified.
* ForwardLevelIterator - fixed some bugs and simplified.
* LevelIterator - simplified.
* TwoLevelIterator - changed to the new convention. Also fixed a bug that would make SeekForPrev() sometimes silently ignore errors from first_level_iter_.
* BlockBasedTableIterator - minor changes.
* BlockIter - replaced `SetStatus()` with `Invalidate()` to make sure non-ok BlockIter is always invalid.
* PlainTableIterator - some seeks used to not reset status.
* CuckooTableIterator - tiny code cleanup.
* ManagedIterator - fixed some bugs.
* BaseDeltaIterator - changed to the new convention and fixed a bug.
* BlobDBIterator - seeks used to not reset status.
* KeyConvertingIterator - some small change.
Closes https://github.com/facebook/rocksdb/pull/3810
Differential Revision: D7888019
Pulled By: al13n321
fbshipit-source-id: 4aaf6d3421c545d16722a815b2fa2e7912bc851d
2018-05-17 09:44:14 +00:00
|
|
|
[
|
2018-06-21 21:30:00 +00:00
|
|
|
"db_iter_test",
|
|
|
|
"db/db_iter_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
Change and clarify the relationship between Valid(), status() and Seek*() for all iterators. Also fix some bugs
Summary:
Before this PR, Iterator/InternalIterator may simultaneously have non-ok status() and Valid() = true. That state means that the last operation failed, but the iterator is nevertheless positioned on some unspecified record. Likely intended uses of that are:
* If some sst files are corrupted, a normal iterator can be used to read the data from files that are not corrupted.
* When using read_tier = kBlockCacheTier, read the data that's in block cache, skipping over the data that is not.
However, this behavior wasn't documented well (and until recently the wiki on github had misleading incorrect information). In the code there's a lot of confusion about the relationship between status() and Valid(), and about whether Seek()/SeekToLast()/etc reset the status or not. There were a number of bugs caused by this confusion, both inside rocksdb and in the code that uses rocksdb (including ours).
This PR changes the convention to:
* If status() is not ok, Valid() always returns false.
* Any seek operation resets status. (Before the PR, it depended on iterator type and on particular error.)
This does sacrifice the two use cases listed above, but siying said it's ok.
Overview of the changes:
* A commit that adds missing status checks in MergingIterator. This fixes a bug that actually affects us, and we need it fixed. `DBIteratorTest.NonBlockingIterationBugRepro` explains the scenario.
* Changes to lots of iterator types to make all of them conform to the new convention. Some bug fixes along the way. By far the biggest changes are in DBIter, which is a big messy piece of code; I tried to make it less big and messy but mostly failed.
* A stress-test for DBIter, to gain some confidence that I didn't break it. It does a few million random operations on the iterator, while occasionally modifying the underlying data (like ForwardIterator does) and occasionally returning non-ok status from internal iterator.
To find the iterator types that needed changes I searched for "public .*Iterator" in the code. Here's an overview of all 27 iterator types:
Iterators that didn't need changes:
* status() is always ok(), or Valid() is always false: MemTableIterator, ModelIter, TestIterator, KVIter (2 classes with this name anonymous namespaces), LoggingForwardVectorIterator, VectorIterator, MockTableIterator, EmptyIterator, EmptyInternalIterator.
* Thin wrappers that always pass through Valid() and status(): ArenaWrappedDBIter, TtlIterator, InternalIteratorFromIterator.
Iterators with changes (see inline comments for details):
* DBIter - an overhaul:
- It used to silently skip corrupted keys (`FindParseableKey()`), which seems dangerous. This PR makes it just stop immediately after encountering a corrupted key, just like it would for other kinds of corruption. Let me know if there was actually some deeper meaning in this behavior and I should put it back.
- It had a few code paths silently discarding subiterator's status. The stress test caught a few.
- The backwards iteration code path was expecting the internal iterator's set of keys to be immutable. It's probably always true in practice at the moment, since ForwardIterator doesn't support backwards iteration, but this PR fixes it anyway. See added DBIteratorTest.ReverseToForwardBug for an example.
- Some parts of backwards iteration code path even did things like `assert(iter_->Valid())` after a seek, which is never a safe assumption.
- It used to not reset status on seek for some types of errors.
- Some simplifications and better comments.
- Some things got more complicated from the added error handling. I'm open to ideas for how to make it nicer.
* MergingIterator - check status after every operation on every subiterator, and in some places assert that valid subiterators have ok status.
* ForwardIterator - changed to the new convention, also slightly simplified.
* ForwardLevelIterator - fixed some bugs and simplified.
* LevelIterator - simplified.
* TwoLevelIterator - changed to the new convention. Also fixed a bug that would make SeekForPrev() sometimes silently ignore errors from first_level_iter_.
* BlockBasedTableIterator - minor changes.
* BlockIter - replaced `SetStatus()` with `Invalidate()` to make sure non-ok BlockIter is always invalid.
* PlainTableIterator - some seeks used to not reset status.
* CuckooTableIterator - tiny code cleanup.
* ManagedIterator - fixed some bugs.
* BaseDeltaIterator - changed to the new convention and fixed a bug.
* BlobDBIterator - seeks used to not reset status.
* KeyConvertingIterator - some small change.
Closes https://github.com/facebook/rocksdb/pull/3810
Differential Revision: D7888019
Pulled By: al13n321
fbshipit-source-id: 4aaf6d3421c545d16722a815b2fa2e7912bc851d
2018-05-17 09:44:14 +00:00
|
|
|
],
|
2017-11-15 22:13:39 +00:00
|
|
|
[
|
|
|
|
"db_iterator_test",
|
|
|
|
"db/db_iterator_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
Integrity protection for live updates to WriteBatch (#7748)
Summary:
This PR adds the foundation classes for key-value integrity protection and the first use case: protecting live updates from the source buffers added to `WriteBatch` through the destination buffer in `MemTable`. The width of the protection info is not yet configurable -- only eight bytes per key is supported. This PR allows users to enable protection by constructing `WriteBatch` with `protection_bytes_per_key == 8`. It does not yet expose a way for users to get integrity protection via other write APIs (e.g., `Put()`, `Merge()`, `Delete()`, etc.).
The foundation classes (`ProtectionInfo.*`) embed the coverage info in their type, and provide `Protect.*()` and `Strip.*()` functions to navigate between types with different coverage. For making bytes per key configurable (for powers of two up to eight) in the future, these classes are templated on the unsigned integer type used to store the protection info. That integer contains the XOR'd result of hashes with independent seeds for all covered fields. For integer fields, the hash is computed on the raw unadjusted bytes, so the result is endian-dependent. The most significant bytes are truncated when the hash value (8 bytes) is wider than the protection integer.
When `WriteBatch` is constructed with `protection_bytes_per_key == 8`, we hold a `ProtectionInfoKVOTC` (i.e., one that covers key, value, optype aka `ValueType`, timestamp, and CF ID) for each entry added to the batch. The protection info is generated from the original buffers passed by the user, as well as the original metadata generated internally. When writing to memtable, each entry is transformed to a `ProtectionInfoKVOTS` (i.e., dropping coverage of CF ID and adding coverage of sequence number), since at that point we know the sequence number, and have already selected a memtable corresponding to a particular CF. This protection info is verified once the entry is encoded in the `MemTable` buffer.
Pull Request resolved: https://github.com/facebook/rocksdb/pull/7748
Test Plan:
- an integration test to verify a wide variety of single-byte changes to the encoded `MemTable` buffer are caught
- add to stress/crash test to verify it works in variety of configs/operations without intentional corruption
- [deferred] unit tests for `ProtectionInfo.*` classes for edge cases like KV swap, `SliceParts` and `Slice` APIs are interchangeable, etc.
Reviewed By: pdillinger
Differential Revision: D25754492
Pulled By: ajkr
fbshipit-source-id: e481bac6c03c2ab268be41359730f1ceb9964866
2021-01-29 20:17:17 +00:00
|
|
|
[
|
|
|
|
"db_kv_checksum_test",
|
|
|
|
"db/db_kv_checksum_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
Integrity protection for live updates to WriteBatch (#7748)
Summary:
This PR adds the foundation classes for key-value integrity protection and the first use case: protecting live updates from the source buffers added to `WriteBatch` through the destination buffer in `MemTable`. The width of the protection info is not yet configurable -- only eight bytes per key is supported. This PR allows users to enable protection by constructing `WriteBatch` with `protection_bytes_per_key == 8`. It does not yet expose a way for users to get integrity protection via other write APIs (e.g., `Put()`, `Merge()`, `Delete()`, etc.).
The foundation classes (`ProtectionInfo.*`) embed the coverage info in their type, and provide `Protect.*()` and `Strip.*()` functions to navigate between types with different coverage. For making bytes per key configurable (for powers of two up to eight) in the future, these classes are templated on the unsigned integer type used to store the protection info. That integer contains the XOR'd result of hashes with independent seeds for all covered fields. For integer fields, the hash is computed on the raw unadjusted bytes, so the result is endian-dependent. The most significant bytes are truncated when the hash value (8 bytes) is wider than the protection integer.
When `WriteBatch` is constructed with `protection_bytes_per_key == 8`, we hold a `ProtectionInfoKVOTC` (i.e., one that covers key, value, optype aka `ValueType`, timestamp, and CF ID) for each entry added to the batch. The protection info is generated from the original buffers passed by the user, as well as the original metadata generated internally. When writing to memtable, each entry is transformed to a `ProtectionInfoKVOTS` (i.e., dropping coverage of CF ID and adding coverage of sequence number), since at that point we know the sequence number, and have already selected a memtable corresponding to a particular CF. This protection info is verified once the entry is encoded in the `MemTable` buffer.
Pull Request resolved: https://github.com/facebook/rocksdb/pull/7748
Test Plan:
- an integration test to verify a wide variety of single-byte changes to the encoded `MemTable` buffer are caught
- add to stress/crash test to verify it works in variety of configs/operations without intentional corruption
- [deferred] unit tests for `ProtectionInfo.*` classes for edge cases like KV swap, `SliceParts` and `Slice` APIs are interchangeable, etc.
Reviewed By: pdillinger
Differential Revision: D25754492
Pulled By: ajkr
fbshipit-source-id: e481bac6c03c2ab268be41359730f1ceb9964866
2021-01-29 20:17:17 +00:00
|
|
|
[],
|
|
|
|
[],
|
|
|
|
],
|
2017-11-15 22:13:39 +00:00
|
|
|
[
|
|
|
|
"db_log_iter_test",
|
|
|
|
"db/db_log_iter_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
2020-03-12 01:36:43 +00:00
|
|
|
[
|
|
|
|
"db_logical_block_size_cache_test",
|
|
|
|
"db/db_logical_block_size_cache_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2020-03-12 01:36:43 +00:00
|
|
|
[],
|
|
|
|
[],
|
|
|
|
],
|
2017-11-15 22:13:39 +00:00
|
|
|
[
|
|
|
|
"db_memtable_test",
|
|
|
|
"db/db_memtable_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
2019-10-22 02:38:42 +00:00
|
|
|
"db_merge_operand_test",
|
|
|
|
"db/db_merge_operand_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
New API to get all merge operands for a Key (#5604)
Summary:
This is a new API added to db.h to allow for fetching all merge operands associated with a Key. The main motivation for this API is to support use cases where doing a full online merge is not necessary as it is performance sensitive. Example use-cases:
1. Update subset of columns and read subset of columns -
Imagine a SQL Table, a row is encoded as a K/V pair (as it is done in MyRocks). If there are many columns and users only updated one of them, we can use merge operator to reduce write amplification. While users only read one or two columns in the read query, this feature can avoid a full merging of the whole row, and save some CPU.
2. Updating very few attributes in a value which is a JSON-like document -
Updating one attribute can be done efficiently using merge operator, while reading back one attribute can be done more efficiently if we don't need to do a full merge.
----------------------------------------------------------------------------------------------------
API :
Status GetMergeOperands(
const ReadOptions& options, ColumnFamilyHandle* column_family,
const Slice& key, PinnableSlice* merge_operands,
GetMergeOperandsOptions* get_merge_operands_options,
int* number_of_operands)
Example usage :
int size = 100;
int number_of_operands = 0;
std::vector<PinnableSlice> values(size);
GetMergeOperandsOptions merge_operands_info;
db_->GetMergeOperands(ReadOptions(), db_->DefaultColumnFamily(), "k1", values.data(), merge_operands_info, &number_of_operands);
Description :
Returns all the merge operands corresponding to the key. If the number of merge operands in DB is greater than merge_operands_options.expected_max_number_of_operands no merge operands are returned and status is Incomplete. Merge operands returned are in the order of insertion.
merge_operands-> Points to an array of at-least merge_operands_options.expected_max_number_of_operands and the caller is responsible for allocating it. If the status returned is Incomplete then number_of_operands will contain the total number of merge operands found in DB for key.
Pull Request resolved: https://github.com/facebook/rocksdb/pull/5604
Test Plan:
Added unit test and perf test in db_bench that can be run using the command:
./db_bench -benchmarks=getmergeoperands --merge_operator=sortlist
Differential Revision: D16657366
Pulled By: vjnadimpalli
fbshipit-source-id: 0faadd752351745224ee12d4ae9ef3cb529951bf
2019-08-06 21:22:34 +00:00
|
|
|
[
|
2019-10-22 02:38:42 +00:00
|
|
|
"db_merge_operator_test",
|
|
|
|
"db/db_merge_operator_test.cc",
|
New API to get all merge operands for a Key (#5604)
Summary:
This is a new API added to db.h to allow for fetching all merge operands associated with a Key. The main motivation for this API is to support use cases where doing a full online merge is not necessary as it is performance sensitive. Example use-cases:
1. Update subset of columns and read subset of columns -
Imagine a SQL Table, a row is encoded as a K/V pair (as it is done in MyRocks). If there are many columns and users only updated one of them, we can use merge operator to reduce write amplification. While users only read one or two columns in the read query, this feature can avoid a full merging of the whole row, and save some CPU.
2. Updating very few attributes in a value which is a JSON-like document -
Updating one attribute can be done efficiently using merge operator, while reading back one attribute can be done more efficiently if we don't need to do a full merge.
----------------------------------------------------------------------------------------------------
API :
Status GetMergeOperands(
const ReadOptions& options, ColumnFamilyHandle* column_family,
const Slice& key, PinnableSlice* merge_operands,
GetMergeOperandsOptions* get_merge_operands_options,
int* number_of_operands)
Example usage :
int size = 100;
int number_of_operands = 0;
std::vector<PinnableSlice> values(size);
GetMergeOperandsOptions merge_operands_info;
db_->GetMergeOperands(ReadOptions(), db_->DefaultColumnFamily(), "k1", values.data(), merge_operands_info, &number_of_operands);
Description :
Returns all the merge operands corresponding to the key. If the number of merge operands in DB is greater than merge_operands_options.expected_max_number_of_operands no merge operands are returned and status is Incomplete. Merge operands returned are in the order of insertion.
merge_operands-> Points to an array of at-least merge_operands_options.expected_max_number_of_operands and the caller is responsible for allocating it. If the status returned is Incomplete then number_of_operands will contain the total number of merge operands found in DB for key.
Pull Request resolved: https://github.com/facebook/rocksdb/pull/5604
Test Plan:
Added unit test and perf test in db_bench that can be run using the command:
./db_bench -benchmarks=getmergeoperands --merge_operator=sortlist
Differential Revision: D16657366
Pulled By: vjnadimpalli
fbshipit-source-id: 0faadd752351745224ee12d4ae9ef3cb529951bf
2019-08-06 21:22:34 +00:00
|
|
|
"parallel",
|
|
|
|
[],
|
|
|
|
[],
|
|
|
|
],
|
2017-11-15 22:13:39 +00:00
|
|
|
[
|
|
|
|
"db_options_test",
|
|
|
|
"db/db_options_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"db_properties_test",
|
|
|
|
"db/db_properties_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"db_range_del_test",
|
|
|
|
"db/db_range_del_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
2019-03-26 23:41:31 +00:00
|
|
|
[
|
|
|
|
"db_secondary_test",
|
2021-03-15 22:01:27 +00:00
|
|
|
"db/db_secondary_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2019-03-26 23:41:31 +00:00
|
|
|
],
|
2017-11-15 22:13:39 +00:00
|
|
|
[
|
|
|
|
"db_sst_test",
|
|
|
|
"db/db_sst_test.cc",
|
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"db_statistics_test",
|
|
|
|
"db/db_statistics_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"db_table_properties_test",
|
|
|
|
"db/db_table_properties_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"db_tailing_iter_test",
|
|
|
|
"db/db_tailing_iter_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"db_test",
|
|
|
|
"db/db_test.cc",
|
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"db_test2",
|
|
|
|
"db/db_test2.cc",
|
2020-07-20 21:59:49 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"db_universal_compaction_test",
|
|
|
|
"db/db_universal_compaction_test.cc",
|
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"db_wal_test",
|
|
|
|
"db/db_wal_test.cc",
|
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
2020-03-13 18:33:04 +00:00
|
|
|
[
|
|
|
|
"db_with_timestamp_basic_test",
|
|
|
|
"db/db_with_timestamp_basic_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2020-03-13 18:33:04 +00:00
|
|
|
[],
|
|
|
|
[],
|
|
|
|
],
|
2020-04-10 23:03:33 +00:00
|
|
|
[
|
|
|
|
"db_with_timestamp_compaction_test",
|
|
|
|
"db/db_with_timestamp_compaction_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2020-04-10 23:03:33 +00:00
|
|
|
[],
|
|
|
|
[],
|
|
|
|
],
|
2021-04-21 20:53:05 +00:00
|
|
|
[
|
|
|
|
"db_write_buffer_manager_test",
|
|
|
|
"db/db_write_buffer_manager_test.cc",
|
|
|
|
"parallel",
|
|
|
|
[],
|
|
|
|
[],
|
|
|
|
],
|
2017-11-15 22:13:39 +00:00
|
|
|
[
|
|
|
|
"db_write_test",
|
|
|
|
"db/db_write_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"dbformat_test",
|
|
|
|
"db/dbformat_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
2020-02-11 01:58:03 +00:00
|
|
|
[
|
|
|
|
"defer_test",
|
|
|
|
"util/defer_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2020-02-11 01:58:03 +00:00
|
|
|
[],
|
|
|
|
[],
|
|
|
|
],
|
2017-11-15 22:13:39 +00:00
|
|
|
[
|
|
|
|
"delete_scheduler_test",
|
2019-05-30 03:44:08 +00:00
|
|
|
"file/delete_scheduler_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"deletefile_test",
|
|
|
|
"db/deletefile_test.cc",
|
|
|
|
"serial",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"dynamic_bloom_test",
|
|
|
|
"util/dynamic_bloom_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"env_basic_test",
|
|
|
|
"env/env_basic_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
2019-07-24 00:08:26 +00:00
|
|
|
[
|
|
|
|
"env_logger_test",
|
|
|
|
"logging/env_logger_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2019-07-24 00:08:26 +00:00
|
|
|
],
|
2017-11-15 22:13:39 +00:00
|
|
|
[
|
|
|
|
"env_test",
|
|
|
|
"env/env_test.cc",
|
|
|
|
"serial",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"env_timed_test",
|
|
|
|
"utilities/env_timed_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
2018-07-12 18:27:28 +00:00
|
|
|
[
|
2020-03-04 20:30:34 +00:00
|
|
|
"error_handler_fs_test",
|
|
|
|
"db/error_handler_fs_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2018-07-12 18:27:28 +00:00
|
|
|
],
|
2017-11-15 22:13:39 +00:00
|
|
|
[
|
|
|
|
"event_logger_test",
|
2019-06-01 00:19:43 +00:00
|
|
|
"logging/event_logger_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"external_sst_file_basic_test",
|
|
|
|
"db/external_sst_file_basic_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"external_sst_file_test",
|
|
|
|
"db/external_sst_file_test.cc",
|
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"fault_injection_test",
|
|
|
|
"db/fault_injection_test.cc",
|
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"file_indexer_test",
|
|
|
|
"db/file_indexer_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"file_reader_writer_test",
|
|
|
|
"util/file_reader_writer_test.cc",
|
2019-07-23 18:12:25 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"filelock_test",
|
|
|
|
"util/filelock_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"filename_test",
|
|
|
|
"db/filename_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"flush_job_test",
|
|
|
|
"db/flush_job_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"full_filter_block_test",
|
2019-05-30 21:47:29 +00:00
|
|
|
"table/block_based/full_filter_block_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"hash_table_test",
|
|
|
|
"utilities/persistent_cache/hash_table_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"hash_test",
|
|
|
|
"util/hash_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"heap_test",
|
|
|
|
"util/heap_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"histogram_test",
|
|
|
|
"monitoring/histogram_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
2019-07-24 00:08:26 +00:00
|
|
|
[
|
|
|
|
"import_column_family_test",
|
|
|
|
"db/import_column_family_test.cc",
|
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2019-07-24 00:08:26 +00:00
|
|
|
],
|
2017-11-15 22:13:39 +00:00
|
|
|
[
|
|
|
|
"inlineskiplist_test",
|
|
|
|
"memtable/inlineskiplist_test.cc",
|
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
2020-03-12 01:36:43 +00:00
|
|
|
[
|
|
|
|
"io_posix_test",
|
|
|
|
"env/io_posix_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2020-03-12 01:36:43 +00:00
|
|
|
[],
|
|
|
|
[],
|
|
|
|
],
|
2020-09-23 22:49:11 +00:00
|
|
|
[
|
|
|
|
"io_tracer_parser_test",
|
|
|
|
"tools/io_tracer_parser_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2020-09-23 22:49:11 +00:00
|
|
|
[],
|
|
|
|
[],
|
|
|
|
],
|
2020-06-18 17:44:32 +00:00
|
|
|
[
|
|
|
|
"io_tracer_test",
|
|
|
|
"trace_replay/io_tracer_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2020-06-18 17:44:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
|
|
|
],
|
2017-11-15 22:13:39 +00:00
|
|
|
[
|
|
|
|
"iostats_context_test",
|
|
|
|
"monitoring/iostats_context_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"ldb_cmd_test",
|
|
|
|
"tools/ldb_cmd_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"listener_test",
|
|
|
|
"db/listener_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"log_test",
|
|
|
|
"db/log_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"lru_cache_test",
|
|
|
|
"cache/lru_cache_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"manual_compaction_test",
|
|
|
|
"db/manual_compaction_test.cc",
|
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
2020-04-27 00:33:50 +00:00
|
|
|
[
|
|
|
|
"memkind_kmem_allocator_test",
|
|
|
|
"memory/memkind_kmem_allocator_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2020-04-27 00:33:50 +00:00
|
|
|
[],
|
|
|
|
[],
|
|
|
|
],
|
2017-11-15 22:13:39 +00:00
|
|
|
[
|
|
|
|
"memory_test",
|
|
|
|
"utilities/memory/memory_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"memtable_list_test",
|
|
|
|
"db/memtable_list_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"merge_helper_test",
|
|
|
|
"db/merge_helper_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"merge_test",
|
|
|
|
"db/merge_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"merger_test",
|
|
|
|
"table/merger_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"mock_env_test",
|
|
|
|
"env/mock_env_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"object_registry_test",
|
|
|
|
"utilities/object_registry_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
Skip deleted WALs during recovery
Summary:
This patch record min log number to keep to the manifest while flushing SST files to ignore them and any WAL older than them during recovery. This is to avoid scenarios when we have a gap between the WAL files are fed to the recovery procedure. The gap could happen by for example out-of-order WAL deletion. Such gap could cause problems in 2PC recovery where the prepared and commit entry are placed into two separate WAL and gap in the WALs could result into not processing the WAL with the commit entry and hence breaking the 2PC recovery logic.
Before the commit, for 2PC case, we determined which log number to keep in FindObsoleteFiles(). We looked at the earliest logs with outstanding prepare entries, or prepare entries whose respective commit or abort are in memtable. With the commit, the same calculation is done while we apply the SST flush. Just before installing the flush file, we precompute the earliest log file to keep after the flush finishes using the same logic (but skipping the memtables just flushed), record this information to the manifest entry for this new flushed SST file. This pre-computed value is also remembered in memory, and will later be used to determine whether a log file can be deleted. This value is unlikely to change until next flush because the commit entry will stay in memtable. (In WritePrepared, we could have removed the older log files as soon as all prepared entries are committed. It's not yet done anyway. Even if we do it, the only thing we loss with this new approach is earlier log deletion between two flushes, which does not guarantee to happen anyway because the obsolete file clean-up function is only executed after flush or compaction)
This min log number to keep is stored in the manifest using the safely-ignore customized field of AddFile entry, in order to guarantee that the DB generated using newer release can be opened by previous releases no older than 4.2.
Closes https://github.com/facebook/rocksdb/pull/3765
Differential Revision: D7747618
Pulled By: siying
fbshipit-source-id: d00c92105b4f83852e9754a1b70d6b64cb590729
2018-05-03 22:35:11 +00:00
|
|
|
[
|
|
|
|
"obsolete_files_test",
|
|
|
|
"db/obsolete_files_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
Skip deleted WALs during recovery
Summary:
This patch record min log number to keep to the manifest while flushing SST files to ignore them and any WAL older than them during recovery. This is to avoid scenarios when we have a gap between the WAL files are fed to the recovery procedure. The gap could happen by for example out-of-order WAL deletion. Such gap could cause problems in 2PC recovery where the prepared and commit entry are placed into two separate WAL and gap in the WALs could result into not processing the WAL with the commit entry and hence breaking the 2PC recovery logic.
Before the commit, for 2PC case, we determined which log number to keep in FindObsoleteFiles(). We looked at the earliest logs with outstanding prepare entries, or prepare entries whose respective commit or abort are in memtable. With the commit, the same calculation is done while we apply the SST flush. Just before installing the flush file, we precompute the earliest log file to keep after the flush finishes using the same logic (but skipping the memtables just flushed), record this information to the manifest entry for this new flushed SST file. This pre-computed value is also remembered in memory, and will later be used to determine whether a log file can be deleted. This value is unlikely to change until next flush because the commit entry will stay in memtable. (In WritePrepared, we could have removed the older log files as soon as all prepared entries are committed. It's not yet done anyway. Even if we do it, the only thing we loss with this new approach is earlier log deletion between two flushes, which does not guarantee to happen anyway because the obsolete file clean-up function is only executed after flush or compaction)
This min log number to keep is stored in the manifest using the safely-ignore customized field of AddFile entry, in order to guarantee that the DB generated using newer release can be opened by previous releases no older than 4.2.
Closes https://github.com/facebook/rocksdb/pull/3765
Differential Revision: D7747618
Pulled By: siying
fbshipit-source-id: d00c92105b4f83852e9754a1b70d6b64cb590729
2018-05-03 22:35:11 +00:00
|
|
|
],
|
2017-11-15 22:13:39 +00:00
|
|
|
[
|
|
|
|
"optimistic_transaction_test",
|
|
|
|
"utilities/transactions/optimistic_transaction_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"option_change_migration_test",
|
|
|
|
"utilities/option_change_migration/option_change_migration_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"options_file_test",
|
|
|
|
"db/options_file_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"options_settable_test",
|
|
|
|
"options/options_settable_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"options_test",
|
|
|
|
"options/options_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"options_util_test",
|
|
|
|
"utilities/options/options_util_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"partitioned_filter_block_test",
|
2019-05-30 21:47:29 +00:00
|
|
|
"table/block_based/partitioned_filter_block_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"perf_context_test",
|
|
|
|
"db/perf_context_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
2020-10-02 02:12:26 +00:00
|
|
|
[
|
|
|
|
"periodic_work_scheduler_test",
|
|
|
|
"db/periodic_work_scheduler_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2020-10-02 02:12:26 +00:00
|
|
|
[],
|
|
|
|
[],
|
|
|
|
],
|
2017-11-15 22:13:39 +00:00
|
|
|
[
|
|
|
|
"persistent_cache_test",
|
|
|
|
"utilities/persistent_cache/persistent_cache_test.cc",
|
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"plain_table_db_test",
|
|
|
|
"db/plain_table_db_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
2020-10-19 17:12:53 +00:00
|
|
|
[
|
|
|
|
"point_lock_manager_test",
|
|
|
|
"utilities/transactions/lock/point/point_lock_manager_test.cc",
|
|
|
|
"parallel",
|
|
|
|
[],
|
|
|
|
[],
|
|
|
|
],
|
2020-08-28 01:15:11 +00:00
|
|
|
[
|
|
|
|
"prefetch_test",
|
|
|
|
"file/prefetch_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2020-08-28 01:15:11 +00:00
|
|
|
[],
|
|
|
|
[],
|
|
|
|
],
|
2017-11-15 22:13:39 +00:00
|
|
|
[
|
|
|
|
"prefix_test",
|
|
|
|
"db/prefix_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
Support direct IO in RandomAccessFileReader::MultiRead (#6446)
Summary:
By supporting direct IO in RandomAccessFileReader::MultiRead, the benefits of parallel IO (IO uring) and direct IO can be combined.
In direct IO mode, read requests are aligned and merged together before being issued to RandomAccessFile::MultiRead, so blocks in the original requests might share the same underlying buffer, the shared buffers are returned in `aligned_bufs`, which is a new parameter of the `MultiRead` API.
For example, suppose alignment requirement for direct IO is 4KB, one request is (offset: 1KB, len: 1KB), another request is (offset: 3KB, len: 1KB), then since they all belong to page (offset: 0, len: 4KB), `MultiRead` only reads the page with direct IO into a buffer on heap, and returns 2 Slices referencing regions in that same buffer. See `random_access_file_reader_test.cc` for more examples.
Pull Request resolved: https://github.com/facebook/rocksdb/pull/6446
Test Plan: Added a new test `random_access_file_reader_test.cc`.
Reviewed By: anand1976
Differential Revision: D20097518
Pulled By: cheng-chang
fbshipit-source-id: ca48a8faf9c3af146465c102ef6b266a363e78d1
2020-03-20 23:15:40 +00:00
|
|
|
[
|
|
|
|
"random_access_file_reader_test",
|
|
|
|
"file/random_access_file_reader_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
Support direct IO in RandomAccessFileReader::MultiRead (#6446)
Summary:
By supporting direct IO in RandomAccessFileReader::MultiRead, the benefits of parallel IO (IO uring) and direct IO can be combined.
In direct IO mode, read requests are aligned and merged together before being issued to RandomAccessFile::MultiRead, so blocks in the original requests might share the same underlying buffer, the shared buffers are returned in `aligned_bufs`, which is a new parameter of the `MultiRead` API.
For example, suppose alignment requirement for direct IO is 4KB, one request is (offset: 1KB, len: 1KB), another request is (offset: 3KB, len: 1KB), then since they all belong to page (offset: 0, len: 4KB), `MultiRead` only reads the page with direct IO into a buffer on heap, and returns 2 Slices referencing regions in that same buffer. See `random_access_file_reader_test.cc` for more examples.
Pull Request resolved: https://github.com/facebook/rocksdb/pull/6446
Test Plan: Added a new test `random_access_file_reader_test.cc`.
Reviewed By: anand1976
Differential Revision: D20097518
Pulled By: cheng-chang
fbshipit-source-id: ca48a8faf9c3af146465c102ef6b266a363e78d1
2020-03-20 23:15:40 +00:00
|
|
|
[],
|
|
|
|
[],
|
|
|
|
],
|
2019-12-13 21:25:14 +00:00
|
|
|
[
|
|
|
|
"random_test",
|
|
|
|
"util/random_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-12-13 21:25:14 +00:00
|
|
|
[],
|
|
|
|
[],
|
|
|
|
],
|
2017-11-15 22:13:39 +00:00
|
|
|
[
|
|
|
|
"range_del_aggregator_test",
|
|
|
|
"db/range_del_aggregator_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
2020-12-23 03:10:56 +00:00
|
|
|
[
|
|
|
|
"range_locking_test",
|
|
|
|
"utilities/transactions/lock/range/range_locking_test.cc",
|
|
|
|
"parallel",
|
|
|
|
[],
|
|
|
|
[],
|
|
|
|
],
|
2018-10-27 00:27:13 +00:00
|
|
|
[
|
|
|
|
"range_tombstone_fragmenter_test",
|
|
|
|
"db/range_tombstone_fragmenter_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2018-10-27 00:27:13 +00:00
|
|
|
],
|
2017-11-15 22:13:39 +00:00
|
|
|
[
|
|
|
|
"rate_limiter_test",
|
|
|
|
"util/rate_limiter_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"reduce_levels_test",
|
|
|
|
"tools/reduce_levels_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"repair_test",
|
|
|
|
"db/repair_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
2018-09-27 22:25:47 +00:00
|
|
|
[
|
|
|
|
"repeatable_thread_test",
|
|
|
|
"util/repeatable_thread_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2018-09-27 22:25:47 +00:00
|
|
|
],
|
2020-10-26 03:43:04 +00:00
|
|
|
[
|
|
|
|
"ribbon_test",
|
|
|
|
"util/ribbon_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2020-10-26 03:43:04 +00:00
|
|
|
[],
|
|
|
|
[],
|
|
|
|
],
|
2017-11-15 22:13:39 +00:00
|
|
|
[
|
|
|
|
"sim_cache_test",
|
|
|
|
"utilities/simulator_cache/sim_cache_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"skiplist_test",
|
|
|
|
"memtable/skiplist_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
2020-02-07 22:24:41 +00:00
|
|
|
[
|
|
|
|
"slice_test",
|
|
|
|
"util/slice_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2020-02-07 22:24:41 +00:00
|
|
|
[],
|
|
|
|
[],
|
|
|
|
],
|
2017-11-15 22:13:39 +00:00
|
|
|
[
|
|
|
|
"slice_transform_test",
|
|
|
|
"util/slice_transform_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"sst_dump_test",
|
|
|
|
"tools/sst_dump_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
2018-12-05 18:35:56 +00:00
|
|
|
[
|
|
|
|
"sst_file_reader_test",
|
|
|
|
"table/sst_file_reader_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2018-12-05 18:35:56 +00:00
|
|
|
],
|
2017-11-15 22:13:39 +00:00
|
|
|
[
|
|
|
|
"statistics_test",
|
|
|
|
"monitoring/statistics_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
2019-06-17 22:17:43 +00:00
|
|
|
[
|
|
|
|
"stats_history_test",
|
|
|
|
"monitoring/stats_history_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2019-06-17 22:17:43 +00:00
|
|
|
],
|
2017-11-15 22:13:39 +00:00
|
|
|
[
|
|
|
|
"stringappend_test",
|
|
|
|
"utilities/merge_operators/string_append/stringappend_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"table_properties_collector_test",
|
|
|
|
"db/table_properties_collector_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"table_test",
|
|
|
|
"table/table_test.cc",
|
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
2020-06-05 17:53:08 +00:00
|
|
|
[
|
|
|
|
"testutil_test",
|
|
|
|
"test_util/testutil_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2020-06-05 17:53:08 +00:00
|
|
|
[],
|
|
|
|
[],
|
|
|
|
],
|
2017-11-15 22:13:39 +00:00
|
|
|
[
|
|
|
|
"thread_list_test",
|
|
|
|
"util/thread_list_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"thread_local_test",
|
|
|
|
"util/thread_local_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"timer_queue_test",
|
|
|
|
"util/timer_queue_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
2020-04-07 18:53:00 +00:00
|
|
|
[
|
|
|
|
"timer_test",
|
|
|
|
"util/timer_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2020-04-07 18:53:00 +00:00
|
|
|
[],
|
|
|
|
[],
|
|
|
|
],
|
2018-08-27 17:56:28 +00:00
|
|
|
[
|
|
|
|
"trace_analyzer_test",
|
|
|
|
"tools/trace_analyzer_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2018-08-27 17:56:28 +00:00
|
|
|
],
|
2017-11-15 22:13:39 +00:00
|
|
|
[
|
|
|
|
"transaction_test",
|
|
|
|
"utilities/transactions/transaction_test.cc",
|
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"ttl_test",
|
|
|
|
"utilities/ttl/ttl_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"util_merge_operators_test",
|
|
|
|
"utilities/util_merge_operators_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"version_builder_test",
|
|
|
|
"db/version_builder_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"version_edit_test",
|
|
|
|
"db/version_edit_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"version_set_test",
|
|
|
|
"db/version_set_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"wal_manager_test",
|
|
|
|
"db/wal_manager_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
2020-04-01 23:37:54 +00:00
|
|
|
[
|
|
|
|
"work_queue_test",
|
|
|
|
"util/work_queue_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2020-04-01 23:37:54 +00:00
|
|
|
[],
|
|
|
|
[],
|
|
|
|
],
|
2017-11-15 22:13:39 +00:00
|
|
|
[
|
|
|
|
"write_batch_test",
|
|
|
|
"db/write_batch_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"write_batch_with_index_test",
|
|
|
|
"utilities/write_batch_with_index/write_batch_with_index_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"write_buffer_manager_test",
|
|
|
|
"memtable/write_buffer_manager_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"write_callback_test",
|
|
|
|
"db/write_callback_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"write_controller_test",
|
|
|
|
"db/write_controller_test.cc",
|
2021-04-05 03:09:05 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
|
|
|
[
|
|
|
|
"write_prepared_transaction_test",
|
|
|
|
"utilities/transactions/write_prepared_transaction_test.cc",
|
2017-12-18 22:39:49 +00:00
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2017-11-15 22:13:39 +00:00
|
|
|
],
|
2018-06-01 21:57:55 +00:00
|
|
|
[
|
|
|
|
"write_unprepared_transaction_test",
|
|
|
|
"utilities/transactions/write_unprepared_transaction_test.cc",
|
|
|
|
"parallel",
|
2019-08-02 17:40:32 +00:00
|
|
|
[],
|
|
|
|
[],
|
2018-06-01 21:57:55 +00:00
|
|
|
],
|
2017-11-15 22:13:39 +00:00
|
|
|
]
|
2017-04-04 23:09:31 +00:00
|
|
|
|
|
|
|
# Generate a test rule for each entry in ROCKS_TESTS
|
2017-11-30 18:40:39 +00:00
|
|
|
# Do not build the tests in opt mode, since SyncPoint and other test code
|
|
|
|
# will not be included.
|
2019-01-07 21:35:12 +00:00
|
|
|
[
|
2020-06-05 19:14:42 +00:00
|
|
|
cpp_unittest(
|
|
|
|
name = test_name,
|
|
|
|
srcs = [test_cc],
|
|
|
|
arch_preprocessor_flags = ROCKSDB_ARCH_PREPROCESSOR_FLAGS,
|
|
|
|
os_preprocessor_flags = ROCKSDB_OS_PREPROCESSOR_FLAGS,
|
2020-09-25 23:43:23 +00:00
|
|
|
compiler_flags = ROCKSDB_COMPILER_FLAGS + extra_compiler_flags,
|
2020-06-05 19:14:42 +00:00
|
|
|
preprocessor_flags = ROCKSDB_PREPROCESSOR_FLAGS,
|
2021-04-03 21:41:25 +00:00
|
|
|
include_paths = ROCKSDB_INCLUDE_PATHS,
|
2020-06-05 19:14:42 +00:00
|
|
|
deps = [":rocksdb_test_lib"] + extra_deps,
|
|
|
|
external_deps = ROCKSDB_EXTERNAL_DEPS + [
|
|
|
|
("googletest", None, "gtest"),
|
|
|
|
],
|
2019-01-07 21:35:12 +00:00
|
|
|
)
|
2019-08-02 17:40:32 +00:00
|
|
|
for test_name, test_cc, parallelism, extra_deps, extra_compiler_flags in ROCKS_TESTS
|
2019-01-07 21:35:12 +00:00
|
|
|
if not is_opt_mode
|
|
|
|
]
|