solve conficts
This commit is contained in:
@ -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);
|
||||||
|
@ -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
|
||||||
*
|
*
|
||||||
|
@ -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 */
|
||||||
|
Reference in New Issue
Block a user