Thread

  1. 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