dependabot[bot] opened a new pull request, #9200: URL: https://github.com/apache/storm/pull/9200
Bumps [org.rocksdb:rocksdbjni](https://github.com/facebook/rocksdb) from 10.10.1.1 to 11.8.1. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/facebook/rocksdb/releases">org.rocksdb:rocksdbjni's releases</a>.</em></p> <blockquote> <h2>RocksDB 11.8.1</h2> <h2>11.8.1 (2026-07-28)</h2> <h3>Public API Changes</h3> <ul> <li>Add <code>DBOptions::read_io_executor_threads</code> to increase the maximum thread count of the shared filesystem read I/O executor used for asynchronous reads when opening a DB. Opening a DB never reduces the shared executor thread count. Change the experimental <code>FSRandomAccessFile::SubmitReadAsync()</code> API to return whether the asynchronous path was used, and add the <code>FILE_SUBMIT_ASYNC_READ_FALLBACK</code> ticker to count calls that fall back to synchronous reads.</li> </ul> <h3>Performance Improvements</h3> <ul> <li>When <code>DBOptions::avoid_unnecessary_blocking_io</code> is true, obsolete <code>OPTIONS-*</code> files found during DB open are deleted by background purge instead of synchronously on the opening thread.</li> </ul> <h2>11.8.0 (2026-07-28)</h2> <h3>Public API Changes</h3> <ul> <li>Add callback-based asynchronous read APIs, <code>DB::GetAsync()</code> and <code>DB::MultiGetAsync()</code>. The idea is that when IO is required, RocksDB can suspend its internal coroutine read path, allowing the read executor thread to do other work. When the IO is complete, RocksDB invokes the user callback. This requires filesystem support for full performance benefits. A new filesystem API <code>FSRandomAccessFile::SubmitReadAsync()</code> is introduced for this. Unlike <code>ReadAsync</code>, the filesystem is responsible for eventually calling the callback. <code>FileSystem::GetReadExecutor()</code> returns the IO executor whose EventBases run coroutine read processing. In the Posix filesystem, an IO-uring based event loop is used to complete the IO.</li> <li>Added <code>FlushOptions::listener_wait</code> (default <code>false</code>). When set together with <code>FlushOptions::wait == true</code>, <code>DB::Flush()</code> will not return until the registered <code>EventListener::OnFlushCompleted</code> callbacks for the flushed memtables have finished running. By default (<code>false</code>), <code>Flush(wait=true)</code> may return as soon as the flush result is committed, which can be before (or while) the <code>OnFlushCompleted</code> callbacks execute on the background flush thread. Also added the corresponding C API <code>rocksdb_flushoptions_set_listener_wait()</code> / <code>rocksdb_flushoptions_get_listener_wait()</code>.</li> <li>Deprecated <code>PinnableWideColumns::serialized_size()</code> in favor of the new <code>PinnableWideColumns::payload_size()</code>, which returns the total size of the columns' names and values (for a plain value this equals the value size). Relatedly, wide-column read accounting changed subtly: read statistics for entities (<code>BYTES_READ</code>, <code>BYTES_PER_READ</code>, and the per-key byte counts for <code>GetEntity</code>/<code>MultiGetEntity</code>) and the <code>ReadOptions::value_size_soft_limit</code> threshold now measure entities by this payload size instead of the serialized entity size. This drops serialization framing bytes from those measurements (so reported/limited sizes for entity reads are slightly smaller than before) and makes plain-value and wide-column accounting consistent.</li> </ul> <h3>Behavior Changes</h3> <ul> <li><code>ReadOptions::value_size_soft_limit</code> now also bounds the blob values resolved from pre-flush blob direct write references during <code>MultiGet</code>/<code>MultiGetEntity</code> (previously these were resolved after the limit check and read without bound). Enforcement is "always make progress": at least one key is read even if its value alone exceeds the limit, and only once the returned size exceeds the limit do subsequent keys get <code>Status::Aborted</code> -- so a caller retrying the aborted keys cannot loop forever on a single value that by itself exceeds the limit.</li> </ul> <h3>Performance Improvements</h3> <ul> <li>Reduced copying when reading wide-column entities that have blob-referenced columns, whether stored in separate blob files or embedded (same-file) as blob records in the same SST. On the point-lookup (<code>GetEntity</code>/<code>MultiGetEntity</code>) and blob-backed memtable/direct-write read paths, resolving these columns no longer re-serializes the whole entity into a fresh buffer: inline columns are referenced in place in the pinned entity and each resolved blob value is referenced in place from its fetched buffer. This is enabled by an internal change to <code>PinnableWideColumns</code> that lets its columns reference multiple backing buffers.</li> </ul> <h2>11.7.0 (2026-07-16)</h2> <h3>Public API Changes</h3> <ul> <li>Added <code>RangeLockManagerHandle::SetIsKilledCallback()</code>, a <code>std::function<bool()></code> predicate polled during range-lock waits. When it returns true, a blocked <code>GetRangeLock()</code> wait returns promptly with <code>Status::Aborted()</code> instead of waiting for the lock timeout. Range-lock users that install no callback keep the original wait-until-grant-or-timeout behavior.</li> <li>Added <code>MultiScanArgs::reverse</code> to support reverse MultiScan reads over bounded scan ranges.</li> </ul> <h3>Behavior Changes</h3> <ul> <li>When using <code>LockWAL()</code>, live-file capture APIs such as checkpoint and backup now flush WAL-disabled unpersisted data; they can block until <code>UnlockWAL()</code> or return <code>Aborted</code> when called from the same thread that holds <code>LockWAL()</code> to avoid deadlock. <code>UnlockWAL()</code> must now also be called from the same thread that called <code>LockWAL()</code>.</li> </ul> <h3>Performance Improvements</h3> <ul> <li>Fixed slow DB open with <code>best_efforts_recovery</code>, and slow catch-up of secondary and follower (read-only) instances, in which time and memory grew quadratically with the number of files in the DB (so the slowdown was worst for large DBs with long history).</li> </ul> <h2>11.6.0 (2026-07-02)</h2> <h3>New Features</h3> <ul> <li>Added EXPERIMENTAL embedded blob SST support through <code>SstFileWriter::OpenWithEmbeddedBlobs()</code>, storing eligible large values as same-file blob records in block-based SST files and resolving them transparently for reads. This niche feature currently supports uncompressed embedded blobs only; compression options are placeholders and compression support is deferred to follow-up work.</li> </ul> <h3>Public API Changes</h3> <ul> <li>Expanded the C API (<code>include/rocksdb/c.h</code>) with a large set of new <code>rocksdb_*</code> functions, mostly option getters/setters plus table-properties, job/event-listener, and metadata accessors, a WAL filter, a ReadOptions table filter, and a backup exclude-files callback. Many are now produced by a new semi-automated generator (<code>tools/c_api_gen/</code>) from the C++ headers; <code>include/rocksdb/c.h</code> remains a single self-contained header and the signatures of pre-existing functions are unchanged.</li> </ul> <h3>Bug Fixes</h3> <ul> <li>Reverted PR14831 that made range_lock_manager aware of reverse-order CF</li> <li>Fixed a bug in <code>RandomAccessFileReader::ReadAsync</code> where an already-aligned direct-IO read request with a null <code>scratch</code> and a caller-provided <code>aligned_buf</code> would take the "already aligned" fast path and submit the null buffer to the underlying async read (e.g. a null iovec base to io_uring, failing with EFAULT). This could surface as spurious iterator failures during async prefetch (MultiScan with async IO) on direct-IO databases. The async path now allocates a backing buffer in this case, matching the synchronous <code>Read</code> path.</li> <li>Fixed a bug where closing a read-only DB instance could delete live SST files created by a concurrent read-write DB sharing the same directory.</li> </ul> <h2>11.5.0 (2026-06-16)</h2> <h3>New Features</h3> <ul> <li>External table readers that open files through <code>ExternalTableOptions::fs</code> now update RocksDB SST/file-read statistics and file IO listener callbacks, making external file IO activity visible in existing read metrics.</li> <li>Added <code>DB::PrepareFileIngestion()</code>, a two-phase form of <code>IngestExternalFile</code>/<code>IngestExternalFiles</code>. <code>PrepareFileIngestion()</code> performs all of the work that does not require the DB mutex (validating the arguments, reading each external file's metadata, and linking/copying the files into the DB) and returns an opaque <code>FileIngestionHandle</code>. <code>DB::CommitFileIngestionHandle()</code> (or <code>DB::CommitFileIngestionHandles()</code> for several handles at once) then makes the prepared files visible; multiple handles are committed atomically in a single MANIFEST write, or none are. <code>FileIngestionHandle::Abort()</code> (or simply destroying the handle) cancels a prepared ingestion and rolls it back. This gives flexibility to the application to Prepare a file separately from when its committed, and may shorten an applications critical path on <code>IngestExternalFile</code>.</li> <li>Added two stats histograms reporting the per-call latency (in microseconds) of each successful <code>IngestExternalFile</code>/<code>IngestExternalFiles</code> call, split by phase: <code>rocksdb.ingest.external.file.prepare.micros</code> (argument validation and reading/validating/linking the external files, which does not block live writes) and <code>rocksdb.ingest.external.file.run.micros</code> (the ingestion performed under the DB mutex while live writes are blocked). Failed ingestions are not recorded.</li> <li>Added <code>DBOptions::use_direct_io_for_compaction_reads</code> (default false). When enabled, compaction-input SST reads use <code>O_DIRECT</code> while user reads remain buffered, avoiding page-cache eviction of hot user-read data by sequential compaction scans. Pair with <code>use_direct_io_for_flush_and_compaction = true</code> on write-heavy workloads for direct I/O on both compaction inputs and outputs. Rejected at Open when combined with <code>allow_mmap_reads = true</code>. No-op when <code>use_direct_reads = true</code> is already set (since all reads are already direct).</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/meta/rocksdb/blob/v11.8.1/HISTORY.md">org.rocksdb:rocksdbjni's changelog</a>.</em></p> <blockquote> <h2>11.8.1 (07/28/2026)</h2> <h3>Public API Changes</h3> <ul> <li>Add <code>DBOptions::read_io_executor_threads</code> to increase the maximum thread count of the shared filesystem read I/O executor used for asynchronous reads when opening a DB. Opening a DB never reduces the shared executor thread count. Change the experimental <code>FSRandomAccessFile::SubmitReadAsync()</code> API to return whether the asynchronous path was used, and add the <code>FILE_SUBMIT_ASYNC_READ_FALLBACK</code> ticker to count calls that fall back to synchronous reads.</li> </ul> <h3>Performance Improvements</h3> <ul> <li>When <code>DBOptions::avoid_unnecessary_blocking_io</code> is true, obsolete <code>OPTIONS-*</code> files found during DB open are deleted by background purge instead of synchronously on the opening thread.</li> </ul> <h2>11.8.0 (07/28/2026)</h2> <h3>Public API Changes</h3> <ul> <li>Add callback-based asynchronous read APIs, <code>DB::GetAsync()</code> and <code>DB::MultiGetAsync()</code>. The idea is that when IO is required, RocksDB can suspend its internal coroutine read path, allowing the read executor thread to do other work. When the IO is complete, RocksDB invokes the user callback. This requires filesystem support for full performance benefits. A new filesystem API <code>FSRandomAccessFile::SubmitReadAsync()</code> is introduced for this. Unlike <code>ReadAsync</code>, the filesystem is responsible for eventually calling the callback. <code>FileSystem::GetReadExecutor()</code> returns the IO executor whose EventBases run coroutine read processing. In the Posix filesystem, an IO-uring based event loop is used to complete the IO.</li> <li>Added <code>FlushOptions::listener_wait</code> (default <code>false</code>). When set together with <code>FlushOptions::wait == true</code>, <code>DB::Flush()</code> will not return until the registered <code>EventListener::OnFlushCompleted</code> callbacks for the flushed memtables have finished running. By default (<code>false</code>), <code>Flush(wait=true)</code> may return as soon as the flush result is committed, which can be before (or while) the <code>OnFlushCompleted</code> callbacks execute on the background flush thread. Also added the corresponding C API <code>rocksdb_flushoptions_set_listener_wait()</code> / <code>rocksdb_flushoptions_get_listener_wait()</code>.</li> <li>Deprecated <code>PinnableWideColumns::serialized_size()</code> in favor of the new <code>PinnableWideColumns::payload_size()</code>, which returns the total size of the columns' names and values (for a plain value this equals the value size). Relatedly, wide-column read accounting changed subtly: read statistics for entities (<code>BYTES_READ</code>, <code>BYTES_PER_READ</code>, and the per-key byte counts for <code>GetEntity</code>/<code>MultiGetEntity</code>) and the <code>ReadOptions::value_size_soft_limit</code> threshold now measure entities by this payload size instead of the serialized entity size. This drops serialization framing bytes from those measurements (so reported/limited sizes for entity reads are slightly smaller than before) and makes plain-value and wide-column accounting consistent.</li> </ul> <h3>Behavior Changes</h3> <ul> <li><code>ReadOptions::value_size_soft_limit</code> now also bounds the blob values resolved from pre-flush blob direct write references during <code>MultiGet</code>/<code>MultiGetEntity</code> (previously these were resolved after the limit check and read without bound). Enforcement is "always make progress": at least one key is read even if its value alone exceeds the limit, and only once the returned size exceeds the limit do subsequent keys get <code>Status::Aborted</code> -- so a caller retrying the aborted keys cannot loop forever on a single value that by itself exceeds the limit.</li> </ul> <h3>Performance Improvements</h3> <ul> <li>Reduced copying when reading wide-column entities that have blob-referenced columns, whether stored in separate blob files or embedded (same-file) as blob records in the same SST. On the point-lookup (<code>GetEntity</code>/<code>MultiGetEntity</code>) and blob-backed memtable/direct-write read paths, resolving these columns no longer re-serializes the whole entity into a fresh buffer: inline columns are referenced in place in the pinned entity and each resolved blob value is referenced in place from its fetched buffer. This is enabled by an internal change to <code>PinnableWideColumns</code> that lets its columns reference multiple backing buffers.</li> </ul> <h2>11.7.0 (07/16/2026)</h2> <h3>Public API Changes</h3> <ul> <li>Added <code>RangeLockManagerHandle::SetIsKilledCallback()</code>, a <code>std::function<bool()></code> predicate polled during range-lock waits. When it returns true, a blocked <code>GetRangeLock()</code> wait returns promptly with <code>Status::Aborted()</code> instead of waiting for the lock timeout. Range-lock users that install no callback keep the original wait-until-grant-or-timeout behavior.</li> <li>Added <code>MultiScanArgs::reverse</code> to support reverse MultiScan reads over bounded scan ranges.</li> </ul> <h3>Behavior Changes</h3> <ul> <li>When using <code>LockWAL()</code>, live-file capture APIs such as checkpoint and backup now flush WAL-disabled unpersisted data; they can block until <code>UnlockWAL()</code> or return <code>Aborted</code> when called from the same thread that holds <code>LockWAL()</code> to avoid deadlock. <code>UnlockWAL()</code> must now also be called from the same thread that called <code>LockWAL()</code>.</li> </ul> <h3>Performance Improvements</h3> <ul> <li>Fixed slow DB open with <code>best_efforts_recovery</code>, and slow catch-up of secondary and follower (read-only) instances, in which time and memory grew quadratically with the number of files in the DB (so the slowdown was worst for large DBs with long history).</li> </ul> <h2>11.6.0 (07/02/2026)</h2> <h3>New Features</h3> <ul> <li>Added EXPERIMENTAL embedded blob SST support through <code>SstFileWriter::OpenWithEmbeddedBlobs()</code>, storing eligible large values as same-file blob records in block-based SST files and resolving them transparently for reads. This niche feature currently supports uncompressed embedded blobs only; compression options are placeholders and compression support is deferred to follow-up work.</li> </ul> <h3>Public API Changes</h3> <ul> <li>Expanded the C API (<code>include/rocksdb/c.h</code>) with a large set of new <code>rocksdb_*</code> functions, mostly option getters/setters plus table-properties, job/event-listener, and metadata accessors, a WAL filter, a ReadOptions table filter, and a backup exclude-files callback. Many are now produced by a new semi-automated generator (<code>tools/c_api_gen/</code>) from the C++ headers; <code>include/rocksdb/c.h</code> remains a single self-contained header and the signatures of pre-existing functions are unchanged.</li> </ul> <h3>Bug Fixes</h3> <ul> <li>Reverted PR14831 that made range_lock_manager aware of reverse-order CF</li> <li>Fixed a bug in <code>RandomAccessFileReader::ReadAsync</code> where an already-aligned direct-IO read request with a null <code>scratch</code> and a caller-provided <code>aligned_buf</code> would take the "already aligned" fast path and submit the null buffer to the underlying async read (e.g. a null iovec base to io_uring, failing with EFAULT). This could surface as spurious iterator failures during async prefetch (MultiScan with async IO) on direct-IO databases. The async path now allocates a backing buffer in this case, matching the synchronous <code>Read</code> path.</li> <li>Fixed a bug where closing a read-only DB instance could delete live SST files created by a concurrent read-write DB sharing the same directory.</li> </ul> <h2>11.5.0 (06/16/2026)</h2> <h3>New Features</h3> <ul> <li>External table readers that open files through <code>ExternalTableOptions::fs</code> now update RocksDB SST/file-read statistics and file IO listener callbacks, making external file IO activity visible in existing read metrics.</li> <li>Added <code>DB::PrepareFileIngestion()</code>, a two-phase form of <code>IngestExternalFile</code>/<code>IngestExternalFiles</code>. <code>PrepareFileIngestion()</code> performs all of the work that does not require the DB mutex (validating the arguments, reading each external file's metadata, and linking/copying the files into the DB) and returns an opaque <code>FileIngestionHandle</code>. <code>DB::CommitFileIngestionHandle()</code> (or <code>DB::CommitFileIngestionHandles()</code> for several handles at once) then makes the prepared files visible; multiple handles are committed atomically in a single MANIFEST write, or none are. <code>FileIngestionHandle::Abort()</code> (or simply destroying the handle) cancels a prepared ingestion and rolls it back. This gives flexibility to the application to Prepare a file separately from when its committed, and may shorten an applications critical path on <code>IngestExternalFile</code>.</li> <li>Added two stats histograms reporting the per-call latency (in microseconds) of each successful <code>IngestExternalFile</code>/<code>IngestExternalFiles</code> call, split by phase: <code>rocksdb.ingest.external.file.prepare.micros</code> (argument validation and reading/validating/linking the external files, which does not block live writes) and <code>rocksdb.ingest.external.file.run.micros</code> (the ingestion performed under the DB mutex while live writes are blocked). Failed ingestions are not recorded.</li> <li>Added <code>DBOptions::use_direct_io_for_compaction_reads</code> (default false). When enabled, compaction-input SST reads use <code>O_DIRECT</code> while user reads remain buffered, avoiding page-cache eviction of hot user-read data by sequential compaction scans. Pair with <code>use_direct_io_for_flush_and_compaction = true</code> on write-heavy workloads for direct I/O on both compaction inputs and outputs. Rejected at Open when combined with <code>allow_mmap_reads = true</code>. No-op when <code>use_direct_reads = true</code> is already set (since all reads are already direct).</li> </ul> <h3>Public API Changes</h3> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li>See full diff in <a href="https://github.com/facebook/rocksdb/commits/v11.8.1">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
