rocksdb/java/rocksjni
Yu Zhang f2546b6623 Support returning write unix time in iterator property (#12428)
Summary:
This PR adds support to return data's approximate unix write time in the iterator property API. The general implementation is:
1) If the entry comes from a SST file, the sequence number to time mapping recorded in that file's table properties will be used to deduce the entry's write time from its sequence number. If no such recording is available, `std::numeric_limits<uint64_t>::max()` is returned to indicate the write time is unknown except if the entry's sequence number is zero, in which case, 0 is returned. This also means that even if `preclude_last_level_data_seconds` and `preserve_internal_time_seconds` can be toggled off between DB reopens, as long as the SST file's table property has the mapping available, the entry's write time can be deduced and returned.

2) If the entry comes from memtable, we will use the DB's sequence number to write time mapping to do similar things. A copy of the DB's seqno to write time mapping is kept in SuperVersion to allow iterators to have lock free access. This also means a new `SuperVersion` is installed each time DB's seqno to time mapping updates, which is originally proposed by Peter in  https://github.com/facebook/rocksdb/issues/11928 . Similarly, if the feature is not enabled, `std::numeric_limits<uint64_t>::max()` is returned to indicate the write time is unknown.

Needed follow up:
1) The write time for `kTypeValuePreferredSeqno` should be special cased, where it's already specified by the user, so we can directly return it.

2) Flush job can be updated to use DB's seqno to time mapping copy in the SuperVersion.

3) Handle the case when `TimedPut` is called with a write time that is `std::numeric_limits<uint64_t>::max()`. We can make it a regular `Put`.

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

Test Plan: Added unit test

Reviewed By: pdillinger

Differential Revision: D54967067

Pulled By: jowlyzhang

fbshipit-source-id: c795b1b7ec142e09e53f2ed3461cf719833cb37a
2024-03-15 15:37:37 -07:00
..
backup_engine_options.cc Change Java native methods to static (#11882) 2024-01-25 12:36:30 -08:00
backupenginejni.cc Change Java native methods to static (#11882) 2024-01-25 12:36:30 -08:00
cache.cc Put Cache and CacheWrapper in new public header (#11192) 2023-02-09 12:12:02 -08:00
cassandra_compactionfilterjni.cc Fix pointer to jlong conversion in 32 bit OS (#9396) 2022-03-01 09:02:15 -08:00
cassandra_value_operator.cc Change Java native methods to static (#11882) 2024-01-25 12:36:30 -08:00
checkpoint.cc Change Java native methods to static (#11882) 2024-01-25 12:36:30 -08:00
clock_cache.cc Change Java native methods to static (#11882) 2024-01-25 12:36:30 -08:00
columnfamilyhandle.cc Change Java native methods to static (#11882) 2024-01-25 12:36:30 -08:00
compact_range_options.cc Change Java native methods to static (#11882) 2024-01-25 12:36:30 -08:00
compaction_filter.cc Run format check for *.h and *.cc files under java/ (#10851) 2022-10-25 09:26:51 -07:00
compaction_filter_factory.cc Change Java native methods to static (#11882) 2024-01-25 12:36:30 -08:00
compaction_filter_factory_jnicallback.cc Run format check for *.h and *.cc files under java/ (#10851) 2022-10-25 09:26:51 -07:00
compaction_filter_factory_jnicallback.h Run format check for *.h and *.cc files under java/ (#10851) 2022-10-25 09:26:51 -07:00
compaction_job_info.cc Change Java native methods to static (#11882) 2024-01-25 12:36:30 -08:00
compaction_job_stats.cc Change Java native methods to static (#11882) 2024-01-25 12:36:30 -08:00
compaction_options.cc Change Java native methods to static (#11882) 2024-01-25 12:36:30 -08:00
compaction_options_fifo.cc Change Java native methods to static (#11882) 2024-01-25 12:36:30 -08:00
compaction_options_universal.cc Change Java native methods to static (#11882) 2024-01-25 12:36:30 -08:00
comparator.cc Change Java native methods to static (#11882) 2024-01-25 12:36:30 -08:00
comparatorjnicallback.cc Fix Java API ComparatorOptions use after delete error (#11176) 2023-02-17 13:03:41 -08:00
comparatorjnicallback.h Fix Java API ComparatorOptions use after delete error (#11176) 2023-02-17 13:03:41 -08:00
compression_options.cc Change Java native methods to static (#11882) 2024-01-25 12:36:30 -08:00
concurrent_task_limiter.cc Change Java native methods to static (#11882) 2024-01-25 12:36:30 -08:00
config_options.cc Change Java native methods to static (#11882) 2024-01-25 12:36:30 -08:00
cplusplus_to_java_convert.h Fix pointer to jlong conversion in 32 bit OS (#9396) 2022-03-01 09:02:15 -08:00
env.cc Change Java native methods to static (#11882) 2024-01-25 12:36:30 -08:00
env_options.cc Change Java native methods to static (#11882) 2024-01-25 12:36:30 -08:00
event_listener.cc Fix pointer to jlong conversion in 32 bit OS (#9396) 2022-03-01 09:02:15 -08:00
event_listener_jnicallback.cc Add (& fix) some simple source code checks (#8821) 2021-09-07 21:19:27 -07:00
event_listener_jnicallback.h Add (& fix) some simple source code checks (#8821) 2021-09-07 21:19:27 -07:00
export_import_files_metadatajni.cc Add jni Support for API CreateColumnFamilyWithImport (#11646) 2023-11-06 07:38:42 -08:00
filter.cc Change Java native methods to static (#11882) 2024-01-25 12:36:30 -08:00
hyper_clock_cache.cc Add HyperClockCache Java API. (#12065) 2023-11-16 15:46:31 -08:00
import_column_family_options.cc Add jni Support for API CreateColumnFamilyWithImport (#11646) 2023-11-06 07:38:42 -08:00
ingest_external_file_options.cc Change Java native methods to static (#11882) 2024-01-25 12:36:30 -08:00
iterator.cc Change Java native methods to static (#11882) 2024-01-25 12:36:30 -08:00
jni_multiget_helpers.cc JNI get_helper code sharing / multiGet() use efficient batch C++ support (#12344) 2024-03-12 12:42:08 -07:00
jni_multiget_helpers.h JNI get_helper code sharing / multiGet() use efficient batch C++ support (#12344) 2024-03-12 12:42:08 -07:00
jni_perf_context.cc Add missing copyright headers to files added in PR 11805 (#11942) 2023-10-11 12:56:39 -07:00
jnicallback.cc Run format check for *.h and *.cc files under java/ (#10851) 2022-10-25 09:26:51 -07:00
jnicallback.h Run format check for *.h and *.cc files under java/ (#10851) 2022-10-25 09:26:51 -07:00
kv_helper.h JNI get_helper code sharing / multiGet() use efficient batch C++ support (#12344) 2024-03-12 12:42:08 -07:00
loggerjnicallback.cc Add native logger support to RocksJava (#12213) 2024-01-17 17:51:36 -08:00
loggerjnicallback.h Run format check for *.h and *.cc files under java/ (#10851) 2022-10-25 09:26:51 -07:00
lru_cache.cc Change Java native methods to static (#11882) 2024-01-25 12:36:30 -08:00
memory_util.cc Run format check for *.h and *.cc files under java/ (#10851) 2022-10-25 09:26:51 -07:00
memtablejni.cc Change Java native methods to static (#11882) 2024-01-25 12:36:30 -08:00
merge_operator.cc Change Java native methods to static (#11882) 2024-01-25 12:36:30 -08:00
native_comparator_wrapper_test.cc Fix pointer to jlong conversion in 32 bit OS (#9396) 2022-03-01 09:02:15 -08:00
optimistic_transaction_db.cc Change Java native methods to static (#11882) 2024-01-25 12:36:30 -08:00
optimistic_transaction_options.cc Change Java native methods to static (#11882) 2024-01-25 12:36:30 -08:00
options.cc Remove deprecated Options::access_hint_on_compaction_start (#11654) 2024-02-05 13:35:19 -08:00
options_util.cc java API - load block based table config (#10826) 2023-10-12 09:39:01 -07:00
persistent_cache.cc Change Java native methods to static (#11882) 2024-01-25 12:36:30 -08:00
portal.h JNI get_helper code sharing / multiGet() use efficient batch C++ support (#12344) 2024-03-12 12:42:08 -07:00
ratelimiterjni.cc Change Java native methods to static (#11882) 2024-01-25 12:36:30 -08:00
remove_emptyvalue_compactionfilterjni.cc Fix pointer to jlong conversion in 32 bit OS (#9396) 2022-03-01 09:02:15 -08:00
restorejni.cc Change Java native methods to static (#11882) 2024-01-25 12:36:30 -08:00
rocks_callback_object.cc Change Java native methods to static (#11882) 2024-01-25 12:36:30 -08:00
rocksdb_exception_test.cc Run format check for *.h and *.cc files under java/ (#10851) 2022-10-25 09:26:51 -07:00
rocksjni.cc JNI get_helper code sharing / multiGet() use efficient batch C++ support (#12344) 2024-03-12 12:42:08 -07:00
slice.cc Change Java native methods to static (#11882) 2024-01-25 12:36:30 -08:00
snapshot.cc Change Java native methods to static (#11882) 2024-01-25 12:36:30 -08:00
sst_file_manager.cc Change Java native methods to static (#11882) 2024-01-25 12:36:30 -08:00
sst_file_reader_iterator.cc Change Java native methods to static (#11882) 2024-01-25 12:36:30 -08:00
sst_file_readerjni.cc Change Java native methods to static (#11882) 2024-01-25 12:36:30 -08:00
sst_file_writerjni.cc Change Java native methods to static (#11882) 2024-01-25 12:36:30 -08:00
sst_partitioner.cc Change Java native methods to static (#11882) 2024-01-25 12:36:30 -08:00
statistics.cc Change Java native methods to static (#11882) 2024-01-25 12:36:30 -08:00
statisticsjni.cc Fix tabs and lint-ignores (#6734) 2020-04-20 11:39:31 -07:00
statisticsjni.h Remove 'virtual' when implied by 'override' (#12319) 2024-01-31 13:14:42 -08:00
stderr_logger.cc Add native logger support to RocksJava (#12213) 2024-01-17 17:51:36 -08:00
table.cc Change Java native methods to static (#11882) 2024-01-25 12:36:30 -08:00
table_filter.cc Fix pointer to jlong conversion in 32 bit OS (#9396) 2022-03-01 09:02:15 -08:00
table_filter_jnicallback.cc Run format check for *.h and *.cc files under java/ (#10851) 2022-10-25 09:26:51 -07:00
table_filter_jnicallback.h Run format check for *.h and *.cc files under java/ (#10851) 2022-10-25 09:26:51 -07:00
table_properties_collector_factory.cc Fix header files to meet Open source requirements (#12164) 2023-12-19 13:43:17 -08:00
table_properties_collector_factory.h Fix header files to meet Open source requirements (#12164) 2023-12-19 13:43:17 -08:00
testable_event_listener.cc Fix build on OpenBSD i386 (#12142) 2024-01-29 16:19:59 -08:00
thread_status.cc Run format check for *.h and *.cc files under java/ (#10851) 2022-10-25 09:26:51 -07:00
trace_writer.cc Run format check for *.h and *.cc files under java/ (#10851) 2022-10-25 09:26:51 -07:00
trace_writer_jnicallback.cc Run format check for *.h and *.cc files under java/ (#10851) 2022-10-25 09:26:51 -07:00
trace_writer_jnicallback.h Run format check for *.h and *.cc files under java/ (#10851) 2022-10-25 09:26:51 -07:00
transaction.cc JNI get_helper code sharing / multiGet() use efficient batch C++ support (#12344) 2024-03-12 12:42:08 -07:00
transaction_db.cc Change Java native methods to static (#11882) 2024-01-25 12:36:30 -08:00
transaction_db_options.cc Change Java native methods to static (#11882) 2024-01-25 12:36:30 -08:00
transaction_log.cc Change Java native methods to static (#11882) 2024-01-25 12:36:30 -08:00
transaction_notifier.cc Change Java native methods to static (#11882) 2024-01-25 12:36:30 -08:00
transaction_notifier_jnicallback.cc Run format check for *.h and *.cc files under java/ (#10851) 2022-10-25 09:26:51 -07:00
transaction_notifier_jnicallback.h Run format check for *.h and *.cc files under java/ (#10851) 2022-10-25 09:26:51 -07:00
transaction_options.cc Change Java native methods to static (#11882) 2024-01-25 12:36:30 -08:00
ttl.cc Change Java native methods to static (#11882) 2024-01-25 12:36:30 -08:00
wal_filter.cc Run format check for *.h and *.cc files under java/ (#10851) 2022-10-25 09:26:51 -07:00
wal_filter_jnicallback.cc Run format check for *.h and *.cc files under java/ (#10851) 2022-10-25 09:26:51 -07:00
wal_filter_jnicallback.h Run format check for *.h and *.cc files under java/ (#10851) 2022-10-25 09:26:51 -07:00
write_batch.cc Change Java native methods to static (#11882) 2024-01-25 12:36:30 -08:00
write_batch_test.cc Support returning write unix time in iterator property (#12428) 2024-03-15 15:37:37 -07:00
write_batch_with_index.cc Change Java native methods to static (#11882) 2024-01-25 12:36:30 -08:00
write_buffer_manager.cc Change Java native methods to static (#11882) 2024-01-25 12:36:30 -08:00
writebatchhandlerjnicallback.cc Run format check for *.h and *.cc files under java/ (#10851) 2022-10-25 09:26:51 -07:00
writebatchhandlerjnicallback.h Run format check for *.h and *.cc files under java/ (#10851) 2022-10-25 09:26:51 -07:00