solve conficts

This commit is contained in:
chenxiaobin 2020-11-24 21:07:48 +08:00
parent 61414ba87d
commit 439aca70f4
3 changed files with 18 additions and 15 deletions

View File

@ -478,6 +478,11 @@ static bool ExecParallelReInitializeDSM(PlanState* planstate, ParallelContext* p
ExecIndexScanReInitializeDSM((IndexScanState*)planstate, pcxt);
}
break;
case T_IndexOnlyScanState:
if (planstate->plan->parallel_aware) {
ExecIndexOnlyScanReInitializeDSM((IndexOnlyScanState*)planstate, pcxt);
}
break;
case T_AppendState:
if (planstate->plan->parallel_aware) {
ExecAppendReInitializeDSM((AppendState*)planstate, pcxt);

View File

@ -25,6 +25,7 @@
* parallel index-only scan
* ExecIndexOnlyScanInitializeDSM initialize DSM for parallel
* index-only scan
* ExecIndexOnlyScanReInitializeDSM reinitialize DSM for fresh scan
* ExecIndexOnlyScanInitializeWorker attach to DSM info in parallel worker
*/
#include "postgres.h"
@ -260,17 +261,6 @@ TupleTableSlot* ExecIndexOnlyScan(IndexOnlyScanState* node)
*/
void ExecReScanIndexOnlyScan(IndexOnlyScanState* node)
{
bool reset_parallel_scan = true;
/*
* If we are here to just update the scan keys, then don't reset parallel
* scan. For detailed reason behind this look in the comments for
* ExecReScanIndexScan.
*/
if (node->ioss_NumRuntimeKeys != 0 && !node->ioss_RuntimeKeysReady) {
reset_parallel_scan = false;
}
/*
* For recursive-stream rescan, if number of RuntimeKeys not euqal zero,
* just return without rescan.
@ -331,10 +321,6 @@ void ExecReScanIndexOnlyScan(IndexOnlyScanState* node)
node->ioss_NumScanKeys,
node->ioss_OrderByKeys,
node->ioss_NumOrderByKeys);
if (reset_parallel_scan && GetIndexScanDesc(node->ioss_ScanDesc)->parallel_scan) {
index_parallelrescan(GetIndexScanDesc(node->ioss_ScanDesc));
}
}
ExecScanReScan(&node->ss);
@ -898,6 +884,17 @@ void ExecIndexOnlyScanInitializeDSM(IndexOnlyScanState *node, ParallelContext *p
}
}
/* ----------------------------------------------------------------
* ExecIndexOnlyScanReInitializeDSM
*
* Reset shared state before beginning a fresh scan.
* ----------------------------------------------------------------
*/
void ExecIndexOnlyScanReInitializeDSM(IndexOnlyScanState *node, ParallelContext *pcxt)
{
index_parallelrescan(GetIndexScanDesc(node->ioss_ScanDesc));
}
/* ----------------------------------------------------------------
* ExecIndexOnlyScanInitializeWorker
*

View File

@ -28,5 +28,6 @@ extern void StoreIndexTuple(TupleTableSlot* slot, IndexTuple itup, TupleDesc itu
/* Support functions for parallel index-only scans */
extern void ExecIndexOnlyScanEstimate(IndexOnlyScanState *node, ParallelContext *pcxt);
extern void ExecIndexOnlyScanInitializeDSM(IndexOnlyScanState *node, ParallelContext *pcxt, int nodeid);
extern void ExecIndexOnlyScanReInitializeDSM(IndexOnlyScanState *node, ParallelContext *pcxt);
extern void ExecIndexOnlyScanInitializeWorker(IndexOnlyScanState *node, void *context);
#endif /* NODEINDEXONLYSCAN_H */