From a462ed508c81f09597e55b3f174b6840700fbbd5 Mon Sep 17 00:00:00 2001 From: Andrei Kvapil Date: Thu, 12 Nov 2026 10:01:14 -0500 Subject: [PATCH] chore(release): v0.2.0 Assisted-by: LLM Signed-off-by: Andrei Kvapil --- CHANGELOG.md | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bb337e812..d63d45823 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,41 @@ All notable changes to blockstor are recorded here. The format follows [Keep a Changelog](https://keepachangelog.com/), and the project follows [Semantic Versioning](https://semver.org/). +## v0.2.0 — 2026-11-12 + +The API group moves to `blockstor.org`, so this release is installed from scratch: an installation of v0.1.17 or earlier is not upgraded in place. It also brings the native CLI, the LINSTOR migration converter and the project site. + +### Breaking changes + +- **API group is `blockstor.org` (#221).** Every kind moves to `blockstor.org/v1alpha1`, and label and annotation keys from `blockstor.io/` to `blockstor.org/`. The old group and keys are not read and there is no migration; see "Upgrading from v0.1.17 or earlier" on the site. +- **The LUKS master passphrase is read from its Secret only (#222).** +- **The snapshot stream between satellites moved to port 3372 (#190) and runs over mutual TLS with its own CA (#219).** +- **The API server's plain HTTP port listens on loopback only (#215).** + +### Added + +- Native `blockstor` CLI that talks to Kubernetes directly (#181). +- LINSTOR to blockstor migration converter (#180), with adoption fixes for live clusters (#183): definitions whose replicas disagree on the layer stack are skipped (#223), an unreadable layer stack is reported (#226), and replicas with external DRBD metadata are refused (#227). +- The blockstor.org site (#205). +- A clone reaps the internal snapshot it took on its source (#200). + +### Fixed + +- CSI clone and restore work again, and their retries are idempotent (#190). A clone or restore is rolled back when its parent group is deleted (#193). A restore keeps its source, refuses orphan targets and takes over stale rollback marks (#218). +- A definition's layer stack is decided once, and LUKS never formats a device that already holds data (#206). +- A crashed replica's activity log is repaired instead of the replica being re-initialised (#220), and only valid hex generations are recorded (#225). +- A removed DRBD peer is forgotten through the kernel, and `drbdmeta` is addressed without a minor (#224). +- Create endpoints refuse props edits and honour `definitions_only` (#216). +- Replicas, snapshots and nodes are found under any spelling of their names, and layer stacks are stored in canonical case (#217). + +### Performance + +- The store and the CLI no longer read the whole cluster to answer narrow questions (#191). + +### Testing + +- The REST and e2e harnesses no longer depend on the project's own stands, and the `pkg/rest` "server did not stop within 2s" flake is fixed (#199). + ## v0.1.17 — 2026-07-04 Adversarial-hardening release. A red/blue agent loop attacked the control-plane / API / store / controller surface through the public REST + `linstor` CLI interfaces (concurrency, cache-lag, autoplace/tiebreaker/quorum, VolumeNumber races, snapshot bookkeeping, node evict/restore/lost/drain, input-boundary fuzzing, reconciler races). Two adversarial passes across the V1–V5 sweep, snapshot-restore, resource-connection-path, pagination-under-mutation and every CRD↔wire transcode surfaced THREE real breaks — all the same class: a `modify` path skipping the validation or field-carry-across the `create` path enforces — fixed below (that seam is now mined dry and guarded by a carry-across tripwire). DRBD-kernel scenarios (satellite mkfs/attach, split-brain, real sync) and two parity/product questions were deferred to the live stand (see "Deferred").