Thread
-
Re: Asynchronous MergeAppend
Matheus Alcantara <matheusssilv97@gmail.com> — 2025-11-19T21:51:35Z
On Tue Nov 18, 2025 at 4:14 AM -03, Alexander Pyhalov wrote: > Updated the first patch. > Thanks for the new version. Some new comments. v7-0002-MergeAppend-should-support-Async-Foreign-Scan-subpla.patch: 1. Should be "nasyncplans" instead of "nplans"? ExecInitAppend use "nasyncplans" to allocate the as_asyncresults array. + mergestate->ms_asyncresults = (TupleTableSlot **) + palloc0(nplans * sizeof(TupleTableSlot *)); + 2. I think that this comment should be updated. IIUC ms_valid_subplans may not be all subplans because classify_matching_subplans() may move async ones to ms_valid_asyncplans. Is that right? /* * If we've yet to determine the valid subplans then do so now. If * run-time pruning is disabled then the valid subplans will always be * set to all subplans. */ 3. This code comment should also mention the Assert(!bms_is_member(...));? + /* The result should be a TupleTableSlot or NULL. */ + Assert(slot == NULL || IsA(slot, TupleTableSlot)); + Assert(!bms_is_member(areq->request_index, node->ms_has_asyncresults)); 4. It's worth include bms_num_members(node->ms_needrequest) <= 0 check on ExecMergeAppendAsyncRequest() as an early return? IIUC it would avoid the bms_is_member(), bms_next_member() and bms_is_empty(needrequest) calls. ExecMergeAppendAsyncRequest(MergeAppendState *node, int mplan) Bitmapset *needrequest; int i; + if (bms_num_members(node->ms_needrequest) <= 0) + return false; + I'm attaching a diff with some cosmetic changes of indentation and comments. Feel free to include on the patch or not. -- Matheus Alcantara EDB: http://www.enterprisedb.com