mirror of
https://github.com/rustfs/rustfs.git
synced 2026-01-17 01:30:33 +00:00
* Initial plan * feat: add concurrency-aware buffer sizing and hot object caching for GetObject - Implement adaptive buffer sizing based on concurrent request load - Add per-request tracking with automatic cleanup using RAII guards - Implement hot object cache (LRU) for frequently accessed small files (<= 10MB) - Add disk I/O semaphore to prevent saturation under extreme load - Integrate concurrency module into GetObject implementation - Buffer sizes now adapt: low concurrency uses large buffers for throughput, high concurrency uses smaller buffers for fairness and memory efficiency - Add comprehensive metrics collection for monitoring performance Co-authored-by: houseme <4829346+houseme@users.noreply.github.com> * docs: add comprehensive documentation and tests for concurrent GetObject optimization - Add detailed technical documentation explaining the solution - Document root cause analysis and solution architecture - Include performance expectations and testing recommendations - Add integration tests for concurrency tracking and buffer sizing - Add cache behavior tests - Include benchmark tests for concurrent request handling Co-authored-by: houseme <4829346+houseme@users.noreply.github.com> * fix: address code review issues in concurrency module - Fix race condition in cache size tracking by using consistent atomic operations within lock - Correct buffer sizing logic: 1-2 requests use 100%, 3-4 use 75%, 5-8 use 50%, >8 use 40% - Improve error message for semaphore acquire failure - Document limitation of streaming cache implementation (not yet implemented) - Add TODO for proper streaming cache with suggested approaches - Update tests to match corrected buffer sizing thresholds Co-authored-by: houseme <4829346+houseme@users.noreply.github.com> * docs: add comprehensive implementation summary for concurrent GetObject optimization - Executive summary of problem and solution - Detailed architecture documentation for each optimization - Integration points and code examples - Complete testing strategy and performance validation steps - Monitoring and observability guidelines with Prometheus queries - Deployment considerations and rollout strategy - Future enhancement roadmap - Success criteria and quantitative metrics Co-authored-by: houseme <4829346+houseme@users.noreply.github.com> * fix * fix * refactor: optimize cache with lru 0.16.2 read-first pattern and add advanced features - Implement optimized read-first cache access using peek() to reduce write lock contention - Add batch cache operations: get_cached_batch() for efficient multi-object retrieval - Add cache utility methods: is_cached(), remove_cached(), get_hot_keys() - Implement warm_cache() for pre-populating cache on startup - Add get_advanced_buffer_size() with file size and sequential read optimization - Enhance test suite with 8 new comprehensive tests covering: - Batch operations and cache warming - Hot keys tracking and analysis - Cache removal and LRU behavior verification - Concurrent cache access performance - Advanced buffer sizing strategies - Improve documentation and code comments in English throughout Co-authored-by: houseme <4829346+houseme@users.noreply.github.com> * docs: add final comprehensive optimization summary - Complete technical documentation of all optimizations - Detailed performance analysis and metrics - Production deployment guide with examples - Comprehensive API reference and usage patterns - Migration guide and future enhancement roadmap - All documentation in professional English Co-authored-by: houseme <4829346+houseme@users.noreply.github.com> * fix * fix * add moka crate for cache * feat: replace LRU with Moka cache and add comprehensive metrics - Replace lru crate with moka 0.12.11 for superior concurrent performance - Implement lock-free cache with automatic TTL/TTI expiration - Add size-based eviction using Moka's weigher function - Integrate comprehensive metrics collection throughout GetObject flow: * Cache hit/miss tracking with per-key access counts * Request concurrency gauges * Disk permit wait time histograms * Total request duration tracking * Response size and buffer size histograms - Deep integration with ecfs.rs GetObject operation - Add hit rate calculation method - Enhanced CacheStats with hit/miss counters - Lock-free concurrent reads for better scalability Moka advantages over LRU: - True lock-free concurrent access - Built-in TTL and TTI support - Automatic size-based eviction - Better performance under high concurrency - Native async support Co-authored-by: houseme <4829346+houseme@users.noreply.github.com> * docs: add comprehensive Moka cache migration and metrics documentation - Complete technical documentation of LRU to Moka migration - Detailed performance comparison and benchmarks - Comprehensive metrics catalog with 15+ Prometheus metrics - Prometheus query examples for monitoring - Dashboard and alerting recommendations - Migration guide with code examples - Troubleshooting guide for common issues - Future enhancement roadmap Co-authored-by: houseme <4829346+houseme@users.noreply.github.com> * fix * fix * refactor: update tests for Moka cache implementation - Completely refactor test suite to align with Moka-based concurrency.rs - Add Clone derive to ConcurrencyManager for test convenience - Update all tests to handle Moka's async behavior with proper delays - Add new tests: * test_cache_hit_rate - validate hit rate calculation * test_ttl_expiration - verify TTL configuration * test_is_cached_no_side_effects - ensure contains doesn't affect LRU * bench_concurrent_cache_performance - benchmark concurrent access - Updated existing tests: * test_moka_cache_operations - renamed and updated for Moka API * test_moka_cache_eviction - validate automatic eviction * test_hot_keys_tracking - improved assertions for sorted results * test_concurrent_cache_access - validate lock-free performance - All tests now include appropriate sleep delays for Moka's async processing - Enhanced documentation and assertions for better test clarity - Total: 18 comprehensive integration tests Co-authored-by: houseme <4829346+houseme@users.noreply.github.com> * docs: add comprehensive Moka test suite documentation - Complete test suite documentation for all 18 tests - Detailed test patterns and best practices for Moka - Debugging guide for common test failures - Performance expectations and CI integration - 100% API coverage validation - Future enhancement roadmap Co-authored-by: houseme <4829346+houseme@users.noreply.github.com> * fix * fmt * docs: enhance code comments and test documentation throughout - Significantly improve module-level documentation in concurrency.rs - Add detailed explanations of performance characteristics and expected improvements - Document the solution to issue #911 with before/after metrics - Enhance constant documentation with purpose and impact explanations - Add comprehensive RAII guard documentation with thread safety notes - Improve test documentation with detailed test strategy and rationale - Add Moka-specific test patterns and timing guidance - Include performance expectations for each test category - Document why each test matters for solving the original issue - All documentation written in professional English - Follow Rust documentation best practices with examples Co-authored-by: houseme <4829346+houseme@users.noreply.github.com> * remove lru crate * upgrade version * fix: resolve test errors by correcting module structure and test assertions - Fix test import paths to use crate:: instead of rustfs:: (binary-only crate) - Keep test file in src/storage/ instead of tests/ (no lib.rs exists) - Add #[cfg(test)] guard to mod declaration in storage/mod.rs - Fix Arc type annotations for Moka's ConcurrencyManager in concurrent tests - Correct test_buffer_size_bounds assertions to match actual implementation: * Minimum buffer is 32KB for files <100KB, 64KB otherwise * Maximum buffer respects base_buffer_size when concurrency is low * Buffer sizing doesn't cap at file size, only at min/max constraints - All 17 integration tests now pass successfully Co-authored-by: houseme <4829346+houseme@users.noreply.github.com> * fix: modify `TimeoutLayer::new` to `TimeoutLayer::with_status_code` and improve docker health check * fix * feat: implement cache writeback for small objects in GetObject - Add cache writeback logic for objects meeting caching criteria: * No range/part request (full object retrieval) * Object size known and <= 10MB (max_object_size threshold) * Not encrypted (SSE-C or managed encryption) - Read eligible objects into memory and cache via background task - Serve response from in-memory data for immediate client response - Add metrics counter for cache writeback operations - Add 3 new tests for cache writeback functionality: * test_cache_writeback_flow - validates round-trip caching * test_cache_writeback_size_limit - ensures large objects aren't cached * test_cache_writeback_concurrent - validates thread-safe concurrent writes - Update test suite documentation (now 20 comprehensive tests) Co-authored-by: houseme <4829346+houseme@users.noreply.github.com> * improve code for const * cargo clippy * feat: add cache enable/disable configuration via environment variable - Add is_cache_enabled() method to ConcurrencyManager - Read RUSTFS_OBJECT_CACHE_ENABLE env var (default: false) at startup - Update ecfs.rs to check is_cache_enabled() before cache lookup and writeback - Cache lookup and writeback now respect the enable flag - Add test_cache_enable_configuration test - Constants already exist in rustfs_config: * ENV_OBJECT_CACHE_ENABLE = "RUSTFS_OBJECT_CACHE_ENABLE" * DEFAULT_OBJECT_CACHE_ENABLE = false - Total: 21 comprehensive tests passing Co-authored-by: houseme <4829346+houseme@users.noreply.github.com> * fix * fmt * fix * fix * feat: implement comprehensive CachedGetObject response cache with metadata - Add CachedGetObject struct with full response metadata fields: * body, content_length, content_type, e_tag, last_modified * expires, cache_control, content_disposition, content_encoding * storage_class, version_id, delete_marker, tag_count, etc. - Add dual cache architecture in HotObjectCache: * Legacy simple byte cache for backward compatibility * New response cache for complete GetObject responses - Add ConcurrencyManager methods for response caching: * get_cached_object() - retrieve cached response with metadata * put_cached_object() - store complete response * invalidate_cache() - invalidate on write operations * invalidate_cache_versioned() - invalidate both version and latest * make_cache_key() - generate cache keys with version support * max_object_size() - get cache threshold - Add builder pattern for CachedGetObject construction - Add 6 new tests for response cache functionality (27 total): * test_cached_get_object_basic - basic operations * test_cached_get_object_versioned - version key handling * test_cache_invalidation - write operation invalidation * test_cache_invalidation_versioned - versioned invalidation * test_cached_get_object_size_limit - size enforcement * test_max_object_size - threshold accessor All 27 tests pass successfully. Co-authored-by: houseme <4829346+houseme@users.noreply.github.com> * feat: integrate CachedGetObject cache in ecfs.rs with full metadata and cache invalidation Integration of CachedGetObject response cache in ecfs.rs: 1. get_object: Cache lookup uses get_cached_object() with full metadata - Returns complete response with e_tag, last_modified, content_type, etc. - Parses last_modified from RFC3339 string - Supports versioned cache keys via make_cache_key() 2. get_object: Cache writeback uses put_cached_object() with metadata - Stores content_type, e_tag, last_modified in CachedGetObject - Background writeback via tokio::spawn() 3. Cache invalidation added to write operations: - put_object: invalidate_cache_versioned() after store.put_object() - put_object_extract: invalidate_cache_versioned() after each file extraction - copy_object: invalidate_cache_versioned() after store.copy_object() - delete_object: invalidate_cache_versioned() after store.delete_object() - delete_objects: invalidate_cache_versioned() for each deleted object - complete_multipart_upload: invalidate_cache_versioned() after completion 4. Fixed test_adaptive_buffer_sizing to be more robust with parallel tests All 27 tests pass. Co-authored-by: houseme <4829346+houseme@users.noreply.github.com> * fix: add error logging for time parsing in cache lookup and writeback - Add warning log when RFC3339 parsing fails in cache lookup - Add warning log when time formatting fails in cache writeback - Improves debugging for cache-related issues Co-authored-by: houseme <4829346+houseme@users.noreply.github.com> * fix * fix * upgrade version * fmt * add http: 4138 and add max_object_size key * fix * fix * fix * modify metrics key * add * upgrade crates version and improve docker observability * feat: implement adaptive I/O strategy based on disk permit wait time Implements adaptive I/O strategy for GetObject operations based on disk permit wait times, as requested in issue #911. Key changes: 1. New types in concurrency.rs: - IoLoadLevel enum: Low (<10ms), Medium (10-50ms), High (50-200ms), Critical (>200ms) - IoStrategy struct: contains optimized I/O parameters based on load level - IoLoadMetrics: rolling window metrics for load tracking 2. New ConcurrencyManager methods: - calculate_io_strategy(): calculates adaptive strategy from permit wait duration - record_permit_wait(): records observation for load tracking - smoothed_load_level(): returns averaged load level for stability - io_load_stats(): returns (avg_wait, p95_wait, max_wait, count) for monitoring - adaptive_buffer_size(): convenience method for buffer sizing 3. Integration in ecfs.rs get_object: - Calculate IoStrategy after acquiring disk permit - Use strategy buffer_size instead of static sizing - Consider strategy.cache_writeback_enabled in cache decision - Record new metrics: io.load.level gauge, io.buffer.multiplier gauge, io.strategy.selected counter by load level 4. New tests (4 added, 31 total): - test_io_load_level_classification: validates load level thresholds - test_io_strategy_buffer_sizing: validates buffer multipliers - test_calculate_io_strategy: validates manager strategy calculation - test_io_load_stats: validates stats tracking All 31 tests pass. Clippy clean. Formatted. Co-authored-by: houseme <4829346+houseme@users.noreply.github.com> * fix * fix * docs: add comprehensive architecture design and fix cache hit event notification 1. Added CONCURRENCY_ARCHITECTURE.md with complete design documentation: - Executive summary and problem statement - Architecture overview with request flow diagram - Detailed module analysis for concurrency.rs and ecfs.rs - Critical analysis of helper.complete() for cache hits - Adaptive I/O strategy design with algorithm - Cache architecture with CachedGetObject structure - Metrics and monitoring with Prometheus queries - Performance characteristics and future enhancements 2. Fixed critical issue: Cache hit path now calls helper.complete() - S3 bucket notifications (s3:GetObject events) now trigger for cache hits - Event-driven workflows (Lambda, SNS) work correctly for all object access - Maintains audit trail for both cache hits and misses All 31 tests pass. Co-authored-by: houseme <4829346+houseme@users.noreply.github.com> * fix: set object info and version_id on helper before complete() for cache hits When serving from cache, properly configure the OperationHelper before calling complete() to ensure S3 bucket notifications include complete object metadata: 1. Build ObjectInfo from cached metadata: - bucket, name, size, actual_size - etag, mod_time, version_id, delete_marker - storage_class, content_type, content_encoding - user_metadata (user_defined) 2. Set helper.object(event_info).version_id(version_id_str) before complete() 3. Updated CONCURRENCY_ARCHITECTURE.md with: - Complete code example for cache hit event notification - Explanation of why ObjectInfo is required - Documentation of version_id handling This ensures: - Lambda triggers receive proper object metadata for cache hits - SNS/SQS notifications include complete information - Audit logs contain accurate object details - Version-specific event routing works correctly All 31 tests pass. Co-authored-by: houseme <4829346+houseme@users.noreply.github.com> * fix * improve code * fmt --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: houseme <4829346+houseme@users.noreply.github.com> Co-authored-by: houseme <housemecn@gmail.com>
291 lines
12 KiB
TOML
291 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.7"
|
|
axum-extra = "0.12.2"
|
|
axum-server = { version = "0.7.3", 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.8.1", 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.18", features = ["tokio", "server-auto", "server-graceful"] }
|
|
http = "1.4.0"
|
|
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.7", features = ["cors"] }
|
|
|
|
# Serialization and Data Formats
|
|
bytes = { version = "1.11.0", features = ["serde"] }
|
|
bytesize = "2.3.1"
|
|
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.9.1" }
|
|
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", features = ["rayon", "mmap"] }
|
|
chacha20poly1305 = { version = "0.11.0-rc.2" }
|
|
crc-fast = "1.6.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.1"
|
|
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.11" }
|
|
aws-credential-types = { version = "1.2.10" }
|
|
aws-sdk-s3 = { version = "1.115.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.53", features = ["derive", "env"] }
|
|
const-str = { version = "0.7.0", features = ["std", "proc"] }
|
|
convert_case = "0.10.0"
|
|
criterion = { version = "0.7", features = ["html_reports"] }
|
|
crossbeam-queue = "0.3.12"
|
|
datafusion = "51.0.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.4.0"
|
|
google-cloud-auth = "1.2.0"
|
|
hashbrown = { version = "0.16.1", 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"
|
|
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"
|
|
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.1" }
|
|
rust-embed = { version = "8.9.0" }
|
|
rustc-hash = { version = "2.1.1" }
|
|
s3s = { version = "0.12.0-rc.4", 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.6.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.43" }
|
|
tracing-appender = "0.2.4"
|
|
tracing-error = "0.2.1"
|
|
tracing-opentelemetry = "0.32.0"
|
|
tracing-subscriber = { version = "0.3.22", 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
|
|
metrics = "0.24.3"
|
|
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 = ["gzip-http", "reqwest-rustls"] }
|
|
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
|