Thread
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
bufmgr: use I/O stats arguments in FlushUnlockedBuffer()
- 31b0544b32bc 19 (unreleased) landed
-
bufmgr: pass through I/O stats context in FlushUnlockedBuffer()
Chao Li <li.evan.chao@gmail.com> — 2026-04-01T02:15:09Z
Hi, I noticed that FlushUnlockedBuffer() accepts io_object and io_context, but then ignores them and hardcodes IOOBJECT_RELATIONand IOCONTEXT_NORMAL instead: ``` static void FlushUnlockedBuffer(BufferDesc *buf, SMgrRelation reln, IOObject io_object, IOContext io_context) { Buffer buffer = BufferDescriptorGetBuffer(buf); BufferLockAcquire(buffer, buf, BUFFER_LOCK_SHARE_EXCLUSIVE); FlushBuffer(buf, reln, IOOBJECT_RELATION, IOCONTEXT_NORMAL); // <== HERE BufferLockUnlock(buffer, buf); } ``` Unless I am missing something, if a function accepts these parameters, they should generally be used. FlushBuffer() seems to have the same issue. It takes both io_object and io_context: ``` static void FlushBuffer(BufferDesc *buf, SMgrRelation reln, IOObject io_object, IOContext io_context) ``` but while io_context is used, io_object is ignored: ``` pgstat_count_io_op_time(IOOBJECT_RELATION, io_context, IOOP_WRITE, io_start, 1, BLCKSZ); ``` For comparison, in AsyncReadBuffers(), where io_object is also available locally, it is passed through and used directly: ``` pgstat_count_io_op_time(io_object, io_context, IOOP_READ, io_start, 1, io_buffers_len * BLCKSZ); ``` I raised the same point while reviewing patch [1], but that patch has not been updated yet. This tiny patch just makes FlushUnlockedBuffer() and FlushBuffer() use the io_object and io_context values passed in by the caller. [1] Discussion: https://postgr.es/m/377BC880-1616-4DEF-B9EF-5E297C358F7D@gmail.com Best regards, -- Chao Li (Evan) HighGo Software Co., Ltd. https://www.highgo.com/ -
Re: bufmgr: pass through I/O stats context in FlushUnlockedBuffer()
Melanie Plageman <melanieplageman@gmail.com> — 2026-04-21T21:52:35Z
On Tue, Mar 31, 2026 at 10:15 PM Chao Li <li.evan.chao@gmail.com> wrote: > > I noticed that FlushUnlockedBuffer() accepts io_object and io_context, but then ignores them and hardcodes IOOBJECT_RELATIONand IOCONTEXT_NORMAL instead: > ``` > static void > FlushUnlockedBuffer(BufferDesc *buf, SMgrRelation reln, > IOObject io_object, IOContext io_context) > { > Buffer buffer = BufferDescriptorGetBuffer(buf); > > BufferLockAcquire(buffer, buf, BUFFER_LOCK_SHARE_EXCLUSIVE); > FlushBuffer(buf, reln, IOOBJECT_RELATION, IOCONTEXT_NORMAL); // <== HERE > BufferLockUnlock(buffer, buf); > } > ``` > > Unless I am missing something, if a function accepts these parameters, they should generally be used. Thanks for the patch. Committed in 31b0544b32b - Melanie -
Re: bufmgr: pass through I/O stats context in FlushUnlockedBuffer()
Chao Li <li.evan.chao@gmail.com> — 2026-04-21T22:24:04Z
> On Apr 22, 2026, at 05:52, Melanie Plageman <melanieplageman@gmail.com> wrote: > > On Tue, Mar 31, 2026 at 10:15 PM Chao Li <li.evan.chao@gmail.com> wrote: >> >> I noticed that FlushUnlockedBuffer() accepts io_object and io_context, but then ignores them and hardcodes IOOBJECT_RELATIONand IOCONTEXT_NORMAL instead: >> ``` >> static void >> FlushUnlockedBuffer(BufferDesc *buf, SMgrRelation reln, >> IOObject io_object, IOContext io_context) >> { >> Buffer buffer = BufferDescriptorGetBuffer(buf); >> >> BufferLockAcquire(buffer, buf, BUFFER_LOCK_SHARE_EXCLUSIVE); >> FlushBuffer(buf, reln, IOOBJECT_RELATION, IOCONTEXT_NORMAL); // <== HERE >> BufferLockUnlock(buffer, buf); >> } >> ``` >> >> Unless I am missing something, if a function accepts these parameters, they should generally be used. > > Thanks for the patch. Committed in 31b0544b32b > > - Melanie Hi Melanie, thank you very much for pushing. Best regards, -- Chao Li (Evan) HighGo Software Co., Ltd. https://www.highgo.com/