Can we use parallel workers to create index without active/transaction snapshot? - Mailing list pgsql-hackers

From Hao Zhang
Subject Can we use parallel workers to create index without active/transaction snapshot?
Date
Msg-id CALY6Dr8OOopBedYaJ2Kc02XBETgkuSQ8J7T0u7DbdWOapjH9hQ@mail.gmail.com
Whole thread Raw
Responses Re: Can we use parallel workers to create index without active/transaction snapshot?
List pgsql-hackers
Hi hackers,
I'm doing work related to creating an index with parallel workers. I found that SnapshotAny
is used in table_beginscan_parallel() when indexInfo->ii_Concurrent Is set to false. So can we
not pass the snapshot from the parallel worker creator to the parallel worker? like this:
```
InitializeParallelDSM()
{
   ...

        if (is_concurrent == false)
        {
            /* Serialize the active snapshot. */
            asnapspace = shm_toc_allocate(pcxt->toc, asnaplen);
            SerializeSnapshot(active_snapshot, asnapspace);
            shm_toc_insert(pcxt->toc, PARALLEL_KEY_ACTIVE_SNAPSHOT, asnapspace);
        }

   ...
}

ParallelWorkerMain()
{
   ...

    if(is_concurrent == false)
    {
        asnapspace = shm_toc_lookup(toc, PARALLEL_KEY_ACTIVE_SNAPSHOT, false);
        tsnapspace = shm_toc_lookup(toc, PARALLEL_KEY_TRANSACTION_SNAPSHOT, true);
        asnapshot = RestoreSnapshot(asnapspace);
        tsnapshot = tsnapspace ? RestoreSnapshot(tsnapspace) : asnapshot;
        RestoreTransactionSnapshot(tsnapshot,
                                fps->parallel_leader_pgproc);
        PushActiveSnapshot(asnapshot);
    }

   ...
}
```

I would appreciate your help.

With Regards
Hao Zhang

pgsql-hackers by date:

Previous
From: "Wen Yi"
Date:
Subject: How can udf c function return table, not the rows?
Next
From: Laurenz Albe
Date:
Subject: Re: Built-in CTYPE provider