github medizininformatik-initiative/aether v1.5.2

5 hours ago

This patch release reduces the memory use of the flattening step and keeps the precision of FHIR decimals. The flattening step builds one Provenance index for each Bundle, not one index for all Bundles, and keeps pending batches as raw JSON. For large TORCH extractions, the peak heap no longer grows with the input size. The dimp and validation steps keep the original text of JSON numbers, so 1.50 stays 1.50. The release also fixes a data race on the progress bar and the duration of finished jobs in pipeline status. It updates the Go toolchain to v1.27.3, TORCH to v1.0.3, fhir-flattener to v0.1.0-alpha.10 and fhir-pseudonymizer to v3.1.2.

What's Changed

Breaking Changes

  • flattening routes entries only with the Provenance of the same Bundle — The step reads each input file one time and builds the Provenance index for each Bundle. It does not build an index of all Bundles first. For 25 M references, that index used about 7 GB of memory. Now the peak heap does not change with the input size, and the step is about 37 % faster. TORCH output does not change, because TORCH writes each Provenance in the same Bundle as its targets. For input from local_import or http_import with a different layout: a resource outside a Bundle, or a resource that only a Provenance of a different Bundle targets, goes to no group. #1047 (closes #1044)

Bug Fixes

  • Keep flattening batches as raw JSON to limit memory — Each pending batch is compact raw JSON, not decoded maps. The heap of a batch drops from about 7× to about 1.4× its JSON size. With the default batch_size_mb: 500, the old batch could use about 2.5 GB of heap. #1045 (closes #1043)
  • Keep the text of JSON numbers in the dimp and validation steps — The decoders keep json.Number, so numbers do not go through float64. 1.50, 0.000000120, 100.0 and integers with more than 15 digits stay unchanged. #1049 (closes #1048)
  • Make the progress bar counter safe for concurrent use — The counter is an atomic.Int64. Before, concurrent validation chunks caused a data race and lost increments. CI now runs the tests with -race. #1037 (closes #1036)
  • Show a fixed duration for a finished job in pipeline status — For a completed, failed, stopped or waiting job, the duration is the time from the job creation to the last state write. Before, the duration increased at each query. #1014 (closes #1012)

Internal & CI

  • Run only the tests that cover the mutated line in mutation testing — A go wrapper for gremlins runs only the covering tests for each mutant. make mutation-diff for one function takes 35–44 s instead of 77 s. #1021 (closes #1013)
  • Keep the TORCH test data in the repository — CI does not download the test data from an external server anymore. #1017 (closes #1016)

Dependency Updates

Full Changelog

Don't miss a new aether release

NewReleases is sending notifications on new releases.