)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"22b980dcdf1087ec4eee9727354fceb4dd44cb60","unresolved":true,"context_lines":[{"line_number":7,"context_line":"Offload reads in the object server"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"An object-server worker serves all its concurrent requests on one"},{"line_number":10,"context_line":"eventlet hub. A GET read() that misses the page cache blocks the hub,"},{"line_number":11,"context_line":"stalling every other request on the worker - even cache hits. Using"},{"line_number":12,"context_line":"cooperative_period does not help: a yield cannot wake a thread stuck in"},{"line_number":13,"context_line":"read()."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"4c953ab4_2e55ccc0","line":11,"range":{"start_line":10,"start_character":14,"end_line":11,"end_character":61},"updated":"2026-06-18 00:05:03.000000000","message":"OK, this is the key insight (for me, at least). This is also why we don\u0027t need to look at doing any comparable thing for the write path (y\u0027know, apart from the existing tpooling around fsync).\n\nBut *maybe* there\u0027s an argument that at least the `os.listdir` of the hashdir should go in the same thread pool?","commit_id":"8096eb6994f1a2c467ed11c944b84b182595c06a"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"f0f35b6437b03224f68d87d8e325ab11c660810b","unresolved":true,"context_lines":[{"line_number":7,"context_line":"Offload reads in the object server"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"An object-server worker serves all its concurrent requests on one"},{"line_number":10,"context_line":"eventlet hub. A GET read() that misses the page cache blocks the hub,"},{"line_number":11,"context_line":"stalling every other request on the worker - even cache hits. Using"},{"line_number":12,"context_line":"cooperative_period does not help: a yield cannot wake a thread stuck in"},{"line_number":13,"context_line":"read()."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"d4e70fdb_4cbd232c","line":11,"range":{"start_line":10,"start_character":14,"end_line":11,"end_character":61},"in_reply_to":"4c953ab4_2e55ccc0","updated":"2026-08-04 10:53:37.000000000","message":"I think putting the `os.listdir` is out of scope (at least for this patch?). \n\nAn object GET looks like this:\n\n1. List the hash directory to find which file to serve using `os.listdir`\n2. Open that file and read its metadata from xattrs\n3. Read the data - what this patch is about\n\nWe only know the size after reading the metadata. Thus moving `os.listdir` into the thread pool would result in a handoff for every request, not only for the large ones.","commit_id":"8096eb6994f1a2c467ed11c944b84b182595c06a"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"05e9c715f498b4bb646968370ea76c2507f79eed","unresolved":true,"context_lines":[{"line_number":19,"context_line":"(a serial hub-side md5 would otherwise become the next bottleneck under"},{"line_number":20,"context_line":"concurrency)."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Only reads of at least read_offload_min_size (default one burst) are"},{"line_number":23,"context_line":"offloaded; smaller reads, and small ranges of big objects, stay on the"},{"line_number":24,"context_line":"direct path, where a single sub-burst handoff would only add cost."},{"line_number":25,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"60461512_dc559273","line":22,"range":{"start_line":22,"start_character":23,"end_line":22,"end_character":44},"updated":"2026-06-29 14:58:59.000000000","message":"IIUC the config tuning trade-off is:\n\n* smaller ``read_offload_min_size`` -\u003e larger *average* GET time due to offloading relatively short GETs\n\n* larger ``read_offload_min_size`` -\u003e larger *peak* GET read time due to more GETs blocked behind slow ``read()``s","commit_id":"8096eb6994f1a2c467ed11c944b84b182595c06a"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"f0f35b6437b03224f68d87d8e325ab11c660810b","unresolved":true,"context_lines":[{"line_number":19,"context_line":"(a serial hub-side md5 would otherwise become the next bottleneck under"},{"line_number":20,"context_line":"concurrency)."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Only reads of at least read_offload_min_size (default one burst) are"},{"line_number":23,"context_line":"offloaded; smaller reads, and small ranges of big objects, stay on the"},{"line_number":24,"context_line":"direct path, where a single sub-burst handoff would only add cost."},{"line_number":25,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"96ce2c23_929a1d8e","line":22,"range":{"start_line":22,"start_character":23,"end_line":22,"end_character":44},"in_reply_to":"60461512_dc559273","updated":"2026-08-04 10:53:37.000000000","message":"Yes, that\u0027s the tradeoff. Will update the commit msg to be a bit more detailed about this.","commit_id":"8096eb6994f1a2c467ed11c944b84b182595c06a"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"05e9c715f498b4bb646968370ea76c2507f79eed","unresolved":true,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Only reads of at least read_offload_min_size (default one burst) are"},{"line_number":23,"context_line":"offloaded; smaller reads, and small ranges of big objects, stay on the"},{"line_number":24,"context_line":"direct path, where a single sub-burst handoff would only add cost."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Unlike the old threads_per_disk (which offloaded every 64 KiB read),"},{"line_number":27,"context_line":"each offload is a 1 MiB burst, so the handoff stays cheap even on a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"48a73dbd_2747e23f","line":24,"updated":"2026-06-29 14:58:59.000000000","message":"ok, so this reduces the probability of a slow read() blocking other GETs, but does not eliminate them because it would be expensive to do so for short GETs.\n\nCached object GETs with 1MiB \u003c size \u003c 5 MiB may be run in a tpool thread.","commit_id":"8096eb6994f1a2c467ed11c944b84b182595c06a"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"f0f35b6437b03224f68d87d8e325ab11c660810b","unresolved":true,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Only reads of at least read_offload_min_size (default one burst) are"},{"line_number":23,"context_line":"offloaded; smaller reads, and small ranges of big objects, stay on the"},{"line_number":24,"context_line":"direct path, where a single sub-burst handoff would only add cost."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Unlike the old threads_per_disk (which offloaded every 64 KiB read),"},{"line_number":27,"context_line":"each offload is a 1 MiB burst, so the handoff stays cheap even on a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"4d4e381d_b48ee58a","line":24,"in_reply_to":"48a73dbd_2747e23f","updated":"2026-08-04 10:53:37.000000000","message":"Yes - though the 1MiB/5MiB size is tunable; the \"best\" option depends on how likely a cache hit is. More likely -\u003e probably better to use 5MiB `read_offload_min_size`; more unlikely cache hit -\u003e likely better to stay at 1MiB (which was the case in my tests).","commit_id":"8096eb6994f1a2c467ed11c944b84b182595c06a"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"05e9c715f498b4bb646968370ea76c2507f79eed","unresolved":true,"context_lines":[{"line_number":26,"context_line":"Unlike the old threads_per_disk (which offloaded every 64 KiB read),"},{"line_number":27,"context_line":"each offload is a 1 MiB burst, so the handoff stays cheap even on a"},{"line_number":28,"context_line":"cache hit. A per-device cap limits how many pool threads one slow disk"},{"line_number":29,"context_line":"can take from the process-global pool."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"Defaults to off (behaviour unchanged)."},{"line_number":32,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"76c70424_c810e230","line":29,"updated":"2026-06-29 14:58:59.000000000","message":"with ``servers_per_port`` do we not end up with one disk per process-global pool?","commit_id":"8096eb6994f1a2c467ed11c944b84b182595c06a"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"f0f35b6437b03224f68d87d8e325ab11c660810b","unresolved":true,"context_lines":[{"line_number":26,"context_line":"Unlike the old threads_per_disk (which offloaded every 64 KiB read),"},{"line_number":27,"context_line":"each offload is a 1 MiB burst, so the handoff stays cheap even on a"},{"line_number":28,"context_line":"cache hit. A per-device cap limits how many pool threads one slow disk"},{"line_number":29,"context_line":"can take from the process-global pool."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"Defaults to off (behaviour unchanged)."},{"line_number":32,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"4cbcc330_e66d3ab6","line":29,"in_reply_to":"76c70424_c810e230","updated":"2026-08-04 10:53:37.000000000","message":"Yes, that\u0027s right. Will clarify.","commit_id":"8096eb6994f1a2c467ed11c944b84b182595c06a"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"fc4ffdc7e5084ec075ef4cc6391ca6cdad7590ee","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"cc36e30c_c2801d4b","updated":"2026-06-16 16:04:54.000000000","message":"recheck\n\ndevstack deployment error:  Downloading jmespath-1.1.0-py3-none-any.whl.metadata (7.6 kB)\nERROR: Could not install packages due to an OSError: (\u0027Connection broken: IncompleteRead(6389 bytes read, 1707 more expected)\u0027, IncompleteRead(6389 bytes read, 1707 more expected))","commit_id":"8096eb6994f1a2c467ed11c944b84b182595c06a"}],"etc/object-server.conf-sample":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"22b980dcdf1087ec4eee9727354fceb4dd44cb60","unresolved":true,"context_lines":[{"line_number":169,"context_line":"# read_offload_min_size \u003d 1048576"},{"line_number":170,"context_line":"#"},{"line_number":171,"context_line":"# Cap on concurrent offloaded reads per device: enough to keep the device busy,"},{"line_number":172,"context_line":"# low enough that one slow disk can\u0027t exhaust the thread pool and starve fsync"},{"line_number":173,"context_line":"# or other devices. Note this bound is per-device, not node-wide: the pool is"},{"line_number":174,"context_line":"# process-global and shared with the fsync offload, so up to (cap x number of"},{"line_number":175,"context_line":"# devices) reads can contend for it at once. Size eventlet_tpool_num_threads"},{"line_number":176,"context_line":"# below (or EVENTLET_THREADPOOL_SIZE when Swift leaves eventlet\u0027s default in"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"8f0208cd_258d4798","line":173,"range":{"start_line":172,"start_character":18,"end_line":173,"end_character":18},"updated":"2026-06-18 00:05:03.000000000","message":"But it\u0027s per-device, right? One slow disk affects everything *in the affected device\u0027s pool* regardless.\n\nI don\u0027t doubt that there should be *some* limit (and likely a fairly low one, looking at how we\u0027ve tuned `max_clients` for our own clusters), but I\u0027m not sold on the reasoning here yet.","commit_id":"8096eb6994f1a2c467ed11c944b84b182595c06a"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"f0f35b6437b03224f68d87d8e325ab11c660810b","unresolved":true,"context_lines":[{"line_number":169,"context_line":"# read_offload_min_size \u003d 1048576"},{"line_number":170,"context_line":"#"},{"line_number":171,"context_line":"# Cap on concurrent offloaded reads per device: enough to keep the device busy,"},{"line_number":172,"context_line":"# low enough that one slow disk can\u0027t exhaust the thread pool and starve fsync"},{"line_number":173,"context_line":"# or other devices. Note this bound is per-device, not node-wide: the pool is"},{"line_number":174,"context_line":"# process-global and shared with the fsync offload, so up to (cap x number of"},{"line_number":175,"context_line":"# devices) reads can contend for it at once. Size eventlet_tpool_num_threads"},{"line_number":176,"context_line":"# below (or EVENTLET_THREADPOOL_SIZE when Swift leaves eventlet\u0027s default in"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"b36055c9_8a8850fa","line":173,"range":{"start_line":172,"start_character":18,"end_line":173,"end_character":18},"in_reply_to":"8f0208cd_258d4798","updated":"2026-08-04 10:53:37.000000000","message":"There is no per-device pool; one process-global tpool shared with fsync. The cap stops a bad disk taking all 20 threads from healthy disks. Will reword.","commit_id":"8096eb6994f1a2c467ed11c944b84b182595c06a"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"22b980dcdf1087ec4eee9727354fceb4dd44cb60","unresolved":true,"context_lines":[{"line_number":171,"context_line":"# Cap on concurrent offloaded reads per device: enough to keep the device busy,"},{"line_number":172,"context_line":"# low enough that one slow disk can\u0027t exhaust the thread pool and starve fsync"},{"line_number":173,"context_line":"# or other devices. Note this bound is per-device, not node-wide: the pool is"},{"line_number":174,"context_line":"# process-global and shared with the fsync offload, so up to (cap x number of"},{"line_number":175,"context_line":"# devices) reads can contend for it at once. Size eventlet_tpool_num_threads"},{"line_number":176,"context_line":"# below (or EVENTLET_THREADPOOL_SIZE when Swift leaves eventlet\u0027s default in"},{"line_number":177,"context_line":"# effect) for that total plus headroom for fsync, otherwise many busy disks can"},{"line_number":178,"context_line":"# collectively saturate the pool even when no single disk exceeds its cap. When"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"d30447a4_a1c09956","line":175,"range":{"start_line":174,"start_character":62,"end_line":175,"end_character":9},"updated":"2026-06-18 00:05:03.000000000","message":"... x servers_per_port, right?","commit_id":"8096eb6994f1a2c467ed11c944b84b182595c06a"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"f0f35b6437b03224f68d87d8e325ab11c660810b","unresolved":true,"context_lines":[{"line_number":171,"context_line":"# Cap on concurrent offloaded reads per device: enough to keep the device busy,"},{"line_number":172,"context_line":"# low enough that one slow disk can\u0027t exhaust the thread pool and starve fsync"},{"line_number":173,"context_line":"# or other devices. Note this bound is per-device, not node-wide: the pool is"},{"line_number":174,"context_line":"# process-global and shared with the fsync offload, so up to (cap x number of"},{"line_number":175,"context_line":"# devices) reads can contend for it at once. Size eventlet_tpool_num_threads"},{"line_number":176,"context_line":"# below (or EVENTLET_THREADPOOL_SIZE when Swift leaves eventlet\u0027s default in"},{"line_number":177,"context_line":"# effect) for that total plus headroom for fsync, otherwise many busy disks can"},{"line_number":178,"context_line":"# collectively saturate the pool even when no single disk exceeds its cap. When"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"73fe7ee8_7afcf70a","line":175,"range":{"start_line":174,"start_character":62,"end_line":175,"end_character":9},"in_reply_to":"d30447a4_a1c09956","updated":"2026-08-04 10:53:37.000000000","message":"Per pool it\u0027s cap x devices-served-by-that-process. Rewording.","commit_id":"8096eb6994f1a2c467ed11c944b84b182595c06a"}],"swift/obj/diskfile.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"05e9c715f498b4bb646968370ea76c2507f79eed","unresolved":true,"context_lines":[{"line_number":2237,"context_line":"    def _offload_chunk_checks(self, chunk):"},{"line_number":2238,"context_line":"        \"\"\""},{"line_number":2239,"context_line":"        Per-chunk validation that must run on the hub, not the offload thread"},{"line_number":2240,"context_line":"        (EC frag checks can quarantine). The etag is folded in by"},{"line_number":2241,"context_line":"        :meth:`_read_burst`; base does nothing."},{"line_number":2242,"context_line":"        \"\"\""},{"line_number":2243,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":2,"id":"2a262168_5ff32afd","line":2240,"range":{"start_line":2240,"start_character":53,"end_line":2240,"end_character":62},"updated":"2026-06-29 14:58:59.000000000","message":"\"folded in\" isn\u0027t a term I\u0027m familiar with as an alternative to \"updated\"","commit_id":"8096eb6994f1a2c467ed11c944b84b182595c06a"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"f0f35b6437b03224f68d87d8e325ab11c660810b","unresolved":true,"context_lines":[{"line_number":2237,"context_line":"    def _offload_chunk_checks(self, chunk):"},{"line_number":2238,"context_line":"        \"\"\""},{"line_number":2239,"context_line":"        Per-chunk validation that must run on the hub, not the offload thread"},{"line_number":2240,"context_line":"        (EC frag checks can quarantine). The etag is folded in by"},{"line_number":2241,"context_line":"        :meth:`_read_burst`; base does nothing."},{"line_number":2242,"context_line":"        \"\"\""},{"line_number":2243,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":2,"id":"c6c08bfd_29d3a0af","line":2240,"range":{"start_line":2240,"start_character":53,"end_line":2240,"end_character":62},"in_reply_to":"2a262168_5ff32afd","updated":"2026-08-04 10:53:37.000000000","message":"Rewording","commit_id":"8096eb6994f1a2c467ed11c944b84b182595c06a"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"05e9c715f498b4bb646968370ea76c2507f79eed","unresolved":true,"context_lines":[{"line_number":2248,"context_line":""},{"line_number":2249,"context_line":"    def _read_burst(self, fd, offset, nbytes):"},{"line_number":2250,"context_line":"        \"\"\""},{"line_number":2251,"context_line":"        Read ``nbytes`` at ``offset`` and fold them into the etag (``b\u0027\u0027`` at"},{"line_number":2252,"context_line":"        EOF). On a tpool worker: pread and md5 both release the GIL. pread (not"},{"line_number":2253,"context_line":"        read) keeps pool threads off the shared file position; bursts are"},{"line_number":2254,"context_line":"        sequential, so ``_iter_etag`` is never updated concurrently."}],"source_content_type":"text/x-python","patch_set":2,"id":"b6ddc989_1ce9d955","line":2251,"range":{"start_line":2251,"start_character":42,"end_line":2251,"end_character":56},"updated":"2026-06-29 14:58:59.000000000","message":"ditto re use of \"fold\" ?","commit_id":"8096eb6994f1a2c467ed11c944b84b182595c06a"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"f0f35b6437b03224f68d87d8e325ab11c660810b","unresolved":true,"context_lines":[{"line_number":2248,"context_line":""},{"line_number":2249,"context_line":"    def _read_burst(self, fd, offset, nbytes):"},{"line_number":2250,"context_line":"        \"\"\""},{"line_number":2251,"context_line":"        Read ``nbytes`` at ``offset`` and fold them into the etag (``b\u0027\u0027`` at"},{"line_number":2252,"context_line":"        EOF). On a tpool worker: pread and md5 both release the GIL. pread (not"},{"line_number":2253,"context_line":"        read) keeps pool threads off the shared file position; bursts are"},{"line_number":2254,"context_line":"        sequential, so ``_iter_etag`` is never updated concurrently."}],"source_content_type":"text/x-python","patch_set":2,"id":"141dd639_6069dac1","line":2251,"range":{"start_line":2251,"start_character":42,"end_line":2251,"end_character":56},"in_reply_to":"b6ddc989_1ce9d955","updated":"2026-08-04 10:53:37.000000000","message":"Ditto rewording","commit_id":"8096eb6994f1a2c467ed11c944b84b182595c06a"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"05e9c715f498b4bb646968370ea76c2507f79eed","unresolved":true,"context_lines":[{"line_number":2303,"context_line":"                    chunk \u003d buf[i:i + self._disk_chunk_size]"},{"line_number":2304,"context_line":"                    validate_chunk(chunk)"},{"line_number":2305,"context_line":"                    self._bytes_read +\u003d len(chunk)"},{"line_number":2306,"context_line":"                    if self._bytes_read - dropped_cache \u003e DROP_CACHE_WINDOW:"},{"line_number":2307,"context_line":"                        self._drop_cache("},{"line_number":2308,"context_line":"                            self._fp.fileno(), start_offset + dropped_cache,"},{"line_number":2309,"context_line":"                            self._bytes_read - dropped_cache)"}],"source_content_type":"text/x-python","patch_set":2,"id":"08677d65_5a35c073","line":2306,"updated":"2026-06-29 14:58:59.000000000","message":"note: this test is less timely than on master if ``_read_offload_burst size !\u003d DROP_CACHE_WINDOW``. \n\nIn practice, due to the batching of chunks in a burst, ``effective drop_cache_window \u003d\u003d max(DROP_CACHE_WINDOW, _read_offload_burst size)``\n\nCould we move drop_cache inside the burst iterators?","commit_id":"8096eb6994f1a2c467ed11c944b84b182595c06a"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"f0f35b6437b03224f68d87d8e325ab11c660810b","unresolved":true,"context_lines":[{"line_number":2303,"context_line":"                    chunk \u003d buf[i:i + self._disk_chunk_size]"},{"line_number":2304,"context_line":"                    validate_chunk(chunk)"},{"line_number":2305,"context_line":"                    self._bytes_read +\u003d len(chunk)"},{"line_number":2306,"context_line":"                    if self._bytes_read - dropped_cache \u003e DROP_CACHE_WINDOW:"},{"line_number":2307,"context_line":"                        self._drop_cache("},{"line_number":2308,"context_line":"                            self._fp.fileno(), start_offset + dropped_cache,"},{"line_number":2309,"context_line":"                            self._bytes_read - dropped_cache)"}],"source_content_type":"text/x-python","patch_set":2,"id":"8dd36631_5b6a27c7","line":2306,"in_reply_to":"08677d65_5a35c073","updated":"2026-08-04 10:53:37.000000000","message":"Right, will move drop_cache.","commit_id":"8096eb6994f1a2c467ed11c944b84b182595c06a"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"05e9c715f498b4bb646968370ea76c2507f79eed","unresolved":true,"context_lines":[{"line_number":2310,"context_line":"                        dropped_cache \u003d self._bytes_read"},{"line_number":2311,"context_line":"                    yield chunk"},{"line_number":2312,"context_line":"            self._drop_cache(self._fp.fileno(), start_offset + dropped_cache,"},{"line_number":2313,"context_line":"                             self._bytes_read - dropped_cache)"},{"line_number":2314,"context_line":"        finally:"},{"line_number":2315,"context_line":"            if not self._suppress_file_closing:"},{"line_number":2316,"context_line":"                self.close()"}],"source_content_type":"text/x-python","patch_set":2,"id":"575d8ef1_54e143ab","line":2313,"updated":"2026-06-29 14:58:59.000000000","message":"note to self: this extra drop_cache (here and on master) is necessary for the case when the final burst did not exceed DROP_CACHE_WINDOW","commit_id":"8096eb6994f1a2c467ed11c944b84b182595c06a"},{"author":{"_account_id":39164,"name":"Matthew Allen","display_name":"Matthew Allen","email":"maallen@nvidia.com","username":"matthewallen"},"change_message_id":"28f9fd4a3c8707c2ba7f8837951057790f93b989","unresolved":true,"context_lines":[{"line_number":3198,"context_line":"            pipe_size\u003dself._pipe_size, diskfile\u003dself, keep_cache\u003dkeep_cache,"},{"line_number":3199,"context_line":"            cooperative_period\u003dcooperative_period,"},{"line_number":3200,"context_line":"            etag_validate_frac\u003detag_validate_frac,"},{"line_number":3201,"context_line":"            read_offload\u003dself._read_offload,"},{"line_number":3202,"context_line":"            read_offload_burst_size\u003dself._read_offload_burst_size,"},{"line_number":3203,"context_line":"            read_offload_max_inflight\u003dself._read_offload_max_inflight,"},{"line_number":3204,"context_line":"            read_offload_min_size\u003dself._read_offload_min_size)"},{"line_number":3205,"context_line":"        # At this point the reader object is now responsible for closing"},{"line_number":3206,"context_line":"        # the file pointer."},{"line_number":3207,"context_line":"        self._fp \u003d None"}],"source_content_type":"text/x-python","patch_set":2,"id":"ec3c1025_4cf2baf7","line":3204,"range":{"start_line":3201,"start_character":12,"end_line":3204,"end_character":61},"updated":"2026-08-07 21:08:27.000000000","message":"Agentic review surfaced the concern that an out-of-tree reader_cls or DiskFileManager that has not updated with this patch will break due to the extra parameters passed in. Discussed with @cschwede@nvidia.com and we think it is worth documenting in the commit message.","commit_id":"8096eb6994f1a2c467ed11c944b84b182595c06a"}]}
