Skip to content

Commit 9f68aec

Browse files
feat: add Cloudberry gang-parallel support to PXF FDW
- Added PxfBridgeImportStartVirtual function to manage imports with virtual segment IDs. - Updated PxfFdwScanState structure to include fields for gang-parallel execution. - Enhanced foreign scan functions to support gang-parallel mode, ensuring unique fragment distribution among workers. - Implemented initialization and cleanup routines for gang-parallel state management.
1 parent 6a0682e commit 9f68aec

44 files changed

Lines changed: 1192 additions & 116 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
-- @description query01 for PXF parallel scan correctness - count with parallel
2+
3+
SET optimizer = off;
4+
SET
5+
SET enable_parallel = true;
6+
SET
7+
SET max_parallel_workers_per_gather = 4;
8+
SET
9+
SELECT count(*) FROM pxf_parallel_enabled;
10+
count
11+
-------
12+
10000
13+
(1 row)
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
-- @description query02 for PXF parallel scan correctness - sum aggregation
2+
3+
SET optimizer = off;
4+
SET
5+
SET enable_parallel = true;
6+
SET
7+
SET max_parallel_workers_per_gather = 4;
8+
SET
9+
SELECT sum(id) FROM pxf_parallel_enabled;
10+
sum
11+
----------
12+
50005000
13+
(1 row)
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
-- @description query03 for PXF parallel scan correctness - cross-check parallel vs non-parallel count
2+
3+
SET optimizer = off;
4+
SET
5+
SET enable_parallel = false;
6+
SET
7+
SELECT count(*) AS non_parallel_count FROM pxf_parallel_disabled;
8+
non_parallel_count
9+
--------------------
10+
10000
11+
(1 row)
12+
13+
SET enable_parallel = true;
14+
SET
15+
SET max_parallel_workers_per_gather = 4;
16+
SET
17+
SELECT count(*) AS parallel_count FROM pxf_parallel_enabled;
18+
parallel_count
19+
----------------
20+
10000
21+
(1 row)
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
-- @description query04 for PXF parallel scan correctness - ORDER BY with LIMIT
2+
3+
SET optimizer = off;
4+
SET
5+
SET enable_parallel = true;
6+
SET
7+
SET max_parallel_workers_per_gather = 4;
8+
SET
9+
SELECT id, val FROM pxf_parallel_enabled ORDER BY id LIMIT 10;
10+
id | val
11+
----+-------
12+
1 | row_1
13+
2 | row_2
14+
3 | row_3
15+
4 | row_4
16+
5 | row_5
17+
6 | row_6
18+
7 | row_7
19+
8 | row_8
20+
9 | row_9
21+
10 | row_10
22+
(10 rows)
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
-- @description query05 for PXF parallel scan correctness - MIN/MAX/AVG aggregates
2+
3+
SET optimizer = off;
4+
SET
5+
SET enable_parallel = true;
6+
SET
7+
SET max_parallel_workers_per_gather = 4;
8+
SET
9+
SELECT min(id), max(id), avg(id) FROM pxf_parallel_enabled;
10+
min | max | avg
11+
-----+-------+-----------------------
12+
1 | 10000 | 5000.5000000000000000
13+
(1 row)
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
-- @description query06 for PXF parallel scan correctness - WHERE pushdown with parallel
2+
3+
SET optimizer = off;
4+
SET
5+
SET enable_parallel = true;
6+
SET
7+
SET max_parallel_workers_per_gather = 4;
8+
SET
9+
SELECT count(*) FROM pxf_parallel_enabled WHERE id > 5000;
10+
count
11+
-------
12+
5000
13+
(1 row)
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
-- @description query07 for PXF parallel scan correctness - column projection with WHERE
2+
3+
SET optimizer = off;
4+
SET
5+
SET enable_parallel = true;
6+
SET
7+
SET max_parallel_workers_per_gather = 4;
8+
SET
9+
SELECT val FROM pxf_parallel_enabled WHERE id <= 5 ORDER BY val;
10+
val
11+
-------
12+
row_1
13+
row_2
14+
row_3
15+
row_4
16+
row_5
17+
(5 rows)
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
-- @description query08 for PXF parallel scan correctness - empty result edge case
2+
3+
SET optimizer = off;
4+
SET
5+
SET enable_parallel = true;
6+
SET
7+
SET max_parallel_workers_per_gather = 4;
8+
SET
9+
SELECT count(*) FROM pxf_parallel_enabled WHERE id < 0;
10+
count
11+
-------
12+
0
13+
(1 row)
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
-- @description query09 for PXF parallel scan correctness - COUNT DISTINCT no duplicates
2+
3+
SET optimizer = off;
4+
SET
5+
SET enable_parallel = true;
6+
SET
7+
SET max_parallel_workers_per_gather = 4;
8+
SET
9+
SELECT count(DISTINCT id) FROM pxf_parallel_enabled;
10+
count
11+
-------
12+
10000
13+
(1 row)
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
-- @description query10 for PXF parallel scan correctness - workers=0 fallback on parallel table
2+
3+
SET optimizer = off;
4+
SET
5+
SET enable_parallel = true;
6+
SET
7+
SET max_parallel_workers_per_gather = 0;
8+
SET
9+
SELECT count(*) FROM pxf_parallel_enabled;
10+
count
11+
-------
12+
10000
13+
(1 row)

0 commit comments

Comments
 (0)