Skip to content

icu: graceful fallback when unavailable + version-agnostic multi-version staging (consolidates #136/#141)#184

Open
estebanzimanyi wants to merge 1 commit into
MobilityDB:mainfrom
estebanzimanyi:fix/icu-resilience-version-agnostic
Open

icu: graceful fallback when unavailable + version-agnostic multi-version staging (consolidates #136/#141)#184
estebanzimanyi wants to merge 1 commit into
MobilityDB:mainfrom
estebanzimanyi:fix/icu-resilience-version-agnostic

Conversation

@estebanzimanyi
Copy link
Copy Markdown
Member

Summary

Makes the single-timezone model resilient and multi-version-ready, and consolidates the ICU test-staging work of #136 and #141 into one durable change.

1. Load resilience (graceful UTC fallback)

LoadInternal auto-loads ICU and sets the session TimeZone to Europe/Brussels (needed for the named zone). When ICU is unavailable — no on-disk copy AND no network egress (CI docker images, edge/musl deployments, offline installs) — the SetOptionByName previously threw out of LoadInternal and failed the whole extension load. This wraps the ICU autoload + TimeZone set so it degrades gracefully to the session default: the extension always loads, and only bare TIMESTAMPTZ display falls back to UTC when ICU is absent. Mirrors the MEOS-side timezone guard.

2. Version- and platform-agnostic ICU staging

DuckDB autoloads ICU from $HOME/.duckdb/extensions/<version>/<platform>/. The test harness stages the locally-built ICU there. Previously the version tag was hardcoded v1.4.4 + a uname map. This derives both the version tag and platform from the freshly-built duckdb binary (--version + PRAGMA platform), with the hardcode/uname as fallbacks only — so staging follows whatever DuckDB is under test across the v1.4.x LTS line and the v1.5.x multi-version matrix (the analog of MobilityDB's PostgreSQL 13-18 support).

Supersedes

Consolidates and supersedes #136 (amd64 docker ICU staging) and #141 (macOS osx_arm64 staging); recommend closing both once this lands.

Verification

  • Built + full sqllogictest suite green (1727 assertions, 76 cases) in the integrated branch.
  • ICU staging confirmed to derive v1.4.4 / linux_amd64 dynamically.
  • Resilience path proven via an injected-failure self-test: with ICU made unavailable, the extension loads (warns, falls back to UTC) instead of crashing.

Make the single-timezone model resilient and multi-version-ready,
consolidating the ICU test-staging work of MobilityDB#136 and MobilityDB#141.

LoadInternal auto-loads ICU and sets the session TimeZone to
Europe/Brussels. When ICU is unavailable (no on-disk copy AND no network
egress: CI docker images, edge/musl deployments, offline installs) the
TimeZone set threw out of LoadInternal and failed the whole extension
load. Wrap the ICU autoload + TimeZone set so it degrades gracefully to
the session default instead; the extension now always loads and only bare
TIMESTAMPTZ display falls back to UTC when ICU is absent.

Make the test-time ICU staging version- and platform-agnostic: derive the
DuckDB version tag and platform from the freshly-built duckdb binary
instead of hardcoding v1.4.4 + a uname map, so staging follows the v1.4.x
LTS line and the v1.5.x multi-version matrix (the analog of MobilityDB's
PostgreSQL 13-18 support).
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