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); ExecIndexScanReInitializeDSM((IndexScanState*)planstate, pcxt);
} }
break; break;
case T_IndexOnlyScanState:
if (planstate->plan->parallel_aware) {
ExecIndexOnlyScanReInitializeDSM((IndexOnlyScanState*)planstate, pcxt);
}
break;
case T_AppendState: case T_AppendState:
if (planstate->plan->parallel_aware) { if (planstate->plan->parallel_aware) {
ExecAppendReInitializeDSM((AppendState*)planstate, pcxt); ExecAppendReInitializeDSM((AppendState*)planstate, pcxt);

View File

@ -25,6 +25,7 @@
* parallel index-only scan * parallel index-only scan
* ExecIndexOnlyScanInitializeDSM initialize DSM for parallel * ExecIndexOnlyScanInitializeDSM initialize DSM for parallel
* index-only scan * index-only scan
* ExecIndexOnlyScanReInitializeDSM reinitialize DSM for fresh scan
* ExecIndexOnlyScanInitializeWorker attach to DSM info in parallel worker * ExecIndexOnlyScanInitializeWorker attach to DSM info in parallel worker
*/ */
#include "postgres.h" #include "postgres.h"
@ -260,17 +261,6 @@ TupleTableSlot* ExecIndexOnlyScan(IndexOnlyScanState* node)
*/ */
void ExecReScanIndexOnlyScan(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, * For recursive-stream rescan, if number of RuntimeKeys not euqal zero,
* just return without rescan. * just return without rescan.
@ -331,10 +321,6 @@ void ExecReScanIndexOnlyScan(IndexOnlyScanState* node)
node->ioss_NumScanKeys, node->ioss_NumScanKeys,
node->ioss_OrderByKeys, node->ioss_OrderByKeys,
node->ioss_NumOrderByKeys); node->ioss_NumOrderByKeys);
if (reset_parallel_scan && GetIndexScanDesc(node->ioss_ScanDesc)->parallel_scan) {
index_parallelrescan(GetIndexScanDesc(node->ioss_ScanDesc));
}
} }
ExecScanReScan(&node->ss); 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 * ExecIndexOnlyScanInitializeWorker
* *

View File

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