This commit is contained in:
Mateusz Gruszczyński committed 2026-10-31 14:36:07 +01:00
1 parent fc81ecafd6
commit dc57aa7089
89 files changed
+5290 -1551

No files matched your search

+39 -32
View File
@@ -1,38 +1,45 @@
RustBox 0.1.2 release manifest
RustBox 0.2.0 release manifest
Storage model:
- database_backend = sqlite | mysql | pgsql selects the full application database
- session_backend = database stores sessions in the same database
- session_backend = redis uses Redis or Redis Sentinel for sessions
Architecture:
- database_backend = sqlite | mysql | pgsql selects authoritative SQL only
- blob storage and search are independent from the SQL engine
- PostgreSQL/MySQL single-node deployments may continue to use data_dir-backed filesystem/Tantivy
- cluster mode clears an implicit/default data_dir; explicit data_dir is not forbidden, but local-only capabilities are rejected
Database baselines:
- migrations/sqlite/schema.sql: complete SQLite schema, baseline version 46
- migrations/mysql/schema.sql: complete MySQL schema, baseline version 46
- migrations/pgsql/schema.sql: complete PostgreSQL schema, baseline version 46
- each schema includes global sessions and isolated account-data tables
- historical SQLite V001-V046 files are intentionally squashed out of this release
- next migration number for every SQL engine: V047
Blob storage:
- filesystem: local single-node or shared POSIX with storage.shared=true
- shared POSIX examples: NFS, CephFS, GlusterFS
- s3: AWS S3 and S3-compatible endpoints such as MinIO/Ceph RGW
- attachment rows use logical storage keys and SHA-256 metadata
- storage migration command: rustbox storage migrate --from filesystem:/path --to configured [--dry-run] [--verify]
Cluster storage rules (0.1.2):
- SQL mailbox metadata/body cache is shared by the configured MySQL/PostgreSQL backend
- data_dir must be shared between nodes for filesystem-backed draft attachments
- cluster_shared_data_dir=true is required as an explicit deployment acknowledgement
- built-in Tantivy must be disabled in cluster mode (search_index_backend=disabled)
- OpenPGP must be disabled in cluster mode (pgp_enabled=false)
- legacy db.sqlite files remain migration-only; they are not the active database on MySQL/PostgreSQL
Search:
- local_tantivy: single-node only
- opensearch: cluster-capable external index
- disabled: no full-text index
- OpenSearch operations are tenant-scoped by user_hash
- durable SQL outbox provides claim/lease, retry/backoff and dead-letter handling
- rebuild command: rustbox search reindex
Compatibility:
- legacy RustBox 0.1.0 per-user SQLite databases at user_version 46 are imported on first access
- imported source DBs are retained as db.sqlite.pre-0.1.1.bak
- older legacy schemas must first be upgraded with RustBox 0.1.0
Database/schema:
- migrations/{sqlite,mysql,pgsql}/schema.sql contain the current fresh schema
- compatibility baseline remains V046
- runtime migration V047 adds attachment checksum metadata and search_outbox
- next migration number: V048
Tests/source cleanup:
- tests/fixtures/account-session-expired.json is retained because Rust tests include it
- stale tests/*.py and tests/theme_fixture.html are not part of the release tree
Docker examples:
- docker/compose-single-sqlite.yml
- docker/compose-postgres-s3-opensearch.yml (PostgreSQL + SILO/S3 + OpenSearch)
- docker/compose-mysql-nfs-opensearch.yml (MySQL + real NFS volume + OpenSearch)
Oxi tracking:
- UPSTREAM_BASE stores the consumed Oxi revision
- backend source changes are mapped into the flat RustBox tree
- upstream backend/migrations and backend/tests are review-only and never auto-imported
- frontend changes are reviewed and manually ported to src/web/
- scripts/finish-upstream.sh requires explicit acknowledgement for changed RustBox-owned upstream areas before advancing UPSTREAM_BASE
Operations/docs:
- README.md documents 0.2.0 storage/search configuration
- docker/README.md documents Compose variants
- docs/STORAGE_SEARCH_OPERATIONS.md documents failure modes, shared-storage requirements and migration behavior
- TODO.md leaves live SILO/MinIO/AWS/Ceph and real multi-node acceptance validation explicitly pending
Build/release metadata:
- Cargo.toml version = 0.2.0
- rust-toolchain.toml pins Rust 1.88.0
- Cargo.lock is intentionally not shipped because this environment could not regenerate it after dependency changes
- CI and scripts/build-release.sh generate Cargo.lock, then run locked tests/Clippy/release build