rocksdb/db
Peter Dillinger 8367f0d2d7 Improve / refactor anonymous mmap capabilities (#10810)
Summary:
The motivation for this change is a planned feature (related to HyperClockCache) that will depend on a large array that can essentially grow automatically, up to some bound, without the pointer address changing and with guaranteed zero-initialization of the data. Anonymous mmaps provide such functionality, and this change provides an internal API for that.

The other existing use of anonymous mmap in RocksDB is for allocating in huge pages. That code and other related Arena code used some awkward non-RAII and pre-C++11 idioms, so I cleaned up much of that as well, with RAII, move semantics, constexpr, etc.

More specifcs:
* Minimize conditional compilation
* Add Windows support for anonymous mmaps
* Use std::deque instead of std::vector for more efficient bag

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

Test Plan: unit test added for new functionality

Reviewed By: riversand963

Differential Revision: D40347204

Pulled By: pdillinger

fbshipit-source-id: ca83fcc47e50fabf7595069380edd2954f4f879c
2022-10-17 17:10:16 -07:00
..
blob Some clean-up of secondary cache (#10730) 2022-10-03 22:23:38 -07:00
compaction Allow the last level data moving up to penultimate level (#10782) 2022-10-10 22:50:34 -07:00
db_impl Allow Flush(sync=true) not supported in DB::Open() and db_stress (#10784) 2022-10-10 15:52:10 -07:00
wide Verify columns in NonBatchedOpsStressTest::VerifyDb (#10783) 2022-10-06 15:07:16 -07:00
arena_wrapped_db_iter.cc Cleanup SuperVersion in Iterator::Refresh() (#10770) 2022-10-04 22:23:24 -07:00
arena_wrapped_db_iter.h Fix memtable-only iterator regression (#10705) 2022-09-21 09:49:31 -07:00
builder.cc User-defined timestamp support for `DeleteRange()` (#10661) 2022-09-30 16:13:03 -07:00
builder.h Add seqno to time mapping (#10338) 2022-07-14 21:49:34 -07:00
c.cc Add C API to set avoid_unnecessary_blocking_io option (#10693) 2022-09-22 18:41:06 -07:00
c_test.c Support prepopulating/warming the blob cache (#10298) 2022-07-17 07:13:59 -07:00
column_family.cc Sanitize min_write_buffer_number_to_merge to 1 with atomic_flush (#10773) 2022-10-05 12:24:39 -07:00
column_family.h Add seqno to time mapping (#10338) 2022-07-14 21:49:34 -07:00
column_family_test.cc Validate option `memtable_protection_bytes_per_key` (#10621) 2022-08-31 17:47:07 -07:00
compact_files_test.cc Migrate to docker for CI run (#10496) 2022-08-10 17:34:38 -07:00
comparator_db_test.cc Document design/specification bugs with auto_prefix_mode (#10144) 2022-06-13 11:08:50 -07:00
convenience.cc Specify largest_seqno in VerifyChecksum (#9919) 2022-05-02 10:22:08 -07:00
corruption_test.cc Migrate to docker for CI run (#10496) 2022-08-10 17:34:38 -07:00
cuckoo_table_db_test.cc Remove own ToString() (#9955) 2022-05-06 13:03:58 -07:00
db_basic_test.cc Bypass a MultiGet test when async_io is used (#10669) 2022-09-14 09:59:54 -07:00
db_block_cache_test.cc Call experimental new clock cache HyperClockCache (#10684) 2022-09-16 12:47:29 -07:00
db_bloom_filter_test.cc Deflake^2 DBBloomFilterTest.OptimizeFiltersForHits (#10816) 2022-10-13 09:08:09 -07:00
db_compaction_filter_test.cc Skip swaths of range tombstone covered keys in merging iterator (2022 edition) (#10449) 2022-09-02 09:51:19 -07:00
db_compaction_test.cc Ignore kBottommostFiles compaction logic when allow_ingest_behind (#10767) 2022-10-05 09:27:14 -07:00
db_dynamic_level_test.cc Remove deprecated API AdvancedColumnFamilyOptions::soft_rate_limit/hard_rate_limit (#9452) 2022-01-27 13:01:09 -08:00
db_encryption_test.cc
db_filesnapshot.cc Reduce risk of backup or checkpoint missing a WAL file (#10083) 2022-06-01 11:02:27 -07:00
db_flush_test.cc Manual flush with `wait=false` should not stall when writes stopped (#10001) 2022-10-04 16:43:01 -07:00
db_info_dumper.cc Printing IO Error in DumpDBFileSummary (#9940) 2022-05-04 10:19:53 -07:00
db_info_dumper.h
db_inplace_update_test.cc Fix in-place updates for value types other than kTypeValue (#10254) 2022-06-27 16:37:09 -07:00
db_io_failure_test.cc Enable a few unit tests to use custom Env objects (#9087) 2021-11-08 11:05:59 -08:00
db_iter.cc Fix segfault in Iterator::Refresh() (#10739) 2022-09-26 18:57:23 -07:00
db_iter.h Add wide-column support to iterators (#10670) 2022-09-13 21:01:36 -07:00
db_iter_stress_test.cc Remove own ToString() (#9955) 2022-05-06 13:03:58 -07:00
db_iter_test.cc Remove own ToString() (#9955) 2022-05-06 13:03:58 -07:00
db_iterator_test.cc Cleanup SuperVersion in Iterator::Refresh() (#10770) 2022-10-04 22:23:24 -07:00
db_kv_checksum_test.cc Add memtable per key-value checksum (#10281) 2022-08-12 13:51:32 -07:00
db_log_iter_test.cc Remove own ToString() (#9955) 2022-05-06 13:03:58 -07:00
db_logical_block_size_cache_test.cc Attempt to deflake DBLogicalBlockSizeCacheTest.CreateColumnFamilies (#9516) 2022-03-04 11:35:28 -08:00
db_memtable_test.cc Add support for wide-column point lookups (#10540) 2022-08-19 11:51:12 -07:00
db_merge_operand_test.cc Avoid allocations/copies for large `GetMergeOperands()` results (#10458) 2022-08-04 00:42:13 -07:00
db_merge_operator_test.cc
db_options_test.cc Fix typo in comments and code (#10233) 2022-06-22 15:45:21 -07:00
db_properties_test.cc Refactor to avoid confusing "raw block" (#10408) 2022-09-22 11:25:32 -07:00
db_range_del_test.cc Use `sstableKeyCompare()` for compaction output boundary check (#10763) 2022-10-06 15:54:58 -07:00
db_rate_limiter_test.cc Add rate-limiting support to batched MultiGet() (#10159) 2022-06-17 16:40:47 -07:00
db_readonly_with_timestamp_test.cc Add timestamp support to CompactedDBImpl (#10030) 2022-05-24 12:14:10 -07:00
db_secondary_test.cc Fail DB::Open() if logger cannot be created (#9984) 2022-05-27 07:23:31 -07:00
db_sst_test.cc Fix periodic_task unable to re-register the same task type (#10379) 2022-08-25 18:52:37 -07:00
db_statistics_test.cc
db_table_properties_test.cc Always verify SST unique IDs on SST file open (#10532) 2022-09-07 22:52:42 -07:00
db_tailing_iter_test.cc Provide support for async_io with tailing iterators (#10781) 2022-10-10 15:48:48 -07:00
db_test.cc Fix flaky test ShuttingDownNotBlockStalledWrites (#10800) 2022-10-10 13:58:55 -07:00
db_test2.cc Align compaction output file boundaries to the next level ones (#10655) 2022-09-29 19:43:55 -07:00
db_test_util.cc Skip swaths of range tombstone covered keys in merging iterator (2022 edition) (#10449) 2022-09-02 09:51:19 -07:00
db_test_util.h Improve / refactor anonymous mmap capabilities (#10810) 2022-10-17 17:10:16 -07:00
db_universal_compaction_test.cc Remove own ToString() (#9955) 2022-05-06 13:03:58 -07:00
db_wal_test.cc Deflake DBWALTest.RaceInstallFlushResultsWithWalObsoletion (#10456) 2022-08-04 12:14:28 -07:00
db_with_timestamp_basic_test.cc User-defined timestamp support for `DeleteRange()` (#10661) 2022-09-30 16:13:03 -07:00
db_with_timestamp_compaction_test.cc Fix overlapping check by excluding timestamp (#10615) 2022-09-08 13:03:07 -07:00
db_with_timestamp_test_util.cc Add timestamp support to DBImplReadOnly (#10004) 2022-05-19 18:39:41 -07:00
db_with_timestamp_test_util.h Add timestamp support to DBImplReadOnly (#10004) 2022-05-19 18:39:41 -07:00
db_write_buffer_manager_test.cc Prevent a case of WriteBufferManager flush thrashing (#6364) 2022-08-17 15:53:40 -07:00
db_write_test.cc Add manual_wal_flush, FlushWAL() to stress/crash test (#10698) 2022-09-30 15:48:33 -07:00
dbformat.cc User-defined timestamp support for `DeleteRange()` (#10661) 2022-09-30 16:13:03 -07:00
dbformat.h User-defined timestamp support for `DeleteRange()` (#10661) 2022-09-30 16:13:03 -07:00
dbformat_test.cc Make InternalKeyComparator not configurable (#10342) 2022-07-14 10:09:31 -07:00
deletefile_test.cc Remove own ToString() (#9955) 2022-05-06 13:03:58 -07:00
error_handler.cc Do not hold mutex when write keys if not necessary (#7516) 2022-07-21 13:35:36 -07:00
error_handler.h Do not hold mutex when write keys if not necessary (#7516) 2022-07-21 13:35:36 -07:00
error_handler_fs_test.cc Deflake DBErrorHandlingFSTest.*WALWriteError (#10642) 2022-09-06 12:59:02 -07:00
event_helpers.cc LOG more info on oldest snapshot and sequence numbers (#10454) 2022-08-12 13:08:50 -07:00
event_helpers.h Add a listener callback for end of auto error recovery (#9244) 2021-12-08 14:30:57 -08:00
experimental.cc Allow manifest fix-up without requiring prior state (#10796) 2022-10-10 17:59:17 -07:00
external_sst_file_basic_test.cc Refactor to avoid confusing "raw block" (#10408) 2022-09-22 11:25:32 -07:00
external_sst_file_ingestion_job.cc User-defined timestamp support for `DeleteRange()` (#10661) 2022-09-30 16:13:03 -07:00
external_sst_file_ingestion_job.h Track SST unique id in MANIFEST and verify (#9990) 2022-05-19 11:04:21 -07:00
external_sst_file_test.cc Remove own ToString() (#9955) 2022-05-06 13:03:58 -07:00
fault_injection_test.cc Fix a bug causing duplicate trailing entries in WritableFile (buffered IO) (#9236) 2021-12-13 09:00:36 -08:00
file_indexer.cc
file_indexer.h Use std::numeric_limits<> (#9954) 2022-05-05 13:08:21 -07:00
file_indexer_test.cc
filename_test.cc fixing issue #8345 RocksDB does not work when using UNC network paths (#9384) 2022-03-30 15:55:31 -07:00
flush_job.cc User-defined timestamp support for `DeleteRange()` (#10661) 2022-09-30 16:13:03 -07:00
flush_job.h Add seqno to time mapping (#10338) 2022-07-14 21:49:34 -07:00
flush_job_test.cc Fragment memtable range tombstone in the write path (#10380) 2022-08-05 12:02:33 -07:00
flush_scheduler.cc
flush_scheduler.h
forward_iterator.cc Provide support for async_io with tailing iterators (#10781) 2022-10-10 15:48:48 -07:00
forward_iterator.h Provide support for async_io with tailing iterators (#10781) 2022-10-10 15:48:48 -07:00
forward_iterator_bench.cc Remove using namespace (#9369) 2022-01-12 09:31:12 -08:00
history_trimming_iterator.h Add OpenAndTrimHistory API to support trimming data with specified timestamp (#9410) 2022-03-11 16:13:23 -08:00
import_column_family_job.cc Add some missing headers (#10519) 2022-08-11 12:45:50 -07:00
import_column_family_job.h Add some missing headers (#10519) 2022-08-11 12:45:50 -07:00
import_column_family_test.cc Add some missing headers (#10519) 2022-08-11 12:45:50 -07:00
internal_stats.cc Revamp, optimize new experimental clock cache (#10626) 2022-09-16 00:24:11 -07:00
internal_stats.h Revamp, optimize new experimental clock cache (#10626) 2022-09-16 00:24:11 -07:00
job_context.h CompactionIterator sees consistent view of which keys are committed (#9830) 2022-04-14 11:11:04 -07:00
kv_checksum.h Add memtable per key-value checksum (#10281) 2022-08-12 13:51:32 -07:00
listener_test.cc Remove own ToString() (#9955) 2022-05-06 13:03:58 -07:00
log_format.h Add record to set WAL compression type if enabled (#9556) 2022-02-17 16:19:31 -08:00
log_reader.cc Add checksum handshake for WAL fragment decompression (#10339) 2022-07-25 16:27:26 -07:00
log_reader.h Add checksum handshake for WAL fragment decompression (#10339) 2022-07-25 16:27:26 -07:00
log_test.cc Add checksum handshake for WAL fragment decompression (#10339) 2022-07-25 16:27:26 -07:00
log_writer.cc Add manual_wal_flush, FlushWAL() to stress/crash test (#10698) 2022-09-30 15:48:33 -07:00
log_writer.h Add manual_wal_flush, FlushWAL() to stress/crash test (#10698) 2022-09-30 15:48:33 -07:00
logs_with_prep_tracker.cc
logs_with_prep_tracker.h
lookup_key.h Cleanup includes in dbformat.h (#8930) 2021-09-29 04:04:40 -07:00
malloc_stats.cc
malloc_stats.h
manual_compaction_test.cc Migrate to docker for CI run (#10496) 2022-08-10 17:34:38 -07:00
memtable.cc Improve / refactor anonymous mmap capabilities (#10810) 2022-10-17 17:10:16 -07:00
memtable.h User-defined timestamp support for `DeleteRange()` (#10661) 2022-09-30 16:13:03 -07:00
memtable_list.cc Fix memtable-only iterator regression (#10705) 2022-09-21 09:49:31 -07:00
memtable_list.h Fix memtable-only iterator regression (#10705) 2022-09-21 09:49:31 -07:00
memtable_list_test.cc Add support for wide-column point lookups (#10540) 2022-08-19 11:51:12 -07:00
merge_context.h
merge_helper.cc Add API for writing wide-column entities (#10242) 2022-06-25 15:30:47 -07:00
merge_helper.h Support readahead during compaction for blob files (#9187) 2021-11-19 17:53:47 -08:00
merge_helper_test.cc Support readahead during compaction for blob files (#9187) 2021-11-19 17:53:47 -08:00
merge_operator.cc
merge_test.cc Make the Env class Customizable (#9293) 2022-01-04 16:45:49 -08:00
obsolete_files_test.cc Remove own ToString() (#9955) 2022-05-06 13:03:58 -07:00
options_file_test.cc
output_validator.cc Cleanup includes in dbformat.h (#8930) 2021-09-29 04:04:40 -07:00
output_validator.h Cleanup includes in dbformat.h (#8930) 2021-09-29 04:04:40 -07:00
perf_context_test.cc Migrate to docker for CI run (#10496) 2022-08-10 17:34:38 -07:00
periodic_task_scheduler.cc Fix periodic_task unable to re-register the same task type (#10379) 2022-08-25 18:52:37 -07:00
periodic_task_scheduler.h Fix periodic_task unable to re-register the same task type (#10379) 2022-08-25 18:52:37 -07:00
periodic_task_scheduler_test.cc Fix periodic_task unable to re-register the same task type (#10379) 2022-08-25 18:52:37 -07:00
pinned_iterators_manager.h Avoid allocations/copies for large `GetMergeOperands()` results (#10458) 2022-08-04 00:42:13 -07:00
plain_table_db_test.cc Remove own ToString() (#9955) 2022-05-06 13:03:58 -07:00
post_memtable_callback.h Snapshots with user-specified timestamps (#9879) 2022-06-10 16:07:03 -07:00
pre_release_callback.h Fix and detect headers with missing dependencies (#8893) 2021-09-10 10:00:26 -07:00
prefix_test.cc Remove own ToString() (#9955) 2022-05-06 13:03:58 -07:00
range_del_aggregator.cc User-defined timestamp support for `DeleteRange()` (#10661) 2022-09-30 16:13:03 -07:00
range_del_aggregator.h User-defined timestamp support for `DeleteRange()` (#10661) 2022-09-30 16:13:03 -07:00
range_del_aggregator_bench.cc Cleanup multiple implementations of VectorIterator (#8901) 2021-10-06 07:48:31 -07:00
range_del_aggregator_test.cc Skip swaths of range tombstone covered keys in merging iterator (2022 edition) (#10449) 2022-09-02 09:51:19 -07:00
range_tombstone_fragmenter.cc User-defined timestamp support for `DeleteRange()` (#10661) 2022-09-30 16:13:03 -07:00
range_tombstone_fragmenter.h User-defined timestamp support for `DeleteRange()` (#10661) 2022-09-30 16:13:03 -07:00
range_tombstone_fragmenter_test.cc Cleanup multiple implementations of VectorIterator (#8901) 2021-10-06 07:48:31 -07:00
read_callback.h Fix and detect headers with missing dependencies (#8893) 2021-09-10 10:00:26 -07:00
repair.cc Always verify SST unique IDs on SST file open (#10532) 2022-09-07 22:52:42 -07:00
repair_test.cc Always verify SST unique IDs on SST file open (#10532) 2022-09-07 22:52:42 -07:00
seqno_time_test.cc Add option `preserve_internal_time_seconds` to preserve the time info (#10747) 2022-10-07 18:49:40 -07:00
seqno_to_time_mapping.cc Add option `preserve_internal_time_seconds` to preserve the time info (#10747) 2022-10-07 18:49:40 -07:00
seqno_to_time_mapping.h Add option `preserve_internal_time_seconds` to preserve the time info (#10747) 2022-10-07 18:49:40 -07:00
snapshot_checker.h Use STATIC_AVOID_DESTRUCTION for static objects with non-trivial destructors (#9958) 2022-05-17 09:39:22 -07:00
snapshot_impl.cc
snapshot_impl.h Snapshots with user-specified timestamps (#9879) 2022-06-10 16:07:03 -07:00
table_cache.cc User-defined timestamp support for `DeleteRange()` (#10661) 2022-09-30 16:13:03 -07:00
table_cache.h Always verify SST unique IDs on SST file open (#10532) 2022-09-07 22:52:42 -07:00
table_cache_sync_and_async.h Always verify SST unique IDs on SST file open (#10532) 2022-09-07 22:52:42 -07:00
table_properties_collector.cc Refactor to avoid confusing "raw block" (#10408) 2022-09-22 11:25:32 -07:00
table_properties_collector.h Refactor to avoid confusing "raw block" (#10408) 2022-09-22 11:25:32 -07:00
table_properties_collector_test.cc Refactor to avoid confusing "raw block" (#10408) 2022-09-22 11:25:32 -07:00
transaction_log_impl.cc Support read rate-limiting in SequentialFileReader (#9973) 2022-05-24 10:28:57 -07:00
transaction_log_impl.h Add checks to GetUpdatesSince (#9459) 2022-04-14 17:12:16 -07:00
trim_history_scheduler.cc
trim_history_scheduler.h
version_builder.cc Always verify SST unique IDs on SST file open (#10532) 2022-09-07 22:52:42 -07:00
version_builder.h Account memory of FileMetaData in global memory limit (#9924) 2022-06-14 13:06:40 -07:00
version_builder_test.cc Remove unused fields from FileMetaData (temporarily) (#10443) 2022-08-01 17:56:13 -07:00
version_edit.cc Remove unused fields from FileMetaData (temporarily) (#10443) 2022-08-01 17:56:13 -07:00
version_edit.h Always verify SST unique IDs on SST file open (#10532) 2022-09-07 22:52:42 -07:00
version_edit_handler.cc Add blob source to retrieve blobs in RocksDB (#10198) 2022-06-20 20:58:11 -07:00
version_edit_handler.h
version_edit_test.cc Remove unused fields from FileMetaData (temporarily) (#10443) 2022-08-01 17:56:13 -07:00
version_set.cc Allow manifest fix-up without requiring prior state (#10796) 2022-10-10 17:59:17 -07:00
version_set.h Allow manifest fix-up without requiring prior state (#10796) 2022-10-10 17:59:17 -07:00
version_set_sync_and_async.h Fix range deletion handling in async MultiGet (#10534) 2022-08-17 13:51:39 -07:00
version_set_test.cc Sync dir containing CURRENT after RenameFile on CURRENT as much as possible (#10573) 2022-08-29 17:35:21 -07:00
version_util.h Allow manifest fix-up without requiring prior state (#10796) 2022-10-10 17:59:17 -07:00
wal_edit.cc Do not hold mutex when write keys if not necessary (#7516) 2022-07-21 13:35:36 -07:00
wal_edit.h Do not hold mutex when write keys if not necessary (#7516) 2022-07-21 13:35:36 -07:00
wal_edit_test.cc Do not hold mutex when write keys if not necessary (#7516) 2022-07-21 13:35:36 -07:00
wal_manager.cc Fix bug for WalManager with compressed WAL (#10130) 2022-06-08 14:16:43 -07:00
wal_manager.h Fix bug for WalManager with compressed WAL (#10130) 2022-06-08 14:16:43 -07:00
wal_manager_test.cc Migrate to docker for CI run (#10496) 2022-08-10 17:34:38 -07:00
write_batch.cc User-defined timestamp support for `DeleteRange()` (#10661) 2022-09-30 16:13:03 -07:00
write_batch_base.cc
write_batch_internal.h User-defined timestamp support for `DeleteRange()` (#10661) 2022-09-30 16:13:03 -07:00
write_batch_test.cc User-defined timestamp support for `DeleteRange()` (#10661) 2022-09-30 16:13:03 -07:00
write_callback.h
write_callback_test.cc Migrate to docker for CI run (#10496) 2022-08-10 17:34:38 -07:00
write_controller.cc
write_controller.h Set Write rate limiter priority dynamically and pass it to FS (#9988) 2022-05-18 00:41:41 -07:00
write_controller_test.cc
write_thread.cc Fix race in ExitAsBatchGroupLeader with pipelined writes (#9944) 2022-08-02 14:52:10 -07:00
write_thread.h Fix race in ExitAsBatchGroupLeader with pipelined writes (#9944) 2022-08-02 14:52:10 -07:00