On Tue, Mar 25, 2025 at 11:55 AM Andres Freund <and...@anarazel.de> wrote: > If a callback may sometimes need to block, it can still opt into > READ_STREAM_USE_BATCHING, by submitting all staged IO before blocking. > > The hardest part is to explain the flag. Here's my current attempt: > > /* --- > * Opt-in to using AIO batchmode. > * > * Submitting IO in larger batches can be more efficient than doing so > * one-by-one, particularly for many small reads. It does, however, require > * the ReadStreamBlockNumberCB callback to abide by the restrictions of AIO > * batching (c.f. pgaio_enter_batchmode()). Basically, the callback may not: > * a) block without first calling pgaio_submit_staged(), unless a > * to-be-waited-on lock cannot be part of a deadlock, e.g. because it is > * never acquired in a nested fashion > * b) directly or indirectly start another batch pgaio_enter_batchmode() > * > * As this requires care and is nontrivial in some cases, batching is only > * used with explicit opt-in. > * --- > */ > #define READ_STREAM_USE_BATCHING 0x08
+1 I wonder if something more like READ_STREAM_CALLBACK_BATCHMODE_AWARE would be better, to highlight that you are making a declaration about a property of your callback, not just turning on an independent go-fast feature... I fished those words out of the main (?) description of this topic atop pgaio_enter_batchmode(). Just a thought, IDK.