Deprecating iter_start_seqnum
and preserve_deletes
(#9091)
Summary: `ReadOptions::iter_start_seqnum` and `DBOptions::preserve_deletes` are deprecated, please try using user defined timestamp feature instead. The feature is used to support differential snapshots, but not well maintained (https://github.com/facebook/rocksdb/issues/6837, https://github.com/facebook/rocksdb/issues/8472) and the interface is not user friendly which returns an internal key from the iterator. The user defined timestamp feature is a more flexible feature to support similar usecase, please switch to that if you have such usecase. The deprecated feature will be removed in a future release. Pull Request resolved: https://github.com/facebook/rocksdb/pull/9091 Test Plan: check LOG Fix https://github.com/facebook/rocksdb/issues/9090 Reviewed By: ajkr Differential Revision: D32071750 Pulled By: jay-zhuang fbshipit-source-id: b882c4668dd1bf26ce03c4c192f1bba584bf6104
This commit is contained in:
parent
3ce4d4f558
commit
6cde8d2190
@ -38,6 +38,7 @@
|
|||||||
* `DB::Open()` is not going be blocked by obsolete file purge if `DBOptions::avoid_unnecessary_blocking_io` is set to true.
|
* `DB::Open()` is not going be blocked by obsolete file purge if `DBOptions::avoid_unnecessary_blocking_io` is set to true.
|
||||||
* In builds where glibc provides `gettid()`, info log ("LOG" file) lines now print a system-wide thread ID from `gettid()` instead of the process-local `pthread_self()`. For all users, the thread ID format is changed from hexadecimal to decimal integer.
|
* In builds where glibc provides `gettid()`, info log ("LOG" file) lines now print a system-wide thread ID from `gettid()` instead of the process-local `pthread_self()`. For all users, the thread ID format is changed from hexadecimal to decimal integer.
|
||||||
* In builds where glibc provides `pthread_setname_np()`, the background thread names no longer contain an ID suffix. For example, "rocksdb:bottom7" (and all other threads in the `Env::Priority::BOTTOM` pool) are now named "rocksdb:bottom". Previously large thread pools could breach the name size limit (e.g., naming "rocksdb:bottom10" would fail).
|
* In builds where glibc provides `pthread_setname_np()`, the background thread names no longer contain an ID suffix. For example, "rocksdb:bottom7" (and all other threads in the `Env::Priority::BOTTOM` pool) are now named "rocksdb:bottom". Previously large thread pools could breach the name size limit (e.g., naming "rocksdb:bottom10" would fail).
|
||||||
|
* Deprecating `ReadOptions::iter_start_seqnum` and `DBOptions::preserve_deletes`, please try using user defined timestamp feature instead. The options will be removed in a future release, currently it logs a warning message when using.
|
||||||
|
|
||||||
### Performance Improvements
|
### Performance Improvements
|
||||||
* Released some memory related to filter construction earlier in `BlockBasedTableBuilder` for `FullFilter` and `PartitionedFilter` case (#9070)
|
* Released some memory related to filter construction earlier in `BlockBasedTableBuilder` for `FullFilter` and `PartitionedFilter` case (#9070)
|
||||||
|
@ -2903,6 +2903,13 @@ Iterator* DBImpl::NewIterator(const ReadOptions& read_options,
|
|||||||
}
|
}
|
||||||
// if iterator wants internal keys, we can only proceed if
|
// if iterator wants internal keys, we can only proceed if
|
||||||
// we can guarantee the deletes haven't been processed yet
|
// we can guarantee the deletes haven't been processed yet
|
||||||
|
if (read_options.iter_start_seqnum > 0 &&
|
||||||
|
!iter_start_seqnum_deprecation_warned_.exchange(true)) {
|
||||||
|
ROCKS_LOG_WARN(
|
||||||
|
immutable_db_options_.info_log,
|
||||||
|
"iter_start_seqnum is deprecated, will be removed in a future release. "
|
||||||
|
"Please try using user-defined timestamp instead.");
|
||||||
|
}
|
||||||
if (immutable_db_options_.preserve_deletes &&
|
if (immutable_db_options_.preserve_deletes &&
|
||||||
read_options.iter_start_seqnum > 0 &&
|
read_options.iter_start_seqnum > 0 &&
|
||||||
read_options.iter_start_seqnum < preserve_deletes_seqnum_.load()) {
|
read_options.iter_start_seqnum < preserve_deletes_seqnum_.load()) {
|
||||||
|
@ -2321,6 +2321,10 @@ class DBImpl : public DB {
|
|||||||
|
|
||||||
// Pointer to WriteBufferManager stalling interface.
|
// Pointer to WriteBufferManager stalling interface.
|
||||||
std::unique_ptr<StallInterface> wbm_stall_;
|
std::unique_ptr<StallInterface> wbm_stall_;
|
||||||
|
|
||||||
|
// Indicate if deprecation warning message is logged before. Will be removed
|
||||||
|
// soon with the deprecated feature.
|
||||||
|
std::atomic_bool iter_start_seqnum_deprecation_warned_{false};
|
||||||
};
|
};
|
||||||
|
|
||||||
extern Options SanitizeOptions(const std::string& db, const Options& src,
|
extern Options SanitizeOptions(const std::string& db, const Options& src,
|
||||||
|
@ -200,6 +200,13 @@ DBOptions SanitizeOptions(const std::string& dbname, const DBOptions& src,
|
|||||||
"file size check will be skipped during open.");
|
"file size check will be skipped during open.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (result.preserve_deletes) {
|
||||||
|
ROCKS_LOG_WARN(
|
||||||
|
result.info_log,
|
||||||
|
"preserve_deletes is deprecated, will be removed in a future release. "
|
||||||
|
"Please try using user-defined timestamp instead.");
|
||||||
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1209,16 +1209,9 @@ struct DBOptions {
|
|||||||
// Immutable.
|
// Immutable.
|
||||||
bool allow_ingest_behind = false;
|
bool allow_ingest_behind = false;
|
||||||
|
|
||||||
// Needed to support differential snapshots.
|
// Deprecated, will be removed in a future release.
|
||||||
// If set to true then DB will only process deletes with sequence number
|
// Please try using user-defined timestamp instead.
|
||||||
// less than what was set by SetPreserveDeletesSequenceNumber(uint64_t ts).
|
|
||||||
// Clients are responsible to periodically call this method to advance
|
|
||||||
// the cutoff time. If this method is never called and preserve_deletes
|
|
||||||
// is set to true NO deletes will ever be processed.
|
|
||||||
// At the moment this only keeps normal deletes, SingleDeletes will
|
|
||||||
// not be preserved.
|
|
||||||
// DEFAULT: false
|
// DEFAULT: false
|
||||||
// Immutable (TODO: make it dynamically changeable)
|
|
||||||
bool preserve_deletes = false;
|
bool preserve_deletes = false;
|
||||||
|
|
||||||
// If enabled it uses two queues for writes, one for the ones with
|
// If enabled it uses two queues for writes, one for the ones with
|
||||||
@ -1557,10 +1550,8 @@ struct ReadOptions {
|
|||||||
// Default: empty (every table will be scanned)
|
// Default: empty (every table will be scanned)
|
||||||
std::function<bool(const TableProperties&)> table_filter;
|
std::function<bool(const TableProperties&)> table_filter;
|
||||||
|
|
||||||
// Needed to support differential snapshots. Has 2 effects:
|
// Deprecated, will be removed in a future release.
|
||||||
// 1) Iterator will skip all internal keys with seqnum < iter_start_seqnum
|
// Please try using user-defined timestamp instead.
|
||||||
// 2) if this param > 0 iterator will return INTERNAL keys instead of
|
|
||||||
// user keys; e.g. return tombstones as well.
|
|
||||||
// Default: 0 (don't filter by seqnum, return user keys)
|
// Default: 0 (don't filter by seqnum, return user keys)
|
||||||
SequenceNumber iter_start_seqnum;
|
SequenceNumber iter_start_seqnum;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user