Skip to content

v2.0.0

Latest

Choose a tag to compare

@zeroheartbeat zeroheartbeat released this 25 Aug 05:32
· 1 commit to main since this release

Clustron Zaris 2.0.0

Type: MAJOR (SemVer) — a wire-breaking change requires all clients to upgrade. Dependencies (unchanged): Nodus 1.1.0, Keyvus 1.1.0, Numerous 0.9.0.

⚠️ Breaking change — upgrade all clients to 2.0.0

Native key routing now uses XMODEM CRC16 (CRC16(key) % 16384 → segment), aligning Zaris's own hashing with Redis Cluster slots. This is wire-incompatible with 1.x clients, which hash keys with the old scheme and would misroute.

To prevent silent data misplacement, the server now rejects pre-2.0.0 clients at the connection handshake with a clear error:

Incompatible client: protocol 1 is older than this server supports (minimum 2). Upgrade the client.

Action required: upgrade every client to Clustron.Zaris.Client 2.0.0. A 1.x client will not connect to a 2.0.0 server. (RESP/Redis clients are unaffected — they already route by CRC16 slots.)

Rolling upgrade: upgrade the servers first (a 2.0.0 client is rejected only by… nothing — it works against 2.0.0), then upgrade clients. During the window, un-upgraded 1.x clients are cleanly refused rather than corrupting placement.

Artifacts in this folder

  • clustron-zaris-2.0.0-win-x64.zip — installable server package (Management Service + node runtime + tools + web console).
  • nuget/Clustron.Zaris.*.2.0.0.nupkg (+ .snupkg) — Abstractions, Client, InProc, SDK, DistributedCache, HybridCache.

New features (since 1.1.0)

  • Redis-protocol (RESP) front-endStreams (log + consumer groups + blocking), server-side data structures (hash/list/set/sorted-set), and native pub/sub, usable from any Redis client (validated against StackExchange.Redis).
  • CRC16 slot-aligned routing — Zaris segments now map to Redis Cluster slots (the breaking change above), so CLUSTER SLOTS/MOVED line up with real Redis clients.
  • Client-compatibility gate — the server rejects incompatible clients at the HELLO handshake by wire-protocol version (now enforced; see breaking change).
  • Large-object chunking (off by default) for big plain values.
  • Console size visibility — per-store avg/max item-size KPIs.

Fixes

  • Bulk/batch GET returned no value (client): GetManyAsync and typed ExecuteBatchAsync<T> GETs came back empty (a swallowed ZarisEntry-vs-raw deserialization mismatch in the cluster client). Now decodes both encodings.
  • Fault A (durability): a MigrationCompleted map regen no longer reshuffles a healthy, untouched partition off its live owner (which reset its epoch and lost in-flight acked writes).
  • Fault B (durability): writes are no longer acknowledged while a partition's active ownership is transitioning — they fail-closed as retryable Unavailable instead of being acked into a handoff/regen window and lost.
  • Performance: RF1 replication op-log skip, SET read-before-write fusion, striped hot counters, allocation-free GET/SET fast path, typed-delegate cluster-owner lookup.