Can we use parallel workers to create index without active/transaction snapshot?

From: Hao Zhang <zhrt1446384557(at)gmail(dot)com>
To: pgsql-hackers(at)lists(dot)postgresql(dot)org
Subject: Can we use parallel workers to create index without active/transaction snapshot?
Date: 2024-07-19 07:11:25
Message-ID: CALY6Dr8OOopBedYaJ2Kc02XBETgkuSQ8J7T0u7DbdWOapjH9hQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Laurenz Albe 2024-07-19 07:44:21 Re: Built-in CTYPE provider
Previous Message Wen Yi 2024-07-19 06:57:51 How can udf c function return table, not the rows?