Skip to content

v2.5.0

Latest

Choose a tag to compare

@crusaderky crusaderky released this 04 Sep 19:07
2ae9ddd

Major Changes

  • This release delivers the first phase of a performance overhaul in the commit phase.
    Staged writes are now hashed, deduplicated, and written to disk fully in Cython
    through the StagedChangesArray backend. The creation of the virtual datasets at the
    end of commit is still using the legacy path and will be migrated in a future release.
    delete_versions() also temporarily remains on the old, slow code path.

    In short, this translates to:

    • No changes to the user-facing API
    • Major speed-ups (up to 40%) when committing a large number of small chunks
    • Major speed-ups (up to 40%) when committing string datasets with prevalently very
      short strings, regardless of chunk size
    • No material speed-ups (for now) when only a small portion of a dataset changes
  • Sped up hot loops of many small __setitem__ / __getitem__ calls on
    InMemoryDataset and InMemorySparseDataset.

  • Sped up the use case where a user first completely overwrites the contents of a
    dataset with a single __setitem__ call and then calls resize() to enlarge it.

Minor Changes

  • Removed the ENABLE_CHUNK_REUSE_VALIDATION environment variable. Its function is now
    served by a much more thorough corpus of unit tests.
  • Scalar (0-d) datasets are now explicitly unsupported and raise NotImplementedError
    on creation/access instead of failing obscurely downstream.
  • Fixed a data leak in delete_versions(): edge (corner) chunks rewritten after version
    deletion could leave padding filled with data from the deleted versions instead of the
    fill value.
  • Fixed bug where datasets with variable-length string dtype would, in certain cases,
    end up with the default fillvalue set to integer 0 instead of an empty string.
  • Fixed a deadlock on Python <3.12 between InMemoryDataset.staged_changes and h5py's
    global lock.
  • Fixed get_version_by_timestamp() failures on Windows caused by low filesystem
    timestamp precision.
  • Added a build-time requirement for a C++ compiler (g++ / clang++).
  • Added support for Cython 3.2.6 and 3.3.

Developers-only Changes

  • Extensive improvements to the ASV benchmark coverage
  • Added asv-compare tool to produce side-by-side benchmarks between versions
  • Added AGENTS.md and development guidelines for AI-assisted contributions