Changelog
4.2.0
Features
-
Storage restart: an embedded storage can be started again after it has been shut down [278] [701]
-
Data Integrity (opt-in, disabled by default)
-
Power-loss durability: new
synchronize()(fsync) barrier on the file system abstraction, applied on file rollover and commit [301] [751] -
GigaMap
-
Annotation-based index generation for Lucene and JVector, including a compile-time index metamodel [692] [695] [699]
-
Structural index lifecycle: removal of indices and constraints across all index families, redefinition for bitmap indices [694]
-
reindex()to rebuild all indices from the current entity state, plus Lucene back-fill when an index is registered on a populated GigaMap [714] [716] [718] [724] -
Entity-id based
update()/apply(), so Lucene-only and JVector-only maps can be reindexed without a bitmap index [713] [722] -
External-directory Lucene index commits are now coupled to
store()instead of committing eagerly [715] [719] -
Opt-in null embeddings for the vector index, and
BitmapIndices.addWithoutInitializationfor lazy registration without back-fill [748] [759]
-
-
PersistenceShutdownReleasable, an opt-in contract to release resources of persisted instances on storage shutdown [305]
Bugfixes
-
Storage garbage collector: mid-cycle registration race, multi-channel data-loss windows, broken task chain after a failed prepended task, destructive re-execution of partially aborted sweeps, and dangling object ids caused by concurrent data imports [734] [736] [738] [746] [755] [770] [291]
-
Transactions file compaction reworked; the previous implementation could produce a transaction log that failed timestamp validation on the next start and destroyed history on a crash mid-rewrite [760]
-
Backup and rollback hardening: byte-count validation on all backup-relevant copy and write sites, in-flight copies superseded by a truncation, and store rollback consistency [744] [749] [775] [298]
-
Lazy references and storing: lazily skipped instances are pinned until commit, premature links are avoided, loader-built instances are published to the object registry only after completion, used-marked references are exempt from evaluator-driven clearing, and an abandoned batch storer no longer leaks its flush scheduler [289] [290] [292] [299] [307]
-
Storage engine: duplicate entity-cache entries on type id change, wrong hash key when rebuilding the type-in-file table, missing bounds check for variable-length members in
BinaryReferenceTraverser, and a task broker reference that prevented auto-shutdown [282] [286] [726] [740] [741] [767] -
GigaMap index correctness
-
Bitmap indices:
Erroron update/set/replace, exact-match results of binary composite indices,BinaryIndexerStringcollisions on keys containing NUL, null-valued Boolean-indexed entities, multi-value indexers dropping pre-existing shared values,notNull()on composite indexers, and remove with short key arrays [685] [686] [687] [688] [689] [690] [691] [756] [776] -
Use-after-free and double-free in bitmap segment decompression [765] [773]
-
Stale indices after class evolution no longer delete a committed entity, and stale-key removal now fails loudly [762] [771]
-
Anonymous indexer name resolution after reload, and restart idempotence of generated
@Uniqueconstraints [693] [702]
-
-
GigaMap consistency and concurrency
-
Read-lock leaks and deadlocks during iteration; the iteration contract is now enforced [697] [700]
-
Silent lost updates: dirty segments are retained in
release()and segments mutated byapply()/update()are pinned [737] [757] -
Exceptions thrown from user code (indexers, update logic) no longer leave the map inconsistent, and
replace()/apply()validate theircurrentargument [705] [758] -
Lucene reader is no longer reopened on the write path [777]
-
JVector: abandoned vector indices (thread and graph) are reclaimed, and the graph is no longer fully rebuilt on
complete()or on shutdown persist [754] [764] [774]
-
-
Configuration: correct Redis file system URI prefix, Azure
accountNametypo (deprecated alias retained), and null guards for optional cloud storage credentials [732]
Migration
|
The transaction log compaction was reworked [760]. A transactions file compacted by 4.2.0 uses only the already existing entry kinds, so older versions can still read it. While rewriting the log, however, 4.2.0 first puts the complete compacted content into a checksummed swap file next to the transactions file ( After a crash during compaction, open the storage with 4.2.0 once before downgrading, and do so in writable mode - a read-only start refuses to perform the repair write. |
4.1.0
Features
-
Batch Storer for batched persistence [254] [638]
-
Storage object recovery [634]
-
Enhanced root initialization and retrieval in StorageManager [631] [632]
-
GigaMap
-
Sub-queries across all index types [637]
-
Harden JVector on-disk persistence and add internal architecture doc [657]
-
Make HNSW search beam width configurable [644]
-
Replace
finalize()withjava.lang.ref.Cleaner[673]
-
Bugfixes
-
Fix element count calculation issue [252]
-
Fix potential deadlocks in
store/storeAlllock ordering [405] [414] [277] [678] -
Fix flaky deadlock during shutdown in
StorageBackupItemQueue[397] [671] -
Seed live application OIDs into GC mark cycle to prevent zombie OIDs [669]
-
Fix type dictionary provider listener wiring [264]
-
Fix
isUnchangedStructurealways returning false [262] -
Fix DynamoDB query and scan pagination to prevent data truncation [400] [680]
-
GigaMap fixes
-
Binary handler corrections (iterators + BitmapEntry metadata) [679]
-
Fix unique-constraint check missing duplicates after entity ejection [664]
-
Fix GigaMap builder for duplicate indexer usage [660]
-
Fix
Condition.and()silently dropping the second range bound [653] [655] -
Prevent leaking non-matching IDs in composite conditions [642]
-
Fix composite key updates and index exception handling [635]
-
Fix race condition in LuceneIndex GraphDirectory during store [628]
-
4.0.0
Features
-
GigaMap
-
New Vector index [548]
-
New Spatial index [582]
-
Lucene index update [546]
-
Concurrency handling improvements and eventual indexing [564]
-
ByteIndexers for numeric and Instant types [574]
-
Indexer for ZonedDateTime and Instant [565]
-
Add support for zero and negative value indexing in BinaryIndexers [566]
-
-
Native memory accessors to ensure future compatibility with upcoming Java versions [130] [225]
Migration
|
Storages created or modified by version 4.0.0 are not backwards compatible with older versions. Once a storage has been opened with version 4.0.0, it most likely cannot be used with prior versions anymore. Make sure to create a backup of your storage before migrating. |
|
Storages created with one of the 4.0.0 beta versions that use the vector index are unfortunately not compatible with the final version due to necessary internal changes. These storages need to be recreated with the final 4.0.0 release. |
2.0.0
1.3.1
Features
-
Spring Boot improvements [136]
1.3.0
Something went wrong with this release, some files are missing. Please use version 1.3.1 instead.
1.1.0
Features
-
JSR-107 compatible JCache provider with additional Hibernate cache region factory
-
Update rest client UI to Vaadin 24 [94]
-
Serialization support for Throwable [86]
Bugfixes
-
DynamoDB connector fix [118]
1.0.0
This is the first release of EclipseStore, the successor of MicroStream. It is at the same state as the last MicroStream Storage release, 8.1.1. Just living in a different namespace.
Migration
Migration of MicroStream projects can easily be achieved with this tool.
It takes care of the proper rewrite of dependencies and packages.