Skip to content

chore: merge main into feat/sentinel3-export - #3

Merged
d-v-b merged 4 commits into
d-v-b:feat/sentinel3-exportfrom
EOPF-Explorer:merge-main-into-sentinel3-export
Jul 17, 2026
Merged

chore: merge main into feat/sentinel3-export#3
d-v-b merged 4 commits into
d-v-b:feat/sentinel3-exportfrom
EOPF-Explorer:merge-main-into-sentinel3-export

Conversation

@lhoupert

Copy link
Copy Markdown

Merges current main (v0.10.2) into feat/sentinel3-export ahead of EOPF-Explorer#212. Clean merge; the only manual change is a one-line uv.lock re-lock. OLCI, CLI-routing, and open_source test suites pass (67 tests).

Author attestation

  • I am a human, these are my changes, and I have reviewed and understood every change and can explain why each is correct.

AI-assisted: merge, re-lock, and test verification done with Claude Code; reviewed by me.

lhoupert and others added 4 commits July 17, 2026 10:22
…atomic zarr CacheStore (#220)

Some S2 conversions fail with "RuntimeError: error during blosc
decompression: -1". Root cause is an fsspec bug open since 2021
(fsspec/filesystem_spec#639): simplecache writes a download straight to its
final cache filename, so a concurrent read of the same key can observe a
half-written file. Products whose quality/atmosphere aot/wvp are stored as
one whole-array 10980x10980 chunk trigger it because dask (chunks="auto")
splits that single object into ~9 read tasks fetching it concurrently
(EOPF-Explorer/data-pipeline#339).

open_source_datatree() (conversion/open_source.py) is the safe way to open
a source:
- opens with dask chunks matching the on-disk zarr chunks, so each object
  is fetched by exactly one task (removes the race trigger and the ~9x
  redundant downloads), and
- an optional cache_dir replaces the pipeline's simplecache layer with
  zarr's built-in CacheStore over a LocalStore (suggested by @d-v-b in
  EOPF-Explorer/data-pipeline#339). LocalStore writes atomically (temp file
  + rename), so the half-written-file race cannot occur. Cache entries are
  namespaced per source URL to prevent cross-product collisions.

The convert-s2-optimized CLI command now opens sources through this helper
(generic convert/info/validate open sites are left for a follow-up). zarr
is bounded to >=3.2.0,<3.3.0 while we depend on the experimental CacheStore
API; the import is lazy and guarded so only the cache_dir path is affected
if zarr moves it.

History note: this branch previously carried a hand-rolled atomic fsspec
cache (atomiccache) and an output chunk clamp; the former was replaced by
the CacheStore wiring, the latter is split out to its own PR. Synthesized
from commits acfd142, f950067, cf1a5d2, cd3eb00, da2f2c1.

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@d-v-b
d-v-b merged commit 8828401 into d-v-b:feat/sentinel3-export Jul 17, 2026
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.

2 participants