Skip to content

Commit de0664a

Browse files
Fix parallel hash span creation
1 parent c343277 commit de0664a

6 files changed

Lines changed: 51 additions & 3 deletions

File tree

expected/parallel.out

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,15 @@ set parallel_setup_cost=0;
7070
set parallel_tuple_cost=0;
7171
set min_parallel_table_scan_size=0;
7272
set max_parallel_workers_per_gather=2;
73+
-- Test a sampled parallel hash join. Parallel Hash nodes may have
74+
-- instrumentation even when their child was executed by another worker.
75+
set enable_nestloop=false;
76+
set enable_mergejoin=false;
77+
/*dddbs='postgres.db',traceparent='00-00000000000000000000000000000001-0000000000000005-01'*/ select count(*) from pg_tracing_test r join pg_tracing_test s using (a) \gset
78+
\echo :count
79+
10000
80+
CALL clean_spans();
81+
-- Test leaderless parallel query
7382
set parallel_leader_participation=false;
7483
/*dddbs='postgres.db',traceparent='00-00000000000000000000000000000001-0000000000000001-01'*/ select 1 from pg_class limit 1;
7584
?column?

regress/16/expected/parallel.out

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,15 @@ set parallel_setup_cost=0;
7070
set parallel_tuple_cost=0;
7171
set min_parallel_table_scan_size=0;
7272
set max_parallel_workers_per_gather=2;
73+
-- Test a sampled parallel hash join. Parallel Hash nodes may have
74+
-- instrumentation even when their child was executed by another worker.
75+
set enable_nestloop=false;
76+
set enable_mergejoin=false;
77+
/*dddbs='postgres.db',traceparent='00-00000000000000000000000000000001-0000000000000005-01'*/ select count(*) from pg_tracing_test r join pg_tracing_test s using (a) \gset
78+
\echo :count
79+
10000
80+
CALL clean_spans();
81+
-- Test leaderless parallel query
7382
set parallel_leader_participation=false;
7483
/*dddbs='postgres.db',traceparent='00-00000000000000000000000000000001-0000000000000001-01'*/ select 1 from pg_class limit 1;
7584
?column?

regress/17/expected/parallel.out

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,15 @@ set parallel_setup_cost=0;
7070
set parallel_tuple_cost=0;
7171
set min_parallel_table_scan_size=0;
7272
set max_parallel_workers_per_gather=2;
73+
-- Test a sampled parallel hash join. Parallel Hash nodes may have
74+
-- instrumentation even when their child was executed by another worker.
75+
set enable_nestloop=false;
76+
set enable_mergejoin=false;
77+
/*dddbs='postgres.db',traceparent='00-00000000000000000000000000000001-0000000000000005-01'*/ select count(*) from pg_tracing_test r join pg_tracing_test s using (a) \gset
78+
\echo :count
79+
10000
80+
CALL clean_spans();
81+
-- Test leaderless parallel query
7382
set parallel_leader_participation=false;
7483
/*dddbs='postgres.db',traceparent='00-00000000000000000000000000000001-0000000000000001-01'*/ select 1 from pg_class limit 1;
7584
?column?

regress/18/expected/parallel.out

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,15 @@ set parallel_setup_cost=0;
7070
set parallel_tuple_cost=0;
7171
set min_parallel_table_scan_size=0;
7272
set max_parallel_workers_per_gather=2;
73+
-- Test a sampled parallel hash join. Parallel Hash nodes may have
74+
-- instrumentation even when their child was executed by another worker.
75+
set enable_nestloop=false;
76+
set enable_mergejoin=false;
77+
/*dddbs='postgres.db',traceparent='00-00000000000000000000000000000001-0000000000000005-01'*/ select count(*) from pg_tracing_test r join pg_tracing_test s using (a) \gset
78+
\echo :count
79+
10000
80+
CALL clean_spans();
81+
-- Test leaderless parallel query
7382
set parallel_leader_participation=false;
7483
/*dddbs='postgres.db',traceparent='00-00000000000000000000000000000001-0000000000000001-01'*/ select 1 from pg_class limit 1;
7584
?column?

sql/parallel.sql

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,16 @@ set parallel_setup_cost=0;
4141
set parallel_tuple_cost=0;
4242
set min_parallel_table_scan_size=0;
4343
set max_parallel_workers_per_gather=2;
44+
45+
-- Test a sampled parallel hash join. Parallel Hash nodes may have
46+
-- instrumentation even when their child was executed by another worker.
47+
set enable_nestloop=false;
48+
set enable_mergejoin=false;
49+
/*dddbs='postgres.db',traceparent='00-00000000000000000000000000000001-0000000000000005-01'*/ select count(*) from pg_tracing_test r join pg_tracing_test s using (a) \gset
50+
\echo :count
51+
CALL clean_spans();
52+
53+
-- Test leaderless parallel query
4454
set parallel_leader_participation=false;
4555
/*dddbs='postgres.db',traceparent='00-00000000000000000000000000000001-0000000000000001-01'*/ select 1 from pg_class limit 1;
4656

src/pg_tracing_planstate.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -395,10 +395,12 @@ create_spans_from_planstate(PlanState *planstate, planstateTraceContext * planst
395395
span_id = generate_rnd_uint64();
396396
break;
397397
case T_Hash:
398-
/* For hash node, use the child's start */
398+
/* The child may be executed by another parallel worker */
399399
traced_planstate = get_traced_planstate(outerPlanState(planstate));
400-
Assert(traced_planstate != NULL);
401-
span_start = traced_planstate->node_start;
400+
if (traced_planstate != NULL)
401+
span_start = traced_planstate->node_start;
402+
else
403+
span_start = parent_start;
402404

403405
/*
404406
* We still need to generate a dedicated span_id since

0 commit comments

Comments
 (0)