Files
rustfs/crates/zip
houseme 2247823200 fix(runtime): remove tokio io-uring feature and add regression guard (#4364)
Drop the [target.'cfg(target_os = "linux")'.dependencies] tokio
"io-uring" feature from 6 crates and the rustfs binary. Because
.cargo/config.toml enables --cfg tokio_unstable globally, this feature
switched every Linux build's file I/O onto tokio's io_uring runtime
backend. Restricted Linux environments (Docker default seccomp, gVisor,
proot, old kernels) reject io_uring_setup with EACCES/ENOSYS, which
tokio surfaced as PermissionDenied and RustFS reported as
DiskAccessDenied at startup.

Add scripts/check_no_tokio_io_uring.sh so the feature cannot silently
return: it fails on any tokio dependency line enabling "io-uring", while
still allowing a future application-level io-uring crate dependency.
Wire it into make pre-commit/pre-pr/dev-check and CI.

Tracking: rustfs/backlog#890 (parent rustfs/backlog#897)

Co-authored-by: heihutu <heihutu@gmail.com>
2026-07-07 17:47:59 +08:00
..

RustFS

RustFS Zip - Archive And Compression Primitives

High-performance compression and archiving for RustFS object storage

CI 📖 Documentation · 🐛 Bug Reports · 💬 Discussions


📖 Overview

RustFS Zip provides archive and compression primitives for the RustFS distributed object storage system. Today it is primarily used by RustFS archive extract flows to:

  • identify archive/compression formats by extension
  • stream tar and tar+compression inputs through async decoders
  • provide small ZIP read/write helpers for local archive workflows

Current Features

  • A clearer type model with:
    • CompressionCodec for stream codecs
    • ArchiveKind for container families
    • ArchiveFormat for concrete archive/container combinations
  • Async stream codecs for gzip, bzip2, zlib, xz, and zstd
  • Tar archive iteration over async readers through read_archive_entries() / extract_tar_entries()
  • Archive guardrails through ArchiveLimits for entry count, entry size, total unpacked size, and path length
  • In-memory compression helpers for payload round-trip workflows
  • Blocking ZIP create/extract helpers for local archive files
  • ZIP helper metadata via ZipEntry, including:
    • compression_method
    • archive_kind
    • format
    • unix_mode
  • ZIP helper options via ZipWriteOptions, including:
    • compression_level
    • create_directory_entries

Compatibility

  • CompressionFormat is retained as a compatibility layer for existing callers
  • New code should prefer ArchiveFormat, ArchiveKind, and CompressionCodec when expressing archive semantics

ZIP Helper Scope

The file-based ZIP helper APIs are best suited for:

  • local archive import/export flows
  • admin-side packaging helpers
  • test fixtures and tooling

They are not intended to be a remote streaming ZIP access engine.

Current Boundaries

  • ZIP is supported via file-based helper APIs, not the tar-family async stream APIs
  • Tar-family stream APIs are intended for tar, tar.gz, tar.bz2, tar.xz, tar.zst, and similar compressed tar flows
  • Default archive guardrails are intentionally conservative and do not replace higher-level RustFS object-path validation
  • This crate does not currently implement a general-purpose parallel archive engine
  • Archive extraction safety policy remains the responsibility of the RustFS caller for object-store flows

📚 Documentation

For comprehensive documentation, examples, and usage guides, please visit the main RustFS repository.

📄 License

This project is licensed under the Apache License 2.0 - see the LICENSE file for details.