Skip to content

ADR-0010 — Ingestion: COG on S3, shared PostGIS index, one view per mosaic, no notification

Date: 2026-09-01 · Status: accepted (validated by prototype 5)

Context

Continuous, multi-dimensional weather rasters, to be published on N replicas without manual action. Prior operational experience: shapefile index (truncated hours) and file-based mosaics with per-node harvest = fragile.

Decision

  1. Granule index in PostGIS (mosaic schema, owned by the ingestion service), one view per mosaic; UseExistingSchema=true.
  2. Granules = COG on S3, named according to ADR-0003, read by ranges.
  3. No notification: ImageMosaic reads the index at every request; an inserted granule is immediately visible everywhere.
  4. Declarative publication by the plugin (MOSAICS ConfigMap), configuration files through the Resource API, datastore via JNDI, title = label + canonical unit from the registry.
  5. Units: ingestion converts to the canonical unit and keeps source_unit; the unit is exposed in the title, the abstract and the keywords.

Rejected alternatives

Alternative Why rejected
File-based mosaics + REST harvest per node Non-atomic, to be repeated on every replica, non-persistence experienced
Event queue to trigger refreshes Unnecessary with a database index
One table per mosaic Duplicates the model; the view is enough
S3 credentials in indexer.properties (CogUser) Plain-text secret in a file; the environment is enough

Consequences

  • Adding a mosaic = one row in MOSAICS + one view created by the ingestion.
  • Granule retention (S3 deletion + index) remains to be defined (out of scope).
  • Decoding of the real formats (GRIB2, NetCDF, HRIT) will replace the prototype's synthetic generation.