Skip to content

blockstore: replace single held-open reader with parallel span reads for content retrieval#683

Open
parkan wants to merge 1 commit into
mainfrom
feat/gateway-span-reads
Open

blockstore: replace single held-open reader with parallel span reads for content retrieval#683
parkan wants to merge 1 commit into
mainfrom
feat/gateway-span-reads

Conversation

@parkan

@parkan parkan commented Jul 16, 2026

Copy link
Copy Markdown
Collaborator

this does real span-based reads with approximately 14x throughput improvement (median case) over the naive mutex implementation and solves the memory amplification on random small reads into large spans by reading the relevant data directly into a buffer; in theory this should make an arbitrary rclone-compatible backend into a proper trustless gateway to the data while maintaining full compatibility with normal filecoin onboarding

file-backed blocks are now fetched as spans of consecutive blocks via
ranged reads into a bounded LRU cache, with sequential access detection
prefetching the next spans in parallel. removes the global mutex and the
single active stream that serialized all /ipfs traffic. concurrent
backend reads are capped by a semaphore (connection budget), duplicate
span fetches collapse via singleflight, and the handler map gets a
proper RWMutex. callers detach from in-flight fetches on cancellation
(the fetch completes into the cache), and each backend read is bounded
by a timeout so a hung backend cannot pin connection slots. adds
(file_id, file_offset) composite index for the span query.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant