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

Reply via email to