mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-11 07:36:53 +00:00
a91d9cefc6
test(interop): real-MinIO read + migration parity, Phase 1/2 (backlog#580) Capture authentic on-disk fixtures from MinIO RELEASE.2025-07-23 (a bucket with versioning, object-lock, lifecycle, tagging, quota, a public policy, SSE-S3 encryption, a webhook notification target, and a replication rule, plus inline / versioned / multipart objects and a delete marker) and prove RustFS reads and migrates them losslessly: - filemeta parses_real_minio_object_xlmeta: small inline, two-object-version + delete marker, and multipart object xl.meta parse to the expected FileInfo. - ecstore parses_real_minio_bucket_metadata_blob_without_loss: the MinIO .metadata.bin msgpack decodes via the PascalCase field names and parse_all_configs loads all ten config types present (policy, lifecycle incl. <ExpiryUpdatedAt>, object-lock, versioning, tagging, quota, notification, encryption/SSE-S3, replication incl. DeleteMarkerReplication / ExistingObjectReplication) without loss. - ecstore reads_minio_inline_bucket_metadata_via_bitrot: MinIO inlines an object body as [HighwayHash256 32B][body]; RustFS's BitrotReader with HighwayHash256S verifies and yields the exact blob (the "inline_data 前缀不同" is that prefix). - ecstore migrates_real_minio_bucket_metadata_end_to_end: on a throwaway 4-drive local ECStore, a real MinIO .metadata.bin seeded under .minio.sys is migrated into .rustfs.sys byte-identically for every config, exercising the Phase 2 source adapter (MIGRATING_META_BUCKET = ".minio.sys") through the object layer. All four run as ordinary crate tests (nextest CI). Phase 4 (MinIO re-reading a RustFS drive) is documented as out of scope for one-way migration. Refs rustfs/backlog#580
22 lines
1.1 KiB
Markdown
22 lines
1.1 KiB
Markdown
# Real MinIO on-disk fixtures (backlog#580 interop)
|
|
|
|
Generated by MinIO `RELEASE.2025-07-23T15-54-02Z` (single-drive, local SSE-S3
|
|
KMS + webhook notify target enabled) writing a bucket configured with
|
|
**versioning, object-lock (GOVERNANCE default), lifecycle, tagging, quota, a
|
|
public-download policy, SSE-S3 encryption, a webhook notification target, and a
|
|
replication rule** (which also seeds a bucket-targets blob), plus inline /
|
|
versioned / multipart objects and a delete marker.
|
|
|
|
- `bucket_metadata_full.xlmeta.hex` — the `.minio.sys/buckets/interop/.metadata.bin`
|
|
object (xl.meta wrapper + inline `.metadata.bin` blob).
|
|
- `bucket_metadata.blob.hex` — the raw `.metadata.bin` object body (4-byte
|
|
`format|version` header + msgpack), carved from the object above.
|
|
|
|
Unencrypted object `xl.meta` fixtures (clean plaintext sizes) live under
|
|
`crates/filemeta/tests/fixtures/minio/`.
|
|
|
|
These prove RustFS reads and migrates MinIO-written metadata without loss.
|
|
Not captured here (tooling/scope): CORS, public-access-block, and bucket ACL
|
|
(the SNSD test binary + `mc` did not expose CORS; bucket-targets credentials are
|
|
stored KMS-encrypted and are a documented partial).
|