mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-19 11:06:17 +00:00
refactor: use relative root compat paths (#3721)
This commit is contained in:
@@ -5,17 +5,16 @@ Status values: `[ ]` not started, `[~]` in progress, `[x]` complete, `[!]` block
|
|||||||
## Current Context
|
## Current Context
|
||||||
|
|
||||||
- Issue: [`rustfs/backlog#660`](https://github.com/rustfs/backlog/issues/660)
|
- Issue: [`rustfs/backlog#660`](https://github.com/rustfs/backlog/issues/660)
|
||||||
- Branch: `overtrue/arch-local-compat-relative-refs`
|
- Branch: `overtrue/arch-root-compat-relative-consumers`
|
||||||
- Baseline: completed `C-011/C-012/C-013/API-055/API-059/API-079/API-080/API-081/API-082/API-083/API-084/API-085/API-086/API-087/API-088/API-089/API-090/API-091/API-092/API-093/API-094/API-095/API-096/API-097/API-098/API-099/API-100/API-101/API-102/API-103/API-104/API-105/API-106/API-107/API-108`.
|
- Baseline: completed `C-011/C-012/C-013/API-055/API-059/API-079/API-080/API-081/API-082/API-083/API-084/API-085/API-086/API-087/API-088/API-089/API-090/API-091/API-092/API-093/API-094/API-095/API-096/API-097/API-098/API-099/API-100/API-101/API-102/API-103/API-104/API-105/API-106/API-107/API-108/API-109`.
|
||||||
- Based on: API-107 slice.
|
- Based on: API-108 slice.
|
||||||
- PR type for this branch: `pure-move`
|
- PR type for this branch: `pure-move`
|
||||||
- Runtime behavior changes: none.
|
- Runtime behavior changes: none.
|
||||||
- Rust code changes: collapse crate-qualified owner `storage_compat` paths in
|
- Rust code changes: collapse crate-qualified root compatibility and storage
|
||||||
RustFS app/admin/storage local compatibility bridge modules into relative
|
owner compatibility consumer paths into relative `super::`/`self::` paths.
|
||||||
`super::storage_compat` paths.
|
- CI/script changes: guard selected RustFS root and storage owner consumers
|
||||||
- CI/script changes: guard RustFS local compatibility bridge modules against
|
against crate-qualified compatibility paths.
|
||||||
crate-qualified owner `storage_compat` self paths.
|
- Docs changes: record the API-109 relative compatibility consumer cleanup.
|
||||||
- Docs changes: record the API-108 local compatibility relative path cleanup.
|
|
||||||
|
|
||||||
## Phase 0 Tasks
|
## Phase 0 Tasks
|
||||||
|
|
||||||
@@ -544,6 +543,21 @@ Status values: `[ ]` not started, `[~]` in progress, `[x]` complete, `[!]` block
|
|||||||
- Verification: RustFS test-target compile coverage, local bridge owner
|
- Verification: RustFS test-target compile coverage, local bridge owner
|
||||||
self-path residual scan, migration and layer guards, formatting, diff
|
self-path residual scan, migration and layer guards, formatting, diff
|
||||||
hygiene, Rust risk scan, pre-commit quality gate, and three-expert review.
|
hygiene, Rust risk scan, pre-commit quality gate, and three-expert review.
|
||||||
|
- [x] `API-109` Collapse root compatibility consumer paths.
|
||||||
|
- Completed slice: replace crate-qualified root compatibility consumers in
|
||||||
|
startup/runtime/table/error/workload modules plus selected storage owner
|
||||||
|
consumers with relative `super::` or `self::` paths.
|
||||||
|
- Acceptance: selected root and storage owner modules no longer point back to
|
||||||
|
local compatibility facades through crate-qualified paths; migration rules
|
||||||
|
reject regressions.
|
||||||
|
- Must preserve: startup notification/storage/background/service behavior,
|
||||||
|
runtime capability snapshots, workload admission wiring, table catalog
|
||||||
|
helpers, root error aliases, storage SSE/access/ECFS helper behavior, and
|
||||||
|
public storage module aliases.
|
||||||
|
- Verification: RustFS test-target compile coverage, root/storage owner
|
||||||
|
compatibility consumer residual scans, migration and layer guards,
|
||||||
|
formatting, diff hygiene, Rust risk scan, pre-commit quality gate, and
|
||||||
|
three-expert review.
|
||||||
- [x] `G-012` Inventory placement and repair invariants.
|
- [x] `G-012` Inventory placement and repair invariants.
|
||||||
- Acceptance:
|
- Acceptance:
|
||||||
[`placement-repair-invariants.md`](placement-repair-invariants.md) records
|
[`placement-repair-invariants.md`](placement-repair-invariants.md) records
|
||||||
@@ -3577,14 +3591,27 @@ Status values: `[ ]` not started, `[~]` in progress, `[x]` complete, `[!]` block
|
|||||||
|
|
||||||
| Expert | Status | Notes |
|
| Expert | Status | Notes |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| Quality/architecture | pass | API-108 keeps local compatibility bridge modules owner-relative by replacing crate-qualified app/admin/storage `storage_compat` paths with scoped `super::` paths. |
|
| Quality/architecture | pass | API-109 keeps selected root and storage owner compatibility consumers owner-relative by replacing crate-qualified compatibility paths with scoped `super::` or `self::` paths. |
|
||||||
| Migration preservation | pass | The new guard rejects crate-qualified owner `storage_compat` self paths in RustFS local bridge modules while preserving existing re-export names. |
|
| Migration preservation | pass | The new guards reject crate-qualified root compatibility and storage owner compatibility consumer paths while preserving the same local facade names and aliases. |
|
||||||
| Testing/verification | pass | Focused compile, local bridge owner self-path residual scan, migration guard, layer guard, formatting, diff hygiene, risk scan, and full pre-commit passed. |
|
| Testing/verification | pass | Focused compile, root/storage owner residual scans, migration guard, layer guard, formatting, diff hygiene, risk scan, and full pre-commit passed. |
|
||||||
|
|
||||||
## Verification Notes
|
## Verification Notes
|
||||||
|
|
||||||
Passed before push:
|
Passed before push:
|
||||||
|
|
||||||
|
- Issue #660 API-109 current slice:
|
||||||
|
- `cargo check -p rustfs --tests`: passed.
|
||||||
|
- `cargo fmt --all`: passed.
|
||||||
|
- `cargo fmt --all --check`: passed.
|
||||||
|
- `git diff --check`: passed.
|
||||||
|
- `bash -n scripts/check_architecture_migration_rules.sh`: passed.
|
||||||
|
- `./scripts/check_architecture_migration_rules.sh`: passed.
|
||||||
|
- `./scripts/check_layer_dependencies.sh`: passed.
|
||||||
|
- Root compatibility consumer residual scan: passed.
|
||||||
|
- Storage owner compatibility consumer residual scan: passed.
|
||||||
|
- Rust risk scan on changed Rust files and guard script: passed.
|
||||||
|
- `make pre-commit`: passed.
|
||||||
|
|
||||||
- Issue #660 API-108 current slice:
|
- Issue #660 API-108 current slice:
|
||||||
- `cargo check -p rustfs --tests`: passed.
|
- `cargo check -p rustfs --tests`: passed.
|
||||||
- `cargo fmt --all`: passed.
|
- `cargo fmt --all`: passed.
|
||||||
|
|||||||
+1
-1
@@ -12,7 +12,7 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
use crate::error_storage_compat::{QuotaError, StorageError};
|
use super::error_storage_compat::{QuotaError, StorageError};
|
||||||
use rustfs_storage_api::HTTPRangeError;
|
use rustfs_storage_api::HTTPRangeError;
|
||||||
use s3s::{S3Error, S3ErrorCode};
|
use s3s::{S3Error, S3ErrorCode};
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -12,8 +12,8 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
|
use super::startup_storage_compat::{get_global_region, get_notification_config};
|
||||||
use crate::server::ShutdownHandle;
|
use crate::server::ShutdownHandle;
|
||||||
use crate::startup_storage_compat::{get_global_region, get_notification_config};
|
|
||||||
use crate::storage::{process_lambda_configurations, process_queue_configurations, process_topic_configurations};
|
use crate::storage::{process_lambda_configurations, process_queue_configurations, process_topic_configurations};
|
||||||
use crate::{admin, config, version};
|
use crate::{admin, config, version};
|
||||||
use rustfs_config::{
|
use rustfs_config::{
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ use rustfs_storage_api::{
|
|||||||
UserspaceProfilingCapability,
|
UserspaceProfilingCapability,
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::runtime_capabilities_storage_compat::{EndpointServerPools, topology_snapshot_from_endpoint_pools_with_capabilities};
|
use super::runtime_capabilities_storage_compat::{EndpointServerPools, topology_snapshot_from_endpoint_pools_with_capabilities};
|
||||||
|
|
||||||
const NOT_WIRED_INTO_RUNTIME: &str = "not wired into runtime";
|
const NOT_WIRED_INTO_RUNTIME: &str = "not wired into runtime";
|
||||||
const STORAGE_MEDIA_NOT_REPORTED: &str = "storage media not reported by endpoints";
|
const STORAGE_MEDIA_NOT_REPORTED: &str = "storage media not reported by endpoints";
|
||||||
@@ -131,8 +131,8 @@ fn cgroup_memory_status() -> CapabilityStatus {
|
|||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
|
use super::super::runtime_capabilities_storage_compat::{Endpoint, Endpoints, PoolEndpoints};
|
||||||
use super::*;
|
use super::*;
|
||||||
use crate::runtime_capabilities_storage_compat::{Endpoint, Endpoints, PoolEndpoints};
|
|
||||||
use rustfs_storage_api::{CapabilityState, ObservabilitySnapshotProvider, TopologySnapshotProvider};
|
use rustfs_storage_api::{CapabilityState, ObservabilitySnapshotProvider, TopologySnapshotProvider};
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
use crate::startup_storage_compat::ECStore;
|
use super::startup_storage_compat::ECStore;
|
||||||
use rustfs_heal::{create_ahm_services_cancel_token, heal::storage::ECStoreHealStorage, init_heal_manager};
|
use rustfs_heal::{create_ahm_services_cancel_token, heal::storage::ECStoreHealStorage, init_heal_manager};
|
||||||
use rustfs_utils::get_env_bool_with_aliases;
|
use rustfs_utils::get_env_bool_with_aliases;
|
||||||
use std::{io::Result, sync::Arc};
|
use std::{io::Result, sync::Arc};
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
use crate::startup_storage_compat::{
|
use super::startup_storage_compat::{
|
||||||
ECStore, get_global_replication_pool, init_bucket_metadata_sys, try_migrate_bucket_metadata, try_migrate_iam_config,
|
ECStore, get_global_replication_pool, init_bucket_metadata_sys, try_migrate_bucket_metadata, try_migrate_iam_config,
|
||||||
};
|
};
|
||||||
use rustfs_storage_api::{BucketOperations, BucketOptions};
|
use rustfs_storage_api::{BucketOperations, BucketOptions};
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
use crate::startup_storage_compat::EndpointServerPools;
|
use super::startup_storage_compat::EndpointServerPools;
|
||||||
use rustfs_config::{
|
use rustfs_config::{
|
||||||
DEFAULT_RUSTFS_UNSUPPORTED_FS_POLICY, ENV_RUSTFS_UNSUPPORTED_FS_POLICY, RUSTFS_UNSUPPORTED_FS_POLICY_FAIL,
|
DEFAULT_RUSTFS_UNSUPPORTED_FS_POLICY, ENV_RUSTFS_UNSUPPORTED_FS_POLICY, RUSTFS_UNSUPPORTED_FS_POLICY_FAIL,
|
||||||
RUSTFS_UNSUPPORTED_FS_POLICY_WARN,
|
RUSTFS_UNSUPPORTED_FS_POLICY_WARN,
|
||||||
|
|||||||
@@ -12,9 +12,9 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
|
use super::startup_storage_compat::ECStore;
|
||||||
use crate::app::context::AppContext;
|
use crate::app::context::AppContext;
|
||||||
use crate::server::{ServiceStateManager, publish_ready_when_runtime_ready};
|
use crate::server::{ServiceStateManager, publish_ready_when_runtime_ready};
|
||||||
use crate::startup_storage_compat::ECStore;
|
|
||||||
use rustfs_common::{GlobalReadiness, SystemStage};
|
use rustfs_common::{GlobalReadiness, SystemStage};
|
||||||
use rustfs_iam::init_iam_sys;
|
use rustfs_iam::init_iam_sys;
|
||||||
use rustfs_kms::KmsServiceManager;
|
use rustfs_kms::KmsServiceManager;
|
||||||
|
|||||||
@@ -12,8 +12,8 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
|
use super::startup_storage_compat::{EcstoreResult, EndpointServerPools, new_global_notification_sys};
|
||||||
use crate::init::add_bucket_notification_configuration;
|
use crate::init::add_bucket_notification_configuration;
|
||||||
use crate::startup_storage_compat::{EcstoreResult, EndpointServerPools, new_global_notification_sys};
|
|
||||||
use std::{
|
use std::{
|
||||||
future::Future,
|
future::Future,
|
||||||
io::{Error, Result},
|
io::{Error, Result},
|
||||||
@@ -80,7 +80,7 @@ mod tests {
|
|||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn notification_system_returns_source_error() {
|
async fn notification_system_returns_source_error() {
|
||||||
let result =
|
let result =
|
||||||
init_notification_system_with(|| async { Err(crate::startup_storage_compat::EcstoreError::FaultyDisk) }).await;
|
init_notification_system_with(|| async { Err(super::super::startup_storage_compat::EcstoreError::FaultyDisk) }).await;
|
||||||
|
|
||||||
assert!(result.is_err());
|
assert!(result.is_err());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
use crate::startup_storage_compat::{set_global_region, set_global_rustfs_port};
|
use super::startup_storage_compat::{set_global_region, set_global_rustfs_port};
|
||||||
use crate::{
|
use crate::{
|
||||||
capacity::capacity_integration::init_capacity_management,
|
capacity::capacity_integration::init_capacity_management,
|
||||||
config::Config,
|
config::Config,
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
use crate::startup_storage_compat::{ECStore, EndpointServerPools};
|
use super::startup_storage_compat::{ECStore, EndpointServerPools};
|
||||||
use crate::{
|
use crate::{
|
||||||
config::Config,
|
config::Config,
|
||||||
init::{init_buffer_profile_system, init_kms_system},
|
init::{init_buffer_profile_system, init_kms_system},
|
||||||
|
|||||||
@@ -12,11 +12,11 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
use crate::startup_fs_guard::enforce_unsupported_fs_policy;
|
use super::startup_storage_compat::{
|
||||||
use crate::startup_storage_compat::{
|
|
||||||
ECStore, EndpointServerPools, init_background_replication, init_ecstore_config, init_global_config_sys, init_local_disks,
|
ECStore, EndpointServerPools, init_background_replication, init_ecstore_config, init_global_config_sys, init_local_disks,
|
||||||
init_lock_clients, prewarm_local_disk_id_map, set_global_endpoints, try_migrate_server_config, update_erasure_type,
|
init_lock_clients, prewarm_local_disk_id_map, set_global_endpoints, try_migrate_server_config, update_erasure_type,
|
||||||
};
|
};
|
||||||
|
use crate::startup_fs_guard::enforce_unsupported_fs_policy;
|
||||||
use rustfs_common::{GlobalReadiness, SystemStage};
|
use rustfs_common::{GlobalReadiness, SystemStage};
|
||||||
use std::{
|
use std::{
|
||||||
io::{Error, Result},
|
io::{Error, Result},
|
||||||
|
|||||||
@@ -12,16 +12,16 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
|
use super::core_storage_compat::ECStore;
|
||||||
|
use super::core_storage_compat::resolve_object_store_handle;
|
||||||
|
use super::core_storage_compat::{
|
||||||
|
PolicySys, StorageError, get_bucket_metadata, get_bucket_policy_raw, get_public_access_block_config, is_err_bucket_not_found,
|
||||||
|
};
|
||||||
use super::ecfs::FS;
|
use super::ecfs::FS;
|
||||||
use crate::auth::{check_key_valid, get_condition_values_with_query_and_client_info, get_session_token};
|
use crate::auth::{check_key_valid, get_condition_values_with_query_and_client_info, get_session_token};
|
||||||
use crate::error::ApiError;
|
use crate::error::ApiError;
|
||||||
use crate::license::license_check;
|
use crate::license::license_check;
|
||||||
use crate::server::RemoteAddr;
|
use crate::server::RemoteAddr;
|
||||||
use crate::storage::core_storage_compat::ECStore;
|
|
||||||
use crate::storage::core_storage_compat::resolve_object_store_handle;
|
|
||||||
use crate::storage::core_storage_compat::{
|
|
||||||
PolicySys, StorageError, get_bucket_metadata, get_bucket_policy_raw, get_public_access_block_config, is_err_bucket_not_found,
|
|
||||||
};
|
|
||||||
use crate::storage::request_context::RequestContext;
|
use crate::storage::request_context::RequestContext;
|
||||||
use metrics::counter;
|
use metrics::counter;
|
||||||
use rustfs_iam::error::Error as IamError;
|
use rustfs_iam::error::Error as IamError;
|
||||||
@@ -930,7 +930,7 @@ impl S3Access for FS {
|
|||||||
let req_info = ReqInfo {
|
let req_info = ReqInfo {
|
||||||
cred,
|
cred,
|
||||||
is_owner,
|
is_owner,
|
||||||
region: crate::storage::core_storage_compat::get_global_region(),
|
region: super::core_storage_compat::get_global_region(),
|
||||||
request_context,
|
request_context,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -12,13 +12,7 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
use crate::app::bucket_usecase::DefaultBucketUsecase;
|
use super::core_storage_compat::{
|
||||||
use crate::app::context::resolve_object_store_handle;
|
|
||||||
use crate::app::multipart_usecase::DefaultMultipartUsecase;
|
|
||||||
use crate::app::object_usecase::DefaultObjectUsecase;
|
|
||||||
use crate::error::ApiError;
|
|
||||||
use crate::storage::access::has_bypass_governance_header;
|
|
||||||
use crate::storage::core_storage_compat::{
|
|
||||||
BUCKET_ACCELERATE_CONFIG, BUCKET_LOGGING_CONFIG, BUCKET_REQUEST_PAYMENT_CONFIG, BUCKET_VERSIONING_CONFIG,
|
BUCKET_ACCELERATE_CONFIG, BUCKET_LOGGING_CONFIG, BUCKET_REQUEST_PAYMENT_CONFIG, BUCKET_VERSIONING_CONFIG,
|
||||||
BUCKET_WEBSITE_CONFIG, BucketVersioningSys, OBJECT_LOCK_CONFIG, StorageError, check_retention_for_modification, decode_tags,
|
BUCKET_WEBSITE_CONFIG, BucketVersioningSys, OBJECT_LOCK_CONFIG, StorageError, check_retention_for_modification, decode_tags,
|
||||||
decode_tags_to_map, delete_bucket_metadata_config, encode_tags, get_bucket_accelerate_config, get_bucket_logging_config,
|
decode_tags_to_map, delete_bucket_metadata_config, encode_tags, get_bucket_accelerate_config, get_bucket_logging_config,
|
||||||
@@ -26,7 +20,13 @@ use crate::storage::core_storage_compat::{
|
|||||||
is_err_bucket_not_found, is_err_object_not_found, is_err_version_not_found, record_replication_proxy, serialize,
|
is_err_bucket_not_found, is_err_object_not_found, is_err_version_not_found, record_replication_proxy, serialize,
|
||||||
update_bucket_metadata_config,
|
update_bucket_metadata_config,
|
||||||
};
|
};
|
||||||
use crate::storage::core_storage_compat::{StorageReplicationConfigExt as _, StorageVersioningConfigExt as _};
|
use super::core_storage_compat::{StorageReplicationConfigExt as _, StorageVersioningConfigExt as _};
|
||||||
|
use crate::app::bucket_usecase::DefaultBucketUsecase;
|
||||||
|
use crate::app::context::resolve_object_store_handle;
|
||||||
|
use crate::app::multipart_usecase::DefaultMultipartUsecase;
|
||||||
|
use crate::app::object_usecase::DefaultObjectUsecase;
|
||||||
|
use crate::error::ApiError;
|
||||||
|
use crate::storage::access::has_bypass_governance_header;
|
||||||
use crate::storage::helper::OperationHelper;
|
use crate::storage::helper::OperationHelper;
|
||||||
use crate::storage::options::get_opts;
|
use crate::storage::options::get_opts;
|
||||||
use crate::storage::s3_api::acl;
|
use crate::storage::s3_api::acl;
|
||||||
|
|||||||
@@ -12,14 +12,14 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
use crate::config::{RustFSBufferConfig, WorkloadProfile, get_global_buffer_config, is_buffer_profile_enabled};
|
use super::core_storage_compat::StorageReplicationConfigExt as _;
|
||||||
use crate::error::ApiError;
|
use super::core_storage_compat::{
|
||||||
use crate::server::cors;
|
|
||||||
use crate::storage::core_storage_compat::StorageReplicationConfigExt as _;
|
|
||||||
use crate::storage::core_storage_compat::{
|
|
||||||
StorageError, add_object_lock_years, get_bucket_cors_config, get_bucket_object_lock_config, get_bucket_replication_config,
|
StorageError, add_object_lock_years, get_bucket_cors_config, get_bucket_object_lock_config, get_bucket_replication_config,
|
||||||
resolve_object_store_handle,
|
resolve_object_store_handle,
|
||||||
};
|
};
|
||||||
|
use crate::config::{RustFSBufferConfig, WorkloadProfile, get_global_buffer_config, is_buffer_profile_enabled};
|
||||||
|
use crate::error::ApiError;
|
||||||
|
use crate::server::cors;
|
||||||
use crate::storage::ecfs::ListObjectUnorderedQuery;
|
use crate::storage::ecfs::ListObjectUnorderedQuery;
|
||||||
use http::header::{IF_MATCH, IF_MODIFIED_SINCE, IF_NONE_MATCH, IF_UNMODIFIED_SINCE};
|
use http::header::{IF_MATCH, IF_MODIFIED_SINCE, IF_NONE_MATCH, IF_UNMODIFIED_SINCE};
|
||||||
use http::{HeaderMap, HeaderValue, StatusCode};
|
use http::{HeaderMap, HeaderValue, StatusCode};
|
||||||
@@ -738,7 +738,7 @@ pub(crate) async fn has_replication_rules(bucket: &str, objects: &[ObjectToDelet
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Helper function to get store and validate bucket exists
|
/// Helper function to get store and validate bucket exists
|
||||||
pub(crate) async fn get_validated_store(bucket: &str) -> S3Result<Arc<crate::storage::core_storage_compat::ECStore>> {
|
pub(crate) async fn get_validated_store(bucket: &str) -> S3Result<Arc<super::core_storage_compat::ECStore>> {
|
||||||
let Some(store) = resolve_object_store_handle() else {
|
let Some(store) = resolve_object_store_handle() else {
|
||||||
return Err(S3Error::with_message(S3ErrorCode::InternalError, "Not init".to_string()));
|
return Err(S3Error::with_message(S3ErrorCode::InternalError, "Not init".to_string()));
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
use crate::storage::core_storage_compat::ECStore;
|
use super::core_storage_compat::ECStore;
|
||||||
use rustfs_storage_api::ListOperations as _;
|
use rustfs_storage_api::ListOperations as _;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
|||||||
@@ -30,11 +30,11 @@ pub mod timeout_wrapper;
|
|||||||
pub mod tonic_service;
|
pub mod tonic_service;
|
||||||
|
|
||||||
pub(crate) type StorageDeletedObject = rustfs_storage_api::DeletedObject;
|
pub(crate) type StorageDeletedObject = rustfs_storage_api::DeletedObject;
|
||||||
pub(crate) type StorageGetObjectReader = crate::storage::core_storage_compat::GetObjectReader;
|
pub(crate) type StorageGetObjectReader = self::core_storage_compat::GetObjectReader;
|
||||||
pub(crate) type StorageObjectInfo = crate::storage::core_storage_compat::ObjectInfo;
|
pub(crate) type StorageObjectInfo = self::core_storage_compat::ObjectInfo;
|
||||||
pub(crate) type StorageObjectOptions = crate::storage::core_storage_compat::ObjectOptions;
|
pub(crate) type StorageObjectOptions = self::core_storage_compat::ObjectOptions;
|
||||||
pub(crate) type StorageObjectToDelete = rustfs_storage_api::ObjectToDelete;
|
pub(crate) type StorageObjectToDelete = rustfs_storage_api::ObjectToDelete;
|
||||||
pub(crate) type StoragePutObjReader = crate::storage::core_storage_compat::PutObjReader;
|
pub(crate) type StoragePutObjReader = self::core_storage_compat::PutObjReader;
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod concurrent_fix_test;
|
mod concurrent_fix_test;
|
||||||
|
|||||||
@@ -12,9 +12,9 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
use crate::storage::core_storage_compat::BucketVersioningSys;
|
use super::core_storage_compat::BucketVersioningSys;
|
||||||
use crate::storage::core_storage_compat::Result;
|
use super::core_storage_compat::Result;
|
||||||
use crate::storage::core_storage_compat::StorageError;
|
use super::core_storage_compat::StorageError;
|
||||||
use http::header::{IF_MATCH, IF_NONE_MATCH};
|
use http::header::{IF_MATCH, IF_NONE_MATCH};
|
||||||
use http::{HeaderMap, HeaderValue};
|
use http::{HeaderMap, HeaderValue};
|
||||||
use rustfs_utils::http::{
|
use rustfs_utils::http::{
|
||||||
|
|||||||
@@ -69,7 +69,7 @@
|
|||||||
//! }
|
//! }
|
||||||
//! ```
|
//! ```
|
||||||
|
|
||||||
use crate::storage::core_storage_compat::StorageError;
|
use super::core_storage_compat::StorageError;
|
||||||
#[cfg(feature = "rio-v2")]
|
#[cfg(feature = "rio-v2")]
|
||||||
use aes_gcm::aead::Payload;
|
use aes_gcm::aead::Payload;
|
||||||
use aes_gcm::{
|
use aes_gcm::{
|
||||||
@@ -133,9 +133,9 @@ const SEALED_KEY_SIZE: usize = DARE_HEADER_SIZE + 32 + DARE_TAG_SIZE;
|
|||||||
#[cfg(feature = "rio-v2")]
|
#[cfg(feature = "rio-v2")]
|
||||||
const OBJECT_KEY_DERIVATION_CONTEXT: &[u8] = b"object-encryption-key generation";
|
const OBJECT_KEY_DERIVATION_CONTEXT: &[u8] = b"object-encryption-key generation";
|
||||||
|
|
||||||
|
use super::core_storage_compat::Error;
|
||||||
|
use super::core_storage_compat::get_bucket_sse_config;
|
||||||
use crate::error::ApiError;
|
use crate::error::ApiError;
|
||||||
use crate::storage::core_storage_compat::Error;
|
|
||||||
use crate::storage::core_storage_compat::get_bucket_sse_config;
|
|
||||||
use rustfs_utils::http::headers::{
|
use rustfs_utils::http::headers::{
|
||||||
AMZ_SERVER_SIDE_ENCRYPTION_CUSTOMER_ALGORITHM, AMZ_SERVER_SIDE_ENCRYPTION_CUSTOMER_KEY,
|
AMZ_SERVER_SIDE_ENCRYPTION_CUSTOMER_ALGORITHM, AMZ_SERVER_SIDE_ENCRYPTION_CUSTOMER_KEY,
|
||||||
AMZ_SERVER_SIDE_ENCRYPTION_CUSTOMER_KEY_MD5, AMZ_SERVER_SIDE_ENCRYPTION_KMS_CONTEXT,
|
AMZ_SERVER_SIDE_ENCRYPTION_CUSTOMER_KEY_MD5, AMZ_SERVER_SIDE_ENCRYPTION_KMS_CONTEXT,
|
||||||
@@ -751,19 +751,19 @@ pub struct ManagedSealedKey {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl EncryptionMaterial {
|
impl EncryptionMaterial {
|
||||||
pub fn write_encryption(&self, multipart_part_number: Option<usize>) -> crate::storage::core_storage_compat::WriteEncryption {
|
pub fn write_encryption(&self, multipart_part_number: Option<usize>) -> super::core_storage_compat::WriteEncryption {
|
||||||
match (self.key_kind, multipart_part_number) {
|
match (self.key_kind, multipart_part_number) {
|
||||||
(EncryptionKeyKind::Object, Some(part_number)) => {
|
(EncryptionKeyKind::Object, Some(part_number)) => {
|
||||||
crate::storage::core_storage_compat::WriteEncryption::multipart_object_key(self.key_bytes, part_number as u32)
|
super::core_storage_compat::WriteEncryption::multipart_object_key(self.key_bytes, part_number as u32)
|
||||||
}
|
}
|
||||||
(EncryptionKeyKind::Object, None) => {
|
(EncryptionKeyKind::Object, None) => {
|
||||||
crate::storage::core_storage_compat::WriteEncryption::singlepart_object_key(self.key_bytes)
|
super::core_storage_compat::WriteEncryption::singlepart_object_key(self.key_bytes)
|
||||||
}
|
}
|
||||||
(EncryptionKeyKind::Direct, Some(part_number)) => {
|
(EncryptionKeyKind::Direct, Some(part_number)) => {
|
||||||
crate::storage::core_storage_compat::WriteEncryption::multipart(self.key_bytes, self.base_nonce, part_number)
|
super::core_storage_compat::WriteEncryption::multipart(self.key_bytes, self.base_nonce, part_number)
|
||||||
}
|
}
|
||||||
(EncryptionKeyKind::Direct, None) => {
|
(EncryptionKeyKind::Direct, None) => {
|
||||||
crate::storage::core_storage_compat::WriteEncryption::singlepart(self.key_bytes, self.base_nonce)
|
super::core_storage_compat::WriteEncryption::singlepart(self.key_bytes, self.base_nonce)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ use std::{
|
|||||||
time::{Duration as StdDuration, Instant},
|
time::{Duration as StdDuration, Instant},
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::table_catalog_storage_compat::{
|
use super::table_catalog_storage_compat::{
|
||||||
BUCKET_TABLE_CATALOG_META_PREFIX, BUCKET_TABLE_CATALOG_TABLE_BUCKETS_PREFIX, BUCKET_TABLE_CONFIG,
|
BUCKET_TABLE_CATALOG_META_PREFIX, BUCKET_TABLE_CATALOG_TABLE_BUCKETS_PREFIX, BUCKET_TABLE_CONFIG,
|
||||||
BUCKET_TABLE_RESERVED_PREFIX, EcstoreError, RUSTFS_META_BUCKET, StorageError, get_bucket_metadata, get_lock_acquire_timeout,
|
BUCKET_TABLE_RESERVED_PREFIX, EcstoreError, RUSTFS_META_BUCKET, StorageError, get_bucket_metadata, get_lock_acquire_timeout,
|
||||||
table_catalog_path_hash,
|
table_catalog_path_hash,
|
||||||
|
|||||||
@@ -17,10 +17,10 @@ use rustfs_concurrency::{
|
|||||||
WorkloadClass,
|
WorkloadClass,
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::storage::concurrency::get_concurrency_manager;
|
use super::workload_admission_storage_compat::{
|
||||||
use crate::workload_admission_storage_compat::{
|
|
||||||
get_global_bucket_metadata_sys, get_global_replication_pool, replication_queue_current_count,
|
get_global_bucket_metadata_sys, get_global_replication_pool, replication_queue_current_count,
|
||||||
};
|
};
|
||||||
|
use crate::storage::concurrency::get_concurrency_manager;
|
||||||
|
|
||||||
const BUCKET_METADATA_RUNTIME_NOT_INITIALIZED: &str = "bucket metadata runtime not initialized";
|
const BUCKET_METADATA_RUNTIME_NOT_INITIALIZED: &str = "bucket metadata runtime not initialized";
|
||||||
const HEAL_MANAGER_NOT_INITIALIZED: &str = "heal manager not initialized";
|
const HEAL_MANAGER_NOT_INITIALIZED: &str = "heal manager not initialized";
|
||||||
|
|||||||
@@ -99,6 +99,8 @@ ALL_STORAGE_COMPAT_RAW_FACADE_PATH_HITS_FILE="${TMP_DIR}/all_storage_compat_raw_
|
|||||||
ALL_STORAGE_COMPAT_GROUPED_FACADE_IMPORT_HITS_FILE="${TMP_DIR}/all_storage_compat_grouped_facade_import_hits.txt"
|
ALL_STORAGE_COMPAT_GROUPED_FACADE_IMPORT_HITS_FILE="${TMP_DIR}/all_storage_compat_grouped_facade_import_hits.txt"
|
||||||
ALL_STORAGE_COMPAT_SELF_FACADE_PATH_HITS_FILE="${TMP_DIR}/all_storage_compat_self_facade_path_hits.txt"
|
ALL_STORAGE_COMPAT_SELF_FACADE_PATH_HITS_FILE="${TMP_DIR}/all_storage_compat_self_facade_path_hits.txt"
|
||||||
RUSTFS_LOCAL_COMPAT_OWNER_SELF_PATH_HITS_FILE="${TMP_DIR}/rustfs_local_compat_owner_self_path_hits.txt"
|
RUSTFS_LOCAL_COMPAT_OWNER_SELF_PATH_HITS_FILE="${TMP_DIR}/rustfs_local_compat_owner_self_path_hits.txt"
|
||||||
|
RUSTFS_ROOT_COMPAT_RELATIVE_CONSUMER_HITS_FILE="${TMP_DIR}/rustfs_root_compat_relative_consumer_hits.txt"
|
||||||
|
RUSTFS_STORAGE_CORE_COMPAT_RELATIVE_CONSUMER_HITS_FILE="${TMP_DIR}/rustfs_storage_core_compat_relative_consumer_hits.txt"
|
||||||
SCANNER_BUCKET_STORAGE_COMPAT_MODULE_HITS_FILE="${TMP_DIR}/scanner_bucket_storage_compat_module_hits.txt"
|
SCANNER_BUCKET_STORAGE_COMPAT_MODULE_HITS_FILE="${TMP_DIR}/scanner_bucket_storage_compat_module_hits.txt"
|
||||||
NOTIFY_STORAGE_COMPAT_MODULE_HITS_FILE="${TMP_DIR}/notify_storage_compat_module_hits.txt"
|
NOTIFY_STORAGE_COMPAT_MODULE_HITS_FILE="${TMP_DIR}/notify_storage_compat_module_hits.txt"
|
||||||
OBS_STORAGE_COMPAT_PASSTHROUGH_HITS_FILE="${TMP_DIR}/obs_storage_compat_passthrough_hits.txt"
|
OBS_STORAGE_COMPAT_PASSTHROUGH_HITS_FILE="${TMP_DIR}/obs_storage_compat_passthrough_hits.txt"
|
||||||
@@ -1049,6 +1051,37 @@ if [[ -s "$RUSTFS_LOCAL_COMPAT_OWNER_SELF_PATH_HITS_FILE" ]]; then
|
|||||||
report_failure "RustFS local compatibility bridge modules must use relative owner storage_compat paths instead of crate-qualified owner self paths: $(paste -sd '; ' "$RUSTFS_LOCAL_COMPAT_OWNER_SELF_PATH_HITS_FILE")"
|
report_failure "RustFS local compatibility bridge modules must use relative owner storage_compat paths instead of crate-qualified owner self paths: $(paste -sd '; ' "$RUSTFS_LOCAL_COMPAT_OWNER_SELF_PATH_HITS_FILE")"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
(
|
||||||
|
cd "$ROOT_DIR"
|
||||||
|
rg -n --with-filename 'crate::(?:startup_storage_compat|runtime_capabilities_storage_compat|workload_admission_storage_compat|table_catalog_storage_compat|error_storage_compat)' \
|
||||||
|
rustfs/src/startup_*.rs \
|
||||||
|
rustfs/src/init.rs \
|
||||||
|
rustfs/src/runtime_capabilities.rs \
|
||||||
|
rustfs/src/workload_admission.rs \
|
||||||
|
rustfs/src/table_catalog.rs \
|
||||||
|
rustfs/src/error.rs || true
|
||||||
|
) >"$RUSTFS_ROOT_COMPAT_RELATIVE_CONSUMER_HITS_FILE"
|
||||||
|
|
||||||
|
if [[ -s "$RUSTFS_ROOT_COMPAT_RELATIVE_CONSUMER_HITS_FILE" ]]; then
|
||||||
|
report_failure "RustFS root compatibility consumers must use relative owner paths instead of crate-qualified root compatibility paths: $(paste -sd '; ' "$RUSTFS_ROOT_COMPAT_RELATIVE_CONSUMER_HITS_FILE")"
|
||||||
|
fi
|
||||||
|
|
||||||
|
(
|
||||||
|
cd "$ROOT_DIR"
|
||||||
|
rg -n --with-filename 'crate::storage::core_storage_compat' \
|
||||||
|
rustfs/src/storage/mod.rs \
|
||||||
|
rustfs/src/storage/ecfs.rs \
|
||||||
|
rustfs/src/storage/ecfs_extend.rs \
|
||||||
|
rustfs/src/storage/access.rs \
|
||||||
|
rustfs/src/storage/head_prefix.rs \
|
||||||
|
rustfs/src/storage/options.rs \
|
||||||
|
rustfs/src/storage/sse.rs || true
|
||||||
|
) >"$RUSTFS_STORAGE_CORE_COMPAT_RELATIVE_CONSUMER_HITS_FILE"
|
||||||
|
|
||||||
|
if [[ -s "$RUSTFS_STORAGE_CORE_COMPAT_RELATIVE_CONSUMER_HITS_FILE" ]]; then
|
||||||
|
report_failure "RustFS storage owner consumers must use relative core_storage_compat paths instead of crate-qualified storage owner paths: $(paste -sd '; ' "$RUSTFS_STORAGE_CORE_COMPAT_RELATIVE_CONSUMER_HITS_FILE")"
|
||||||
|
fi
|
||||||
|
|
||||||
(
|
(
|
||||||
cd "$ROOT_DIR"
|
cd "$ROOT_DIR"
|
||||||
rg -n --no-heading 'pub\(crate\)\s+use rustfs_ecstore::api::bucket::\{[^}]*\b(?:bucket_target_sys|lifecycle|metadata_sys|replication|versioning|versioning_sys)\b[^}]*\}\s*;' \
|
rg -n --no-heading 'pub\(crate\)\s+use rustfs_ecstore::api::bucket::\{[^}]*\b(?:bucket_target_sys|lifecycle|metadata_sys|replication|versioning|versioning_sys)\b[^}]*\}\s*;' \
|
||||||
|
|||||||
Reference in New Issue
Block a user