Skip to content

docker: ship postgresql-client for the bootstrap-index recipes#110

Merged
jghoman merged 2 commits into
mainfrom
jakob/psql-in-image
Jul 24, 2026
Merged

docker: ship postgresql-client for the bootstrap-index recipes#110
jghoman merged 2 commits into
mainfrom
jakob/psql-in-image

Conversation

@jghoman

@jghoman jghoman commented Jul 24, 2026

Copy link
Copy Markdown
Collaborator

The justfile's bootstrap-index-* recipes shell out to psql for CREATE INDEX CONCURRENTLY (can't run inside a transaction, so the python/duckdb connection path is not a substitute). The runtime image never carried psql — the central viaduck crons never ran these recipes, so it went unnoticed until the composition-stamped tenant maintenance cron (charts #13458) put bootstrap-indexes first in its chain: every run dies at psql: not found (exit 127) before any compaction happens. Observed live on team-2's first */15 run.

After merge this needs a release + the charts compactionImage.tag bump to unblock the tenant crons.

jghoman added 2 commits July 24, 2026 13:09
In a multi-recipe invocation (just a b c) a recipe with a positional
param eats the next recipe name as its argument — 'just
compact-all-tiers expire ...' compacts table="expire". The
composition-stamped tenant maintenance CronJob runs one flat chain
(bootstrap-indexes compact-all-tiers-default expire-7d
purge-orphan-stats cleanup-all), so the two parameterized steps get
no-arg wrappers with the fleet defaults pinned. The step SEQUENCE
deliberately lives in the cron definition (crossplane composition), not
an umbrella recipe here — changing steps must not require a millpond
release.
The justfile's bootstrap-index-* recipes shell out to psql for CREATE
INDEX CONCURRENTLY (cannot run inside a transaction, so the
python/duckdb connection path is not a substitute). The runtime image
never carried psql — the central viaduck crons never ran these
recipes, so it went unnoticed until the composition-stamped tenant
maintenance cron put bootstrap-indexes first in its chain: every run
dies at 'psql: not found' before any compaction happens.
@jghoman
jghoman merged commit dd8fb11 into main Jul 24, 2026
17 checks passed
@jghoman
jghoman deleted the jakob/psql-in-image branch July 24, 2026 16:16
jghoman added a commit that referenced this pull request Jul 24, 2026
CREATE SECRET (TYPE s3, PROVIDER credential_chain) — the Pod-Identity
path the composition-stamped tenant maintenance crons use — requires
the aws extension. It was never pre-installed, so DuckDB attempted a
runtime auto-install, which dies on the crons' read-only root
filesystem:

  Cannot open file ".../.duckdb/extensions/v1.5.2/linux_arm64/
  aws.duckdb_extension.tmp-...": Read-only file system

The central viaduck crons never hit this: they authenticate with
static env credentials, which need no aws extension. Same
first-time-exercised class as the psql gap (#110): observed live on
the first tenant cron run that got past bootstrap-indexes.
jghoman added a commit that referenced this pull request Jul 24, 2026
CREATE SECRET (TYPE s3, PROVIDER credential_chain) — the Pod-Identity
path the composition-stamped tenant maintenance crons use — requires
the aws extension. It was never pre-installed, so DuckDB attempted a
runtime auto-install, which dies on the crons' read-only root
filesystem:

  Cannot open file ".../.duckdb/extensions/v1.5.2/linux_arm64/
  aws.duckdb_extension.tmp-...": Read-only file system

The central viaduck crons never hit this: they authenticate with
static env credentials, which need no aws extension. Same
first-time-exercised class as the psql gap (#110): observed live on
the first tenant cron run that got past bootstrap-indexes.
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.

1 participant