Skip to content

PG19: fix runtime bugs hit outside the regression suite#8617

Merged
ihalatci merged 1 commit into
pg19-supportfrom
pg19-runtime-fixes
Jun 18, 2026
Merged

PG19: fix runtime bugs hit outside the regression suite#8617
ihalatci merged 1 commit into
pg19-supportfrom
pg19-runtime-fixes

Conversation

@ihalatci

@ihalatci ihalatci commented Jun 13, 2026

Copy link
Copy Markdown
Contributor

Stacked PR (PR2 of the PG19 stack). Base = pg19-ci-test-matrices (#8616), which is itself stacked on pg19-ruleutils-port (#8602) → pg19-support. Review/merge in stack order.

Fixes two PG19 runtime crashes that surface in normal Citus operation (outside the regression suite):

  1. FuncnameGetCandidates() gained an int *fgc_flags out-parameter that the callee writes to unconditionally. The compat shim passed NULL and crashed on every by-name function lookup (e.g. the maintenance daemon). Now passes the address of an int compound literal.
  2. TupleDesc->firstNonCachedOffsetAttr: PG19 added an offset cache that BlessTupleDesc() / slot_deform_heap_tuple() now assert is populated but no longer populate themselves. BlessTupleDesc is wrapped to call TupleDescFinalize() first (no-op shim on older majors), with explicit calls added at the four sites that deform hand-built TupleDescs.

Also installs ApplicationNameAssignHook via union access on PG19.

Closes #8610
Part of #8597

@codecov

codecov Bot commented Jun 13, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 62.50000% with 3 lines in your changes missing coverage. Please review.
⚠️ Please upload report for BASE (pg19-support@87fe895). Learn more about missing BASE report.

Additional details and impacted files
@@               Coverage Diff               @@
##             pg19-support    #8617   +/-   ##
===============================================
  Coverage                ?   88.93%           
===============================================
  Files                   ?      288           
  Lines                   ?    64371           
  Branches                ?     8092           
===============================================
  Hits                    ?    57251           
  Misses                  ?     4783           
  Partials                ?     2337           
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR is part of the PG19 support stack and addresses PG19-only runtime crashes by updating Citus compatibility shims and ensuring newly-required tuple descriptor finalization is performed before slot deformation.

Changes:

  • Fix PG19 FuncnameGetCandidates() compatibility shim by providing a valid fgc_flags out-parameter.
  • Ensure PG19 TupleDesc offset-cache initialization via TupleDescFinalize() (including a PG19 BlessTupleDesc() wrapper and explicit finalize calls at key call sites).
  • Update GUC override logic for PG19’s config_generic layout change when installing the application_name assign hook.

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
src/include/pg_version_compat.h Updates PG19 compatibility macros (fgc_flags shim; TupleDescFinalize + BlessTupleDesc wrapper; no-op TupleDescFinalize on older majors).
src/backend/distributed/stats/query_stats.c Finalizes SRF-provided TupleDesc before using it with slot deformation on PG19.
src/backend/distributed/shared_library_init.c Adjusts PG19 GUC struct access to install ApplicationNameAssignHook safely.
src/backend/distributed/planner/multi_explain.c Finalizes a hand-built TupleDesc used for EXPLAIN ANALYZE result collection on PG19.
src/backend/distributed/executor/distributed_intermediate_results.c Finalizes hand-built TupleDescs used with tuple deformation/processing on PG19.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/include/pg_version_compat.h Outdated
Comment on lines +200 to +201
#define BlessTupleDesc(td) \
(TupleDescFinalize(td), (BlessTupleDesc) (td))

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good catch. Replaced the comma-expression macro with a single-evaluation static inline citus_BlessTupleDesc() helper defined before the macro, so the argument is only evaluated once and side-effecting call sites like BlessTupleDesc(CreateTemplateTupleDesc(...)) are safe. Verified with a full backend build against PG19beta1 (no warnings/errors).

@ihalatci ihalatci force-pushed the pg19-ci-test-matrices branch from ad4ccab to 2a197c5 Compare June 16, 2026 12:15
Base automatically changed from pg19-ci-test-matrices to pg19-support June 18, 2026 07:41
Two PG19 runtime crashes that surface in normal Citus operation (not just
the regression tests):

1. FuncnameGetCandidates() gained an int *fgc_flags out-parameter that the
   callee writes to unconditionally; the compat shim passed NULL and crashed
   on every by-name function lookup (e.g. the maintenance daemon). Pass the
   address of an int compound literal instead.

2. PG19 added TupleDesc->firstNonCachedOffsetAttr, an offset cache that
   BlessTupleDesc()/slot_deform_heap_tuple() now assert is populated but no
   longer populate themselves. Wrap BlessTupleDesc to call TupleDescFinalize()
   first, add a no-op shim on older majors, and call it explicitly at the
   three sites that deform hand-built TupleDescs.

Also installs ApplicationNameAssignHook via union access on PG19.

DESCRIPTION: Fix PG19 runtime crashes in function lookup and TupleDesc handling

Closes #8610
Part of #8597
@ihalatci ihalatci force-pushed the pg19-runtime-fixes branch from 3a0a90e to 2ff1cfd Compare June 18, 2026 08:24
@ihalatci ihalatci requested a review from alperkocatas June 18, 2026 13:07

@alperkocatas alperkocatas left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: For item 2: The message says "call it explicitly at the three sites," but there are four explicit TupleDescFinalize() calls (two in distributed_intermediate_results.c, one in multi_explain.c, one in query_stats.c). The query_stats.c one is arguably a separate "defensive SRF" case rather than a hand-built desc — worth tightening the wording so the count matches.

@ihalatci ihalatci merged commit 5017d6b into pg19-support Jun 18, 2026
139 of 166 checks passed
@ihalatci ihalatci deleted the pg19-runtime-fixes branch June 18, 2026 14:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

PG19: fix runtime crashes outside the regression suite

3 participants