Rilasciato 5.0.0

CloudXFile

Un formato di archiviazione a blocchi, con snapshot e fsck.

Anno
2026
Area
Storage, Backend
Stack
C# · .NET 10 · xUnit · Docker · GitHub Actions

Il problema

I formati di archivio assumono di avere a che fare con file. Serviva un contenitore che ragionasse per blocchi, reggesse scritture interrotte e sapesse dire da solo se è integro.

Vincoli

  • Nessuna mutazione in place: si scrive una nuova generazione e si promuove.
  • Crash safety: un processo ucciso a metà non deve lasciare il contenitore peggiore di prima.
  • Verifica indipendente: un fsck che ricostruisce, non che si fida dell'indice.
  • Prestazioni misurabili su volumi da decine di GB, non su fixture da due file.

Architettura

  • Superblock con copia di riserva, indice incrementale, area riservata che ospita l'indice.
  • Gerarchia pallet → box → entry; un'entry occupa un blocco intero.
  • Journal per le operazioni composte, con copy-on-write per i blocchi toccati.
  • Codec di compressione selezionabili, con misure di throughput per decidere i default.

Decisioni che contano

Da formato a storage

La 5.0.0 sposta il progetto da «formato che descrive file» a «storage che espone volumi». È un cambio di identità, non un refactor: le API e i test sono stati riscritti attorno a quel confine.

Scrittore singolo, per costruzione

La concorrenza era già serializzata per caso. È stata resa esplicita: un solo scrittore, regole dichiarate, invece di un lucchetto che funzionava per coincidenza.

fsync non è una barriera su macOS

Assunzione sbagliata trovata dai test di crash: su macOS fsync non offre la garanzia che offre su Linux. La barriera è stata resa esplicita dove serve.

Dove è arrivato

Versione 5.0.0 con nucleo a blocchi, fsck con riparazione, catene di snapshot e audit indipendente del codice.