mirror of
https://github.com/postgres/postgres.git
synced 2025-07-30 11:03:19 +03:00
Improve Asserts checking relation matching in parallel scans.
table_beginscan_parallel and index_beginscan_parallel contain
Asserts checking that the relation a worker will use in
a parallel scan is the same one the leader intended. However,
they were checking for relation OID match, which was not strong
enough to detect the mismatch problem fixed in 126ec0bc7
.
What would be strong enough is to compare relfilenodes instead.
Arguably, that's a saner definition anyway, since a scan surely
operates on a physical relation not a logical one. Hence,
store and compare RelFileLocators not relation OIDs. Also
ensure that index_beginscan_parallel checks the index identity
not just the table identity.
Discussion: https://postgr.es/m/2127254.1726789524@sss.pgh.pa.us
This commit is contained in:
@ -18,6 +18,7 @@
|
||||
#include "access/itup.h"
|
||||
#include "port/atomics.h"
|
||||
#include "storage/buf.h"
|
||||
#include "storage/relfilelocator.h"
|
||||
#include "storage/spin.h"
|
||||
#include "utils/relcache.h"
|
||||
|
||||
@ -62,7 +63,7 @@ typedef struct TableScanDescData *TableScanDesc;
|
||||
*/
|
||||
typedef struct ParallelTableScanDescData
|
||||
{
|
||||
Oid phs_relid; /* OID of relation to scan */
|
||||
RelFileLocator phs_locator; /* physical relation to scan */
|
||||
bool phs_syncscan; /* report location to syncscan logic? */
|
||||
bool phs_snapshot_any; /* SnapshotAny, not phs_snapshot_data? */
|
||||
Size phs_snapshot_off; /* data for snapshot */
|
||||
@ -169,8 +170,8 @@ typedef struct IndexScanDescData
|
||||
/* Generic structure for parallel scans */
|
||||
typedef struct ParallelIndexScanDescData
|
||||
{
|
||||
Oid ps_relid;
|
||||
Oid ps_indexid;
|
||||
RelFileLocator ps_locator; /* physical table relation to scan */
|
||||
RelFileLocator ps_indexlocator; /* physical index relation to scan */
|
||||
Size ps_offset; /* Offset in bytes of am specific structure */
|
||||
char ps_snapshot_data[FLEXIBLE_ARRAY_MEMBER];
|
||||
} ParallelIndexScanDescData;
|
||||
|
Reference in New Issue
Block a user