TableScanDesc table_beginscan_parallel(Relation relation, ParallelTableScanDesc parallel_scan) { Snapshot snapshot; Assert(RelationGetRelid(relation) == parallel_scan->phs_relid); if (!parallel_scan->phs_snapshot_any) { /* Snapshot was serialized -- restore it */ snapshot = RestoreSnapshot((char *) parallel_scan + parallel_scan->phs_snapshot_off); RegisterSnapshot(snapshot); } else { /* SnapshotAny passed by caller (not serialized) */ snapshot = SnapshotAny; } return relation->rd_tableam->scan_begin(relation, snapshot, 0, NULL, parallel_scan, true, true, true, false, false, !parallel_scan->phs_snapshot_any); }
void CReplayManager::CheckReplay() { if (m_bReplayIsPending && gpGlobals->curtime >= m_flReplayActivationTime || m_bIsReplaying) RestoreSnapshot(); else if (!m_bIsReplaying && !SDKGameRules()->IsIntermissionState() && (!m_bReplayIsPending || m_MatchEvents.Count() > 0 && m_MatchEvents.Tail()->snapshotEndTime >= gpGlobals->curtime)) TakeSnapshot(); }
/* ---------------------------------------------------------------- * ExecBitmapHeapInitializeWorker * * Copy relevant information from TOC into planstate. * ---------------------------------------------------------------- */ void ExecBitmapHeapInitializeWorker(BitmapHeapScanState *node, shm_toc *toc) { ParallelBitmapHeapState *pstate; Snapshot snapshot; pstate = shm_toc_lookup(toc, node->ss.ps.plan->plan_node_id, false); node->pstate = pstate; snapshot = RestoreSnapshot(pstate->phs_snapshot_data); heap_update_snapshot(node->ss.ss_currentScanDesc, snapshot); }
/* ---------------------------------------------------------------- * ExecBitmapHeapInitializeWorker * * Copy relevant information from TOC into planstate. * ---------------------------------------------------------------- */ void ExecBitmapHeapInitializeWorker(BitmapHeapScanState *node, ParallelWorkerContext *pwcxt) { ParallelBitmapHeapState *pstate; Snapshot snapshot; Assert(node->ss.ps.state->es_query_dsa != NULL); pstate = shm_toc_lookup(pwcxt->toc, node->ss.ps.plan->plan_node_id, false); node->pstate = pstate; snapshot = RestoreSnapshot(pstate->phs_snapshot_data); heap_update_snapshot(node->ss.ss_currentScanDesc, snapshot); }
/* * index_beginscan_parallel - join parallel index scan * * Caller must be holding suitable locks on the heap and the index. */ IndexScanDesc index_beginscan_parallel(Relation heaprel, Relation indexrel, int nkeys, int norderbys, ParallelIndexScanDesc pscan) { Snapshot snapshot; IndexScanDesc scan; Assert(RelationGetRelid(heaprel) == pscan->ps_relid); snapshot = RestoreSnapshot(pscan->ps_snapshot_data); RegisterSnapshot(snapshot); scan = index_beginscan_internal(indexrel, nkeys, norderbys, snapshot, pscan, true); /* * Save additional parameters into the scandesc. Everything else was set * up by index_beginscan_internal. */ scan->heapRelation = heaprel; scan->xs_snapshot = snapshot; return scan; }