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¶
- Granule index in PostGIS (
mosaicschema, owned by the ingestion service), one view per mosaic;UseExistingSchema=true. - Granules = COG on S3, named according to ADR-0003, read by ranges.
- No notification: ImageMosaic reads the index at every request; an inserted granule is immediately visible everywhere.
- Declarative publication by the plugin (
MOSAICSConfigMap), configuration files through theResourceAPI, datastore via JNDI, title = label + canonical unit from the registry. - 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.