mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-06 13:27:43 +00:00
55e3a1f7e0
Avoid setting AuditSystemState::Starting when target list is empty. Now checks target availability before state transition, keeping the system in Stopped state if no enabled targets are found. - Check targets.is_empty() before setting Starting state - Return early with Ok(()) when no targets exist - Maintain consistent state machine behavior - Prevent transient "Starting" state with no actual targets Resolves issue where audit system would incorrectly enter Starting state even when configuration contained no enabled targets.
295 lines
12 KiB
TOML
295 lines
12 KiB
TOML
# Copyright 2024 RustFS Team
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
[workspace]
|
|
members = [
|
|
"rustfs", # Core file system implementation
|
|
"crates/appauth", # Application authentication and authorization
|
|
"crates/audit", # Audit target management system with multi-target fan-out
|
|
"crates/common", # Shared utilities and data structures
|
|
"crates/config", # Configuration management
|
|
"crates/crypto", # Cryptography and security features
|
|
"crates/ecstore", # Erasure coding storage implementation
|
|
"crates/e2e_test", # End-to-end test suite
|
|
"crates/filemeta", # File metadata management
|
|
"crates/iam", # Identity and Access Management
|
|
"crates/lock", # Distributed locking implementation
|
|
"crates/madmin", # Management dashboard and admin API interface
|
|
"crates/notify", # Notification system for events
|
|
"crates/obs", # Observability utilities
|
|
"crates/policy", # Policy management
|
|
"crates/protos", # Protocol buffer definitions
|
|
"crates/rio", # Rust I/O utilities and abstractions
|
|
"crates/targets", # Target-specific configurations and utilities
|
|
"crates/s3select-api", # S3 Select API interface
|
|
"crates/s3select-query", # S3 Select query engine
|
|
"crates/signer", # client signer
|
|
"crates/checksums", # client checksums
|
|
"crates/utils", # Utility functions and helpers
|
|
"crates/workers", # Worker thread pools and task scheduling
|
|
"crates/zip", # ZIP file handling and compression
|
|
"crates/ahm", # Asynchronous Hash Map for concurrent data structures
|
|
"crates/mcp", # MCP server for S3 operations
|
|
"crates/kms", # Key Management Service
|
|
]
|
|
resolver = "2"
|
|
|
|
[workspace.package]
|
|
edition = "2024"
|
|
license = "Apache-2.0"
|
|
repository = "https://github.com/rustfs/rustfs"
|
|
rust-version = "1.85"
|
|
version = "0.0.5"
|
|
homepage = "https://rustfs.com"
|
|
description = "RustFS is a high-performance distributed object storage software built using Rust, one of the most popular languages worldwide. "
|
|
keywords = ["RustFS", "Minio", "object-storage", "filesystem", "s3"]
|
|
categories = ["web-programming", "development-tools", "filesystem", "network-programming"]
|
|
|
|
[workspace.lints.rust]
|
|
unsafe_code = "deny"
|
|
|
|
[workspace.lints.clippy]
|
|
all = "warn"
|
|
|
|
[workspace.dependencies]
|
|
# RustFS Internal Crates
|
|
rustfs = { path = "./rustfs", version = "0.0.5" }
|
|
rustfs-ahm = { path = "crates/ahm", version = "0.0.5" }
|
|
rustfs-appauth = { path = "crates/appauth", version = "0.0.5" }
|
|
rustfs-audit = { path = "crates/audit", version = "0.0.5" }
|
|
rustfs-checksums = { path = "crates/checksums", version = "0.0.5" }
|
|
rustfs-common = { path = "crates/common", version = "0.0.5" }
|
|
rustfs-config = { path = "./crates/config", version = "0.0.5" }
|
|
rustfs-crypto = { path = "crates/crypto", version = "0.0.5" }
|
|
rustfs-ecstore = { path = "crates/ecstore", version = "0.0.5" }
|
|
rustfs-filemeta = { path = "crates/filemeta", version = "0.0.5" }
|
|
rustfs-iam = { path = "crates/iam", version = "0.0.5" }
|
|
rustfs-kms = { path = "crates/kms", version = "0.0.5" }
|
|
rustfs-lock = { path = "crates/lock", version = "0.0.5" }
|
|
rustfs-madmin = { path = "crates/madmin", version = "0.0.5" }
|
|
rustfs-mcp = { path = "crates/mcp", version = "0.0.5" }
|
|
rustfs-notify = { path = "crates/notify", version = "0.0.5" }
|
|
rustfs-obs = { path = "crates/obs", version = "0.0.5" }
|
|
rustfs-policy = { path = "crates/policy", version = "0.0.5" }
|
|
rustfs-protos = { path = "crates/protos", version = "0.0.5" }
|
|
rustfs-rio = { path = "crates/rio", version = "0.0.5" }
|
|
rustfs-s3select-api = { path = "crates/s3select-api", version = "0.0.5" }
|
|
rustfs-s3select-query = { path = "crates/s3select-query", version = "0.0.5" }
|
|
rustfs-signer = { path = "crates/signer", version = "0.0.5" }
|
|
rustfs-targets = { path = "crates/targets", version = "0.0.5" }
|
|
rustfs-utils = { path = "crates/utils", version = "0.0.5" }
|
|
rustfs-workers = { path = "crates/workers", version = "0.0.5" }
|
|
rustfs-zip = { path = "./crates/zip", version = "0.0.5" }
|
|
|
|
# Async Runtime and Networking
|
|
async-channel = "2.5.0"
|
|
async-compression = { version = "0.4.19" }
|
|
async-recursion = "1.1.1"
|
|
async-trait = "0.1.89"
|
|
axum = "0.8.6"
|
|
axum-extra = "0.12.1"
|
|
axum-server = { version = "0.7.2", features = ["tls-rustls-no-provider"], default-features = false }
|
|
futures = "0.3.31"
|
|
futures-core = "0.3.31"
|
|
futures-util = "0.3.31"
|
|
hyper = { version = "1.7.0", features = ["http2", "http1", "server"] }
|
|
hyper-rustls = { version = "0.27.7", default-features = false, features = ["native-tokio", "http1", "tls12", "logging", "http2", "ring", "webpki-roots"] }
|
|
hyper-util = { version = "0.1.17", features = ["tokio", "server-auto", "server-graceful"] }
|
|
http = "1.3.1"
|
|
http-body = "1.0.1"
|
|
reqwest = { version = "0.12.24", default-features = false, features = ["rustls-tls-webpki-roots", "charset", "http2", "system-proxy", "stream", "json", "blocking"] }
|
|
socket2 = "0.6.1"
|
|
tokio = { version = "1.48.0", features = ["fs", "rt-multi-thread"] }
|
|
tokio-rustls = { version = "0.26.4", default-features = false, features = ["logging", "tls12", "ring"] }
|
|
tokio-stream = { version = "0.1.17" }
|
|
tokio-test = "0.4.4"
|
|
tokio-util = { version = "0.7.17", features = ["io", "compat"] }
|
|
tonic = { version = "0.14.2", features = ["gzip"] }
|
|
tonic-prost = { version = "0.14.2" }
|
|
tonic-prost-build = { version = "0.14.2" }
|
|
tower = { version = "0.5.2", features = ["timeout"] }
|
|
tower-http = { version = "0.6.6", features = ["cors"] }
|
|
|
|
# Serialization and Data Formats
|
|
bytes = { version = "1.10.1", features = ["serde"] }
|
|
bytesize = "2.2.0"
|
|
byteorder = "1.5.0"
|
|
flatbuffers = "25.9.23"
|
|
form_urlencoded = "1.2.2"
|
|
prost = "0.14.1"
|
|
quick-xml = "0.38.4"
|
|
rmcp = { version = "0.8.5" }
|
|
rmp = { version = "0.8.14" }
|
|
rmp-serde = { version = "1.3.0" }
|
|
serde = { version = "1.0.228", features = ["derive"] }
|
|
serde_json = { version = "1.0.145", features = ["raw_value"] }
|
|
serde_urlencoded = "0.7.1"
|
|
schemars = "1.1.0"
|
|
|
|
# Cryptography and Security
|
|
aes-gcm = { version = "0.11.0-rc.2", features = ["rand_core"] }
|
|
argon2 = { version = "0.6.0-rc.2", features = ["std"] }
|
|
blake3 = { version = "1.8.2" }
|
|
chacha20poly1305 = { version = "0.11.0-rc.2" }
|
|
crc-fast = "1.6.0"
|
|
crc32c = "0.6.8"
|
|
crc32fast = "1.5.0"
|
|
crc64fast-nvme = "1.2.0"
|
|
hmac = { version = "0.13.0-rc.3" }
|
|
jsonwebtoken = { version = "10.2.0", features = ["rust_crypto"] }
|
|
pbkdf2 = "0.13.0-rc.2"
|
|
rsa = { version = "0.10.0-rc.10" }
|
|
rustls = { version = "0.23.35", features = ["ring", "logging", "std", "tls12"], default-features = false }
|
|
rustls-pemfile = "2.2.0"
|
|
rustls-pki-types = "1.13.0"
|
|
sha1 = "0.11.0-rc.3"
|
|
sha2 = "0.11.0-rc.3"
|
|
zeroize = { version = "1.8.2", features = ["derive"] }
|
|
|
|
# Time and Date
|
|
chrono = { version = "0.4.42", features = ["serde"] }
|
|
humantime = "2.3.0"
|
|
time = { version = "0.3.44", features = ["std", "parsing", "formatting", "macros", "serde"] }
|
|
|
|
# Utilities and Tools
|
|
anyhow = "1.0.100"
|
|
arc-swap = "1.7.1"
|
|
astral-tokio-tar = "0.5.6"
|
|
atoi = "2.0.0"
|
|
atomic_enum = "0.3.0"
|
|
aws-config = { version = "1.8.10" }
|
|
aws-credential-types = { version = "1.2.9" }
|
|
aws-sdk-s3 = { version = "1.112.0", default-features = false, features = ["sigv4a", "rustls", "rt-tokio"] }
|
|
aws-smithy-types = { version = "1.3.4" }
|
|
base64 = "0.22.1"
|
|
base64-simd = "0.8.0"
|
|
brotli = "8.0.2"
|
|
cfg-if = "1.0.4"
|
|
clap = { version = "4.5.51", features = ["derive", "env"] }
|
|
const-str = { version = "0.7.0", features = ["std", "proc"] }
|
|
convert_case = "0.9.0"
|
|
criterion = { version = "0.7", features = ["html_reports"] }
|
|
crossbeam-queue = "0.3.12"
|
|
datafusion = "50.3.0"
|
|
derive_builder = "0.20.2"
|
|
enumset = "1.1.10"
|
|
faster-hex = "0.10.0"
|
|
flate2 = "1.1.5"
|
|
flexi_logger = { version = "0.31.7", features = ["trc", "dont_minimize_extra_stacks", "compress", "kv", "json"] }
|
|
glob = "0.3.3"
|
|
google-cloud-storage = "1.3.0"
|
|
google-cloud-auth = "1.1.1"
|
|
hashbrown = { version = "0.16.0", features = ["serde", "rayon"] }
|
|
heed = { version = "0.22.0" }
|
|
hex-simd = "0.8.0"
|
|
highway = { version = "1.3.0" }
|
|
ipnetwork = { version = "0.21.1", features = ["serde"] }
|
|
lazy_static = "1.5.0"
|
|
libc = "0.2.177"
|
|
libsystemd = "0.7.2"
|
|
local-ip-address = "0.6.5"
|
|
lz4 = "1.28.1"
|
|
matchit = "0.9.0"
|
|
md-5 = "0.11.0-rc.3"
|
|
md5 = "0.8.0"
|
|
metrics = "0.24.2"
|
|
mime_guess = "2.0.5"
|
|
moka = { version = "0.12.11", features = ["future"] }
|
|
netif = "0.1.6"
|
|
nix = { version = "0.30.1", features = ["fs"] }
|
|
nu-ansi-term = "0.50.3"
|
|
num_cpus = { version = "1.17.0" }
|
|
nvml-wrapper = "0.11.0"
|
|
object_store = "0.12.4"
|
|
once_cell = "1.21.3"
|
|
parking_lot = "0.12.5"
|
|
path-absolutize = "3.1.1"
|
|
path-clean = "1.0.1"
|
|
pin-project-lite = "0.2.16"
|
|
pretty_assertions = "1.4.1"
|
|
rand = { version = "0.10.0-rc.5", features = ["serde"] }
|
|
rayon = "1.11.0"
|
|
reed-solomon-simd = { version = "3.1.0" }
|
|
regex = { version = "1.12.2" }
|
|
rumqttc = { version = "0.25.0" }
|
|
rust-embed = { version = "8.9.0" }
|
|
rustc-hash = { version = "2.1.1" }
|
|
s3s = { git = "https://github.com/s3s-project/s3s.git", rev = "1ab064b", version = "0.12.0-rc.3", features = ["minio"] }
|
|
serial_test = "3.2.0"
|
|
shadow-rs = { version = "1.4.0", default-features = false }
|
|
siphasher = "1.0.1"
|
|
smallvec = { version = "1.15.1", features = ["serde"] }
|
|
smartstring = "1.0.1"
|
|
snafu = "0.8.9"
|
|
snap = "1.1.1"
|
|
starshard = { version = "0.5.0", features = ["rayon", "async", "serde"] }
|
|
strum = { version = "0.27.2", features = ["derive"] }
|
|
sysctl = "0.7.1"
|
|
sysinfo = "0.37.2"
|
|
temp-env = "0.3.6"
|
|
tempfile = "3.23.0"
|
|
test-case = "3.3.1"
|
|
thiserror = "2.0.17"
|
|
tracing = { version = "0.1.41" }
|
|
tracing-appender = "0.2.3"
|
|
tracing-error = "0.2.1"
|
|
tracing-opentelemetry = "0.32.0"
|
|
tracing-subscriber = { version = "0.3.20", features = ["env-filter", "time"] }
|
|
transform-stream = "0.3.1"
|
|
url = "2.5.7"
|
|
urlencoding = "2.1.3"
|
|
uuid = { version = "1.18.1", features = ["v4", "fast-rng", "macro-diagnostics"] }
|
|
vaultrs = { version = "0.7.4" }
|
|
walkdir = "2.5.0"
|
|
wildmatch = { version = "2.6.1", features = ["serde"] }
|
|
winapi = { version = "0.3.9" }
|
|
xxhash-rust = { version = "0.8.15", features = ["xxh64", "xxh3"] }
|
|
zip = "6.0.0"
|
|
zstd = "0.13.3"
|
|
|
|
# Observability and Metrics
|
|
opentelemetry = { version = "0.31.0" }
|
|
opentelemetry-appender-tracing = { version = "0.31.1", features = ["experimental_use_tracing_span_context", "experimental_metadata_attributes", "spec_unstable_logs_enabled"] }
|
|
opentelemetry-otlp = { version = "0.31.0", features = ["http-proto", "zstd-http"] }
|
|
opentelemetry_sdk = { version = "0.31.0" }
|
|
opentelemetry-semantic-conventions = { version = "0.31.0", features = ["semconv_experimental"] }
|
|
opentelemetry-stdout = { version = "0.31.0" }
|
|
|
|
# Performance Analysis and Memory Profiling
|
|
# Use tikv-jemallocator as memory allocator and enable performance analysis
|
|
tikv-jemallocator = { version = "0.6", features = ["profiling", "stats", "unprefixed_malloc_on_supported_platforms", "background_threads"] }
|
|
# Used to control and obtain statistics for jemalloc at runtime
|
|
tikv-jemalloc-ctl = { version = "0.6", features = ["use_std", "stats", "profiling"] }
|
|
# Used to generate pprof-compatible memory profiling data and support symbolization and flame graphs
|
|
jemalloc_pprof = { version = "0.8.1", features = ["symbolize", "flamegraph"] }
|
|
# Used to generate CPU performance analysis data and flame diagrams
|
|
pprof = { version = "0.15.0", features = ["flamegraph", "protobuf-codec"] }
|
|
mimalloc = "0.1"
|
|
|
|
|
|
[workspace.metadata.cargo-shear]
|
|
ignored = ["rustfs", "rustfs-mcp", "tokio-test"]
|
|
|
|
[profile.release]
|
|
opt-level = 3
|
|
|
|
[profile.production]
|
|
inherits = "release"
|
|
lto = "fat"
|
|
codegen-units = 1
|
|
|
|
[profile.profiling]
|
|
inherits = "release"
|
|
debug = true
|