refactor: centralize admin runtime sources (#3845)

This commit is contained in:
Zhengchao An
2026-06-25 13:09:02 +08:00
committed by GitHub
parent 1c4a279909
commit 1c4bcd4372
32 changed files with 127 additions and 69 deletions
+25 -6
View File
@@ -5,9 +5,9 @@ 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-server-storage-runtime-source-readers` - Branch: `overtrue/arch-admin-runtime-sources-batch`
- 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/API-110/API-111/API-112/API-113/API-114/API-115/API-116/API-117/API-118/API-119/API-120/API-121/API-122/API-123/API-124/API-125/API-126/API-127/API-128/API-129/API-130/API-131/API-132/API-133/API-134/API-135/API-136/API-137/API-138/API-139/API-140/API-141/API-142/API-143/API-144/API-145/API-146/API-147/API-148/API-149/API-150/API-151/API-152/API-153/API-154/API-155/API-156/API-157/API-158/API-159/API-160/API-161/API-162/API-163/API-164/API-165/API-166/API-167/API-168/API-169/API-170/API-171/API-172/API-173/API-174/API-175/API-176/API-177/API-178/API-179/API-180/API-181/API-182/API-183/API-184/API-185/API-186/API-187/API-188/API-189/API-190/API-191/API-192/API-193/API-194/API-195/API-196/API-197/API-198/API-199/API-200/API-201/API-202/API-203/API-204`. - 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/API-110/API-111/API-112/API-113/API-114/API-115/API-116/API-117/API-118/API-119/API-120/API-121/API-122/API-123/API-124/API-125/API-126/API-127/API-128/API-129/API-130/API-131/API-132/API-133/API-134/API-135/API-136/API-137/API-138/API-139/API-140/API-141/API-142/API-143/API-144/API-145/API-146/API-147/API-148/API-149/API-150/API-151/API-152/API-153/API-154/API-155/API-156/API-157/API-158/API-159/API-160/API-161/API-162/API-163/API-164/API-165/API-166/API-167/API-168/API-169/API-170/API-171/API-172/API-173/API-174/API-175/API-176/API-177/API-178/API-179/API-180/API-181/API-182/API-183/API-184/API-185/API-186/API-187/API-188/API-189/API-190/API-191/API-192/API-193/API-194/API-195/API-196/API-197/API-198/API-199/API-200/API-201/API-202/API-203/API-204/API-205`.
- Based on: stacked on PR #3828 head after PR #3827. - Based on: `origin/main` after PR #3843.
- PR type for this branch: `consumer-migration` - PR type for this branch: `consumer-migration`
- Runtime behavior changes: none. - Runtime behavior changes: none.
- Rust code changes: route replication pool, outbound TLS generation, runtime - Rust code changes: route replication pool, outbound TLS generation, runtime
@@ -44,7 +44,8 @@ Status values: `[ ]` not started, `[~]` in progress, `[x]` complete, `[!]` block
runtime source helpers, plus startup/root KMS, credentials, region, runtime source helpers, plus startup/root KMS, credentials, region,
readiness-time, observability, metrics, buffer, and TLS runtime source readiness-time, observability, metrics, buffer, and TLS runtime source
helpers, plus server readiness/audit/event/module-switch runtime source helpers, plus server readiness/audit/event/module-switch runtime source
helpers and storage request/RPC/SSE runtime source helpers, helpers, storage request/RPC/SSE runtime source helpers, and admin
handler/service/router runtime source helpers,
through AppContext-first or owner-crate resolver boundaries. through AppContext-first or owner-crate resolver boundaries.
- CI/script changes: lock completed owner and test/fuzz boundaries against - CI/script changes: lock completed owner and test/fuzz boundaries against
bare/glob imports, scattered raw ECStore facade subpaths, and startup bare/glob imports, scattered raw ECStore facade subpaths, and startup
@@ -54,8 +55,9 @@ Status values: `[ ]` not started, `[~]` in progress, `[x]` complete, `[!]` block
and storage owner thin bridge regressions, plus app context and notify and storage owner thin bridge regressions, plus app context and notify
event-bridge thin module regressions, plus IAM runtime-source bypasses; event-bridge thin module regressions, plus IAM runtime-source bypasses;
accept the reviewed AppContext resolver reverse dependencies in the layer accept the reviewed AppContext resolver reverse dependencies in the layer
baseline. baseline, and block direct admin AppContext resolver consumers outside the
- Docs changes: record the API-136 through API-204 owner facade and lifecycle admin runtime-source boundary.
- Docs changes: record the API-136 through API-205 owner facade and lifecycle
runtime-source cleanup. runtime-source cleanup.
## Phase 0 Tasks ## Phase 0 Tasks
@@ -4938,6 +4940,20 @@ Status values: `[ ]` not started, `[~]` in progress, `[x]` complete, `[!]` block
migration/layer guards, diff hygiene, residual direct AppContext scan, Rust migration/layer guards, diff hygiene, residual direct AppContext scan, Rust
risk scan, fast PR gate, and full PR gate before PR. risk scan, fast PR gate, and full PR gate before PR.
- [x] `API-205` Centralize admin runtime source readers.
- Do: route admin handler, router, auth, console, and service runtime
AppContext resolver consumers through the admin runtime-source boundary.
- Acceptance: admin consumers no longer import AppContext resolvers directly,
and migration rules reject new direct admin AppContext resolver consumers
outside `rustfs/src/admin/runtime_sources.rs`.
- Must preserve: admin auth/authorization, IAM readiness errors, KMS manager
fallback, OIDC console behavior, replication status, site replication peer
TLS behavior, dynamic config publication, object-store reads, region
rendering, scanner reports, and bucket metadata/admin storage behavior.
- Verification: focused RustFS admin compile/tests, formatting, migration and
layer guards, diff hygiene, residual direct AppContext scan, Rust risk
scan, fast PR gate, and full PR gate before PR.
## Next PRs ## Next PRs
1. `consumer-migration`: continue reducing direct global reads behind AppContext resolver boundaries. 1. `consumer-migration`: continue reducing direct global reads behind AppContext resolver boundaries.
@@ -4946,6 +4962,9 @@ Status values: `[ ]` not started, `[~]` in progress, `[x]` complete, `[!]` block
| Expert | Status | Notes | | Expert | Status | Notes |
|---|---|---| |---|---|---|
| Quality/architecture | pass | API-205 keeps direct admin AppContext resolver consumers behind the admin runtime-source boundary and adds a guard against regressions. |
| Migration preservation | pass | Admin auth, IAM readiness, KMS manager fallback, site replication TLS, config publication, and object-store resolver behavior preserve existing semantics. |
| Testing/verification | pass | Focused admin compile/tests, formatting, migration/layer guards, residual scan, fast PR gate, and full PR gate are planned before PR. |
| Quality/architecture | pass | API-199 keeps RustFS test tier-config and TLS-generation mutation behind AppContext-owned runtime-source helpers and retires the stale tier-config test compat shim. | | Quality/architecture | pass | API-199 keeps RustFS test tier-config and TLS-generation mutation behind AppContext-owned runtime-source helpers and retires the stale tier-config test compat shim. |
| Migration preservation | pass | Lifecycle transition tier registration and site replication peer-client generation-cache behavior preserve existing semantics. | | Migration preservation | pass | Lifecycle transition tier registration and site replication peer-client generation-cache behavior preserve existing semantics. |
| Testing/verification | pass | Focused RustFS tests, formatting, migration/layer guards, residual scan, fast PR gate, and full PR gate are planned before PR. | | Testing/verification | pass | Focused RustFS tests, formatting, migration/layer guards, residual scan, fast PR gate, and full PR gate are planned before PR. |
+2 -2
View File
@@ -56,7 +56,7 @@ pub async fn validate_admin_request(
actions: Vec<Action>, actions: Vec<Action>,
remote_addr: Option<std::net::SocketAddr>, remote_addr: Option<std::net::SocketAddr>,
) -> S3Result<()> { ) -> S3Result<()> {
let Ok(iam_store) = crate::app::context::resolve_ready_iam_handle() else { let Ok(iam_store) = crate::admin::runtime_sources::resolve_ready_iam_handle() else {
return Err(s3_error!(InternalError, "iam not init")); return Err(s3_error!(InternalError, "iam not init"));
}; };
let ctx = AuthContext { let ctx = AuthContext {
@@ -146,7 +146,7 @@ pub async fn validate_admin_request_with_bucket_object(
remote_addr: Option<std::net::SocketAddr>, remote_addr: Option<std::net::SocketAddr>,
resource: AdminResourceScope<'_>, resource: AdminResourceScope<'_>,
) -> S3Result<()> { ) -> S3Result<()> {
let Ok(iam_store) = crate::app::context::resolve_ready_iam_handle() else { let Ok(iam_store) = crate::admin::runtime_sources::resolve_ready_iam_handle() else {
return Err(s3_error!(InternalError, "iam not init")); return Err(s3_error!(InternalError, "iam not init"));
}; };
let ctx = AuthContext { let ctx = AuthContext {
+1 -1
View File
@@ -13,8 +13,8 @@
// limitations under the License. // limitations under the License.
use crate::admin::handlers::health::{HealthProbe, build_health_response_parts, collect_dependency_readiness}; use crate::admin::handlers::health::{HealthProbe, build_health_response_parts, collect_dependency_readiness};
use crate::admin::runtime_sources::resolve_oidc_handle;
use crate::app::admin_usecase::DefaultAdminUsecase; use crate::app::admin_usecase::DefaultAdminUsecase;
use crate::app::context::resolve_oidc_handle;
use crate::license::has_valid_license; use crate::license::has_valid_license;
use crate::server::has_path_prefix; use crate::server::has_path_prefix;
use crate::server::{ use crate::server::{
+2 -2
View File
@@ -15,7 +15,7 @@
use super::super::versioning_sys::BucketVersioningSys; use super::super::versioning_sys::BucketVersioningSys;
use crate::admin::auth::authenticate_request; use crate::admin::auth::authenticate_request;
use crate::admin::router::{AdminOperation, Operation, S3Router}; use crate::admin::router::{AdminOperation, Operation, S3Router};
use crate::app::context::{resolve_action_credentials, resolve_object_store_handle}; use crate::admin::runtime_sources::{resolve_action_credentials, resolve_object_store_handle};
use crate::auth::get_condition_values; use crate::auth::get_condition_values;
use crate::server::{ADMIN_PREFIX, RemoteAddr}; use crate::server::{ADMIN_PREFIX, RemoteAddr};
use http::{HeaderMap, HeaderValue}; use http::{HeaderMap, HeaderValue};
@@ -69,7 +69,7 @@ impl Operation for AccountInfoHandler {
let (cred, owner) = authenticate_request(&req.headers, &req.uri, &input_cred).await?; let (cred, owner) = authenticate_request(&req.headers, &req.uri, &input_cred).await?;
let Ok(iam_store) = crate::app::context::resolve_ready_iam_handle() else { let Ok(iam_store) = crate::admin::runtime_sources::resolve_ready_iam_handle() else {
return Err(s3_error!(InvalidRequest, "iam not init")); return Err(s3_error!(InvalidRequest, "iam not init"));
}; };
@@ -14,7 +14,7 @@
use super::super::{read_admin_config_without_migrate, save_admin_server_config}; use super::super::{read_admin_config_without_migrate, save_admin_server_config};
use crate::admin::handlers::target_descriptor::AdminTargetSpec; use crate::admin::handlers::target_descriptor::AdminTargetSpec;
use crate::app::context::resolve_object_store_handle; use crate::admin::runtime_sources::resolve_object_store_handle;
use rustfs_audit::{audit_system, start_audit_system as start_global_audit_system, system::AuditSystemState}; use rustfs_audit::{audit_system, start_audit_system as start_global_audit_system, system::AuditSystemState};
use rustfs_config::DEFAULT_DELIMITER; use rustfs_config::DEFAULT_DELIMITER;
use rustfs_config::server_config::Config; use rustfs_config::server_config::Config;
+1 -1
View File
@@ -19,12 +19,12 @@ use super::super::{
}; };
use crate::admin::auth::validate_admin_request; use crate::admin::auth::validate_admin_request;
use crate::admin::router::{AdminOperation, Operation, S3Router}; use crate::admin::router::{AdminOperation, Operation, S3Router};
use crate::admin::runtime_sources::{publish_server_config, resolve_object_store_handle, resolve_server_config};
use crate::admin::service::config::{ use crate::admin::service::config::{
apply_dynamic_config_for_subsystem, is_dynamic_config_subsystem, signal_config_snapshot_reload, signal_dynamic_config_reload, apply_dynamic_config_for_subsystem, is_dynamic_config_subsystem, signal_config_snapshot_reload, signal_dynamic_config_reload,
validate_server_config, validate_server_config,
}; };
use crate::admin::utils::{encode_compatible_admin_payload, is_compat_admin_request, read_compatible_admin_body}; use crate::admin::utils::{encode_compatible_admin_payload, is_compat_admin_request, read_compatible_admin_body};
use crate::app::context::{publish_server_config, resolve_object_store_handle, resolve_server_config};
use crate::auth::{check_key_valid, get_session_token}; use crate::auth::{check_key_valid, get_session_token};
use crate::error::ApiError; use crate::error::ApiError;
use crate::server::{ADMIN_PREFIX, RemoteAddr}; use crate::server::{ADMIN_PREFIX, RemoteAddr};
+5 -5
View File
@@ -115,7 +115,7 @@ impl Operation for ListGroups {
) )
.await?; .await?;
let Ok(iam_store) = crate::app::context::resolve_ready_iam_handle() else { let Ok(iam_store) = crate::admin::runtime_sources::resolve_ready_iam_handle() else {
return Err(s3_error!(InternalError, "iam is not initialized")); return Err(s3_error!(InternalError, "iam is not initialized"));
}; };
@@ -180,7 +180,7 @@ impl Operation for GetGroup {
GroupQuery::default() GroupQuery::default()
} }
}; };
let Ok(iam_store) = crate::app::context::resolve_ready_iam_handle() else { let Ok(iam_store) = crate::admin::runtime_sources::resolve_ready_iam_handle() else {
return Err(s3_error!(InternalError, "iam is not initialized")); return Err(s3_error!(InternalError, "iam is not initialized"));
}; };
@@ -256,7 +256,7 @@ impl Operation for DeleteGroup {
let group = decode_delete_group_name(&params)?; let group = decode_delete_group_name(&params)?;
let Ok(iam_store) = crate::app::context::resolve_ready_iam_handle() else { let Ok(iam_store) = crate::admin::runtime_sources::resolve_ready_iam_handle() else {
return Err(s3_error!(InternalError, "iam is not initialized")); return Err(s3_error!(InternalError, "iam is not initialized"));
}; };
@@ -394,7 +394,7 @@ impl Operation for SetGroupStatus {
return Err(s3_error!(InvalidArgument, "group is required")); return Err(s3_error!(InvalidArgument, "group is required"));
} }
let Ok(iam_store) = crate::app::context::resolve_ready_iam_handle() else { let Ok(iam_store) = crate::admin::runtime_sources::resolve_ready_iam_handle() else {
return Err(s3_error!(InternalError, "iam is not initialized")); return Err(s3_error!(InternalError, "iam is not initialized"));
}; };
@@ -537,7 +537,7 @@ impl Operation for UpdateGroupMembers {
"admin group state" "admin group state"
); );
let Ok(iam_store) = crate::app::context::resolve_ready_iam_handle() else { let Ok(iam_store) = crate::admin::runtime_sources::resolve_ready_iam_handle() else {
return Err(s3_error!(InternalError, "iam is not initialized")); return Err(s3_error!(InternalError, "iam is not initialized"));
}; };
+1 -1
View File
@@ -16,7 +16,7 @@ use super::super::ecstore_utils::is_valid_object_prefix;
use super::super::is_reserved_or_invalid_bucket; use super::super::is_reserved_or_invalid_bucket;
use crate::admin::auth::{authenticate_request, validate_admin_request}; use crate::admin::auth::{authenticate_request, validate_admin_request};
use crate::admin::router::{AdminOperation, Operation, S3Router}; use crate::admin::router::{AdminOperation, Operation, S3Router};
use crate::app::context::resolve_object_store_handle; use crate::admin::runtime_sources::resolve_object_store_handle;
use crate::server::ADMIN_PREFIX; use crate::server::ADMIN_PREFIX;
use crate::server::RemoteAddr; use crate::server::RemoteAddr;
use crate::storage::request_context::spawn_traced; use crate::storage::request_context::spawn_traced;
+3 -3
View File
@@ -13,7 +13,7 @@
// limitations under the License. // limitations under the License.
use crate::admin::router::Operation; use crate::admin::router::Operation;
use crate::app::context::resolve_action_credentials; use crate::admin::runtime_sources::resolve_action_credentials;
use crate::auth::{check_key_valid, constant_time_eq, get_condition_values, get_session_token}; use crate::auth::{check_key_valid, constant_time_eq, get_condition_values, get_session_token};
use http::{HeaderMap, HeaderValue}; use http::{HeaderMap, HeaderValue};
use hyper::StatusCode; use hyper::StatusCode;
@@ -58,8 +58,8 @@ impl Operation for IsAdminHandler {
true true
} else { } else {
let empty_claims = HashMap::new(); let empty_claims = HashMap::new();
let iam_store = let iam_store = crate::admin::runtime_sources::resolve_ready_iam_handle()
crate::app::context::resolve_ready_iam_handle().map_err(|_| s3_error!(InternalError, "iam not init"))?; .map_err(|_| s3_error!(InternalError, "iam not init"))?;
let conditions = get_condition_values(&req.headers, &cred, None, None, None); let conditions = get_condition_values(&req.headers, &cred, None, None, None);
iam_store iam_store
.is_allowed(&Args { .is_allowed(&Args {
+1 -1
View File
@@ -17,7 +17,7 @@
use super::super::{read_admin_config, save_admin_config}; use super::super::{read_admin_config, save_admin_config};
use crate::admin::auth::validate_admin_request; use crate::admin::auth::validate_admin_request;
use crate::admin::router::{AdminOperation, Operation, S3Router}; use crate::admin::router::{AdminOperation, Operation, S3Router};
use crate::app::context::{ use crate::admin::runtime_sources::{
resolve_kms_runtime_service_manager, resolve_object_store_handle, resolve_or_init_kms_runtime_service_manager, resolve_kms_runtime_service_manager, resolve_object_store_handle, resolve_or_init_kms_runtime_service_manager,
}; };
use crate::auth::{check_key_valid, get_session_token}; use crate::auth::{check_key_valid, get_session_token};
+1 -1
View File
@@ -16,7 +16,7 @@
use crate::admin::auth::validate_admin_request; use crate::admin::auth::validate_admin_request;
use crate::admin::router::{AdminOperation, Operation, S3Router}; use crate::admin::router::{AdminOperation, Operation, S3Router};
use crate::app::context::{resolve_kms_runtime_service_manager, resolve_or_init_kms_runtime_service_manager}; use crate::admin::runtime_sources::{resolve_kms_runtime_service_manager, resolve_or_init_kms_runtime_service_manager};
use crate::auth::{check_key_valid, get_session_token}; use crate::auth::{check_key_valid, get_session_token};
use crate::server::{ADMIN_PREFIX, RemoteAddr}; use crate::server::{ADMIN_PREFIX, RemoteAddr};
use base64::Engine; use base64::Engine;
+1 -1
View File
@@ -17,7 +17,7 @@
use super::kms_keys::{CreateKeyHandler, DescribeKeyHandler, GenerateDataKeyHandler, ListKeysHandler}; use super::kms_keys::{CreateKeyHandler, DescribeKeyHandler, GenerateDataKeyHandler, ListKeysHandler};
use crate::admin::auth::validate_admin_request; use crate::admin::auth::validate_admin_request;
use crate::admin::router::{AdminOperation, Operation, S3Router}; use crate::admin::router::{AdminOperation, Operation, S3Router};
use crate::app::context::{resolve_kms_runtime_service_manager, resolve_or_init_kms_runtime_service_manager}; use crate::admin::runtime_sources::{resolve_kms_runtime_service_manager, resolve_or_init_kms_runtime_service_manager};
use crate::auth::{check_key_valid, get_session_token}; use crate::auth::{check_key_valid, get_session_token};
use crate::server::{ADMIN_PREFIX, RemoteAddr}; use crate::server::{ADMIN_PREFIX, RemoteAddr};
use hyper::{HeaderMap, Method, StatusCode}; use hyper::{HeaderMap, Method, StatusCode};
@@ -13,7 +13,7 @@
// limitations under the License. // limitations under the License.
use crate::admin::router::{ADMIN_OBJECT_ZIP_DOWNLOADS_PATH, AdminOperation, Operation, S3Router}; use crate::admin::router::{ADMIN_OBJECT_ZIP_DOWNLOADS_PATH, AdminOperation, Operation, S3Router};
use crate::app::context::{resolve_action_credentials, resolve_object_store_handle, resolve_region}; use crate::admin::runtime_sources::{resolve_action_credentials, resolve_object_store_handle, resolve_region};
use crate::auth::{check_key_valid, get_session_token}; use crate::auth::{check_key_valid, get_session_token};
use crate::error::ApiError; use crate::error::ApiError;
use crate::license::license_check; use crate::license::license_check;
+1 -1
View File
@@ -16,7 +16,7 @@ use super::super::{read_admin_config_without_migrate, save_admin_server_config};
use super::sts::create_oidc_sts_credentials; use super::sts::create_oidc_sts_credentials;
use crate::admin::auth::validate_admin_request; use crate::admin::auth::validate_admin_request;
use crate::admin::router::{AdminOperation, Operation, S3Router}; use crate::admin::router::{AdminOperation, Operation, S3Router};
use crate::app::context::{resolve_object_store_handle, resolve_oidc_handle, resolve_server_config}; use crate::admin::runtime_sources::{resolve_object_store_handle, resolve_oidc_handle, resolve_server_config};
use crate::auth::{check_key_valid, get_session_token}; use crate::auth::{check_key_valid, get_session_token};
use crate::server::{ADMIN_PREFIX, MINIO_ADMIN_PREFIX, RemoteAddr}; use crate::server::{ADMIN_PREFIX, MINIO_ADMIN_PREFIX, RemoteAddr};
use http::StatusCode; use http::StatusCode;
+7 -7
View File
@@ -144,7 +144,7 @@ impl Operation for ListCannedPolicies {
} }
}; };
let Ok(iam_store) = crate::app::context::resolve_ready_iam_handle() else { let Ok(iam_store) = crate::admin::runtime_sources::resolve_ready_iam_handle() else {
return Err(s3_error!(InternalError, "iam is not initialized")); return Err(s3_error!(InternalError, "iam is not initialized"));
}; };
@@ -252,7 +252,7 @@ impl Operation for AddCannedPolicy {
if policy.version.is_empty() { if policy.version.is_empty() {
return Err(s3_error!(InvalidArgument, "policy version is required")); return Err(s3_error!(InvalidArgument, "policy version is required"));
} }
let Ok(iam_store) = crate::app::context::resolve_ready_iam_handle() else { let Ok(iam_store) = crate::admin::runtime_sources::resolve_ready_iam_handle() else {
return Err(s3_error!(InternalError, "iam is not initialized")); return Err(s3_error!(InternalError, "iam is not initialized"));
}; };
@@ -340,7 +340,7 @@ impl Operation for InfoCannedPolicy {
return Err(s3_error!(InvalidArgument, "too many policies")); return Err(s3_error!(InvalidArgument, "too many policies"));
} }
let Ok(iam_store) = crate::app::context::resolve_ready_iam_handle() else { let Ok(iam_store) = crate::admin::runtime_sources::resolve_ready_iam_handle() else {
return Err(s3_error!(InternalError, "iam is not initialized")); return Err(s3_error!(InternalError, "iam is not initialized"));
}; };
@@ -401,7 +401,7 @@ impl Operation for RemoveCannedPolicy {
return Err(s3_error!(InvalidArgument, "policy name is required")); return Err(s3_error!(InvalidArgument, "policy name is required"));
} }
let Ok(iam_store) = crate::app::context::resolve_ready_iam_handle() else { let Ok(iam_store) = crate::admin::runtime_sources::resolve_ready_iam_handle() else {
return Err(s3_error!(InternalError, "iam is not initialized")); return Err(s3_error!(InternalError, "iam is not initialized"));
}; };
@@ -492,7 +492,7 @@ impl Operation for SetPolicyForUserOrGroup {
return Err(s3_error!(InvalidArgument, "user or group is required")); return Err(s3_error!(InvalidArgument, "user or group is required"));
} }
let Ok(iam_store) = crate::app::context::resolve_ready_iam_handle() else { let Ok(iam_store) = crate::admin::runtime_sources::resolve_ready_iam_handle() else {
return Err(s3_error!(InternalError, "iam is not initialized")); return Err(s3_error!(InternalError, "iam is not initialized"));
}; };
@@ -825,7 +825,7 @@ async fn handle_builtin_policy_entities(req: S3Request<Body>) -> S3Result<S3Resp
let query = parse_policy_entities_query(req.uri.query()); let query = parse_policy_entities_query(req.uri.query());
let Ok(iam_store) = crate::app::context::resolve_ready_iam_handle() else { let Ok(iam_store) = crate::admin::runtime_sources::resolve_ready_iam_handle() else {
return Err(s3_error!(InternalError, "iam not init")); return Err(s3_error!(InternalError, "iam not init"));
}; };
@@ -961,7 +961,7 @@ async fn handle_builtin_policy_association(req: S3Request<Body>, is_attach: bool
.map_err(|e| s3_error!(InvalidRequest, "unmarshal policy association body failed, e: {:?}", e))?; .map_err(|e| s3_error!(InvalidRequest, "unmarshal policy association body failed, e: {:?}", e))?;
validate_policy_association_req(&assoc_req)?; validate_policy_association_req(&assoc_req)?;
let Ok(iam_store) = crate::app::context::resolve_ready_iam_handle() else { let Ok(iam_store) = crate::admin::runtime_sources::resolve_ready_iam_handle() else {
return Err(s3_error!(InternalError, "iam not init")); return Err(s3_error!(InternalError, "iam not init"));
}; };
+1 -1
View File
@@ -19,7 +19,7 @@ use super::super::quota::checker::QuotaChecker;
use super::super::quota::{BucketQuota, QuotaError, QuotaOperation}; use super::super::quota::{BucketQuota, QuotaError, QuotaOperation};
use crate::admin::auth::{validate_admin_request, validate_admin_request_with_bucket}; use crate::admin::auth::{validate_admin_request, validate_admin_request_with_bucket};
use crate::admin::router::{AdminOperation, Operation, S3Router}; use crate::admin::router::{AdminOperation, Operation, S3Router};
use crate::app::context::{resolve_bucket_metadata_handle, resolve_object_store_handle}; use crate::admin::runtime_sources::{resolve_bucket_metadata_handle, resolve_object_store_handle};
use crate::auth::{check_key_valid, get_session_token}; use crate::auth::{check_key_valid, get_session_token};
use crate::server::ADMIN_PREFIX; use crate::server::ADMIN_PREFIX;
use hyper::{Method, StatusCode}; use hyper::{Method, StatusCode};
+1 -1
View File
@@ -22,8 +22,8 @@ use super::super::target::BucketTarget;
use crate::admin::auth::validate_admin_request; use crate::admin::auth::validate_admin_request;
use crate::admin::handlers::site_replication::site_replication_peer_deployment_id_for_endpoint; use crate::admin::handlers::site_replication::site_replication_peer_deployment_id_for_endpoint;
use crate::admin::router::{AdminOperation, Operation, S3Router}; use crate::admin::router::{AdminOperation, Operation, S3Router};
use crate::admin::runtime_sources::{resolve_object_store_handle, resolve_replication_stats_handle, resolve_runtime_port};
use crate::admin::utils::read_compatible_admin_body; use crate::admin::utils::read_compatible_admin_body;
use crate::app::context::{resolve_object_store_handle, resolve_replication_stats_handle, resolve_runtime_port};
use crate::auth::{check_key_valid, get_session_token}; use crate::auth::{check_key_valid, get_session_token};
use crate::error::ApiError; use crate::error::ApiError;
use crate::server::{ADMIN_PREFIX, RemoteAddr}; use crate::server::{ADMIN_PREFIX, RemoteAddr};
+1 -1
View File
@@ -14,7 +14,7 @@
use crate::admin::auth::validate_admin_request; use crate::admin::auth::validate_admin_request;
use crate::admin::router::{AdminOperation, Operation, S3Router}; use crate::admin::router::{AdminOperation, Operation, S3Router};
use crate::app::context::resolve_scanner_metrics_report; use crate::admin::runtime_sources::resolve_scanner_metrics_report;
use crate::auth::{check_key_valid, get_session_token}; use crate::auth::{check_key_valid, get_session_token};
use crate::server::{ADMIN_PREFIX, RemoteAddr}; use crate::server::{ADMIN_PREFIX, RemoteAddr};
use http::{HeaderMap, HeaderValue}; use http::{HeaderMap, HeaderValue};
+9 -9
View File
@@ -15,8 +15,8 @@
use super::iam_error::iam_error_to_s3_error; use super::iam_error::iam_error_to_s3_error;
use crate::admin::access_key_identity; use crate::admin::access_key_identity;
use crate::admin::handlers::site_replication::site_replication_iam_change_hook; use crate::admin::handlers::site_replication::site_replication_iam_change_hook;
use crate::admin::runtime_sources::resolve_action_credentials;
use crate::admin::utils::{encode_compatible_admin_payload, has_space_be, is_compat_admin_request, read_compatible_admin_body}; use crate::admin::utils::{encode_compatible_admin_payload, has_space_be, is_compat_admin_request, read_compatible_admin_body};
use crate::app::context::resolve_action_credentials;
use crate::auth::{constant_time_eq, get_condition_values, get_session_token}; use crate::auth::{constant_time_eq, get_condition_values, get_session_token};
use crate::server::{ADMIN_PREFIX, RemoteAddr}; use crate::server::{ADMIN_PREFIX, RemoteAddr};
use crate::{ use crate::{
@@ -292,7 +292,7 @@ impl Operation for AddServiceAccount {
req_is_derived_cred = true; req_is_derived_cred = true;
} }
let Ok(iam_store) = crate::app::context::resolve_ready_iam_handle() else { let Ok(iam_store) = crate::admin::runtime_sources::resolve_ready_iam_handle() else {
return Err(s3_error!(InvalidRequest, "iam not init")); return Err(s3_error!(InvalidRequest, "iam not init"));
}; };
@@ -513,7 +513,7 @@ impl Operation for UpdateServiceAccount {
return Err(s3_error!(InvalidRequest, "get cred failed")); return Err(s3_error!(InvalidRequest, "get cred failed"));
}; };
let Ok(iam_store) = crate::app::context::resolve_ready_iam_handle() else { let Ok(iam_store) = crate::admin::runtime_sources::resolve_ready_iam_handle() else {
return Err(s3_error!(InvalidRequest, "iam not init")); return Err(s3_error!(InvalidRequest, "iam not init"));
}; };
@@ -642,7 +642,7 @@ impl Operation for InfoServiceAccount {
let access_key = query.access_key; let access_key = query.access_key;
let Ok(iam_store) = crate::app::context::resolve_ready_iam_handle() else { let Ok(iam_store) = crate::admin::runtime_sources::resolve_ready_iam_handle() else {
return Err(s3_error!(InvalidRequest, "iam not init")); return Err(s3_error!(InvalidRequest, "iam not init"));
}; };
@@ -719,7 +719,7 @@ impl Operation for TemporaryAccountInfo {
let (cred, owner) = let (cred, owner) =
check_key_valid(get_session_token(&req.uri, &req.headers).unwrap_or_default(), &input_cred.access_key).await?; check_key_valid(get_session_token(&req.uri, &req.headers).unwrap_or_default(), &input_cred.access_key).await?;
let Ok(iam_store) = crate::app::context::resolve_ready_iam_handle() else { let Ok(iam_store) = crate::admin::runtime_sources::resolve_ready_iam_handle() else {
return Err(s3_error!(InvalidRequest, "iam not init")); return Err(s3_error!(InvalidRequest, "iam not init"));
}; };
@@ -789,7 +789,7 @@ impl Operation for InfoAccessKey {
query.access_key query.access_key
}; };
let Ok(iam_store) = crate::app::context::resolve_ready_iam_handle() else { let Ok(iam_store) = crate::admin::runtime_sources::resolve_ready_iam_handle() else {
return Err(s3_error!(InvalidRequest, "iam not init")); return Err(s3_error!(InvalidRequest, "iam not init"));
}; };
@@ -912,7 +912,7 @@ impl Operation for ListServiceAccount {
// cred.parent_user // cred.parent_user
// }; // };
let Ok(iam_store) = crate::app::context::resolve_ready_iam_handle() else { let Ok(iam_store) = crate::admin::runtime_sources::resolve_ready_iam_handle() else {
return Err(s3_error!(InvalidRequest, "iam not init")); return Err(s3_error!(InvalidRequest, "iam not init"));
}; };
@@ -1049,7 +1049,7 @@ impl Operation for ListAccessKeysBulk {
let (cred, owner) = let (cred, owner) =
check_key_valid(get_session_token(&req.uri, &req.headers).unwrap_or_default(), &input_cred.access_key).await?; check_key_valid(get_session_token(&req.uri, &req.headers).unwrap_or_default(), &input_cred.access_key).await?;
let Ok(iam_store) = crate::app::context::resolve_ready_iam_handle() else { let Ok(iam_store) = crate::admin::runtime_sources::resolve_ready_iam_handle() else {
return Err(s3_error!(InvalidRequest, "iam not init")); return Err(s3_error!(InvalidRequest, "iam not init"));
}; };
@@ -1252,7 +1252,7 @@ impl Operation for DeleteServiceAccount {
return Err(s3_error!(InvalidArgument, "access key is empty")); return Err(s3_error!(InvalidArgument, "access key is empty"));
} }
let Ok(iam_store) = crate::app::context::resolve_ready_iam_handle() else { let Ok(iam_store) = crate::admin::runtime_sources::resolve_ready_iam_handle() else {
return Err(s3_error!(InvalidRequest, "iam not init")); return Err(s3_error!(InvalidRequest, "iam not init"));
}; };
@@ -26,16 +26,16 @@ use super::super::{AdminReplicationConfigExt as _, AdminVersioningConfigExt as _
use super::super::{delete_admin_config, read_admin_config, save_admin_config}; use super::super::{delete_admin_config, read_admin_config, save_admin_config};
use crate::admin::auth::validate_admin_request; use crate::admin::auth::validate_admin_request;
use crate::admin::router::{AdminOperation, Operation, S3Router}; use crate::admin::router::{AdminOperation, Operation, S3Router};
use crate::admin::runtime_sources::{
resolve_deployment_id, resolve_endpoints_handle, resolve_iam_handle, resolve_object_store_handle, resolve_oidc_handle,
resolve_outbound_tls_generation, resolve_outbound_tls_state, resolve_region, resolve_replication_pool_handle,
resolve_replication_stats_handle, resolve_runtime_port, resolve_server_config, resolve_token_signing_key,
};
use crate::admin::site_replication_identity::{ use crate::admin::site_replication_identity::{
canonical_endpoint, deployment_id_for_endpoint, normalize_peer_map_by_identity_with, same_identity_endpoint, canonical_endpoint, deployment_id_for_endpoint, normalize_peer_map_by_identity_with, same_identity_endpoint,
site_identity_key, site_identity_key,
}; };
use crate::admin::utils::{encode_compatible_admin_payload, read_compatible_admin_body}; use crate::admin::utils::{encode_compatible_admin_payload, read_compatible_admin_body};
use crate::app::context::{
resolve_deployment_id, resolve_endpoints_handle, resolve_iam_handle, resolve_object_store_handle, resolve_oidc_handle,
resolve_outbound_tls_generation, resolve_outbound_tls_state, resolve_region, resolve_replication_pool_handle,
resolve_replication_stats_handle, resolve_runtime_port, resolve_server_config, resolve_token_signing_key,
};
use crate::auth::{check_key_valid, get_session_token}; use crate::auth::{check_key_valid, get_session_token};
use crate::config::get_config_snapshot; use crate::config::get_config_snapshot;
use crate::error::ApiError; use crate::error::ApiError;
@@ -4603,7 +4603,7 @@ mod tests {
use super::super::super::Endpoint; use super::super::super::Endpoint;
use super::super::super::{EndpointServerPools, Endpoints, PoolEndpoints}; use super::super::super::{EndpointServerPools, Endpoints, PoolEndpoints};
use super::*; use super::*;
use crate::app::context::{resolve_outbound_tls_generation, set_test_outbound_tls_generation}; use crate::admin::runtime_sources::{resolve_outbound_tls_generation, set_test_outbound_tls_generation};
use http::{HeaderMap, HeaderValue, Uri}; use http::{HeaderMap, HeaderValue, Uri};
use rustfs_policy::policy::action::S3Action; use rustfs_policy::policy::action::S3Action;
use serial_test::serial; use serial_test::serial;
+2 -2
View File
@@ -188,7 +188,7 @@ async fn handle_assume_role(
return Err(s3_error!(InvalidRequest, "AccessDenied")); return Err(s3_error!(InvalidRequest, "AccessDenied"));
} }
let Ok(iam_store) = crate::app::context::resolve_ready_iam_handle() else { let Ok(iam_store) = crate::admin::runtime_sources::resolve_ready_iam_handle() else {
return Err(s3_error!(InvalidRequest, "iam not init")); return Err(s3_error!(InvalidRequest, "iam not init"));
}; };
let conditions = crate::auth::get_condition_values(&headers, &cred, None, None, remote_addr); let conditions = crate::auth::get_condition_values(&headers, &cred, None, None, remote_addr);
@@ -441,7 +441,7 @@ pub async fn create_oidc_sts_credentials(
// Store temp user in IAM // Store temp user in IAM
let iam_store = let iam_store =
crate::app::context::resolve_ready_iam_handle().map_err(|_| s3_error!(InternalError, "IAM not initialized"))?; crate::admin::runtime_sources::resolve_ready_iam_handle().map_err(|_| s3_error!(InternalError, "IAM not initialized"))?;
let updated_at = iam_store let updated_at = iam_store
.set_temp_user(&new_cred.access_key, &new_cred, None) .set_temp_user(&new_cred.access_key, &new_cred, None)
+1 -1
View File
@@ -15,8 +15,8 @@
use super::{cluster_snapshot, metrics}; use super::{cluster_snapshot, metrics};
use crate::admin::auth::validate_admin_request; use crate::admin::auth::validate_admin_request;
use crate::admin::router::{AdminOperation, Operation, S3Router}; use crate::admin::router::{AdminOperation, Operation, S3Router};
use crate::admin::runtime_sources::resolve_endpoints_handle;
use crate::app::admin_usecase::{DefaultAdminUsecase, QueryServerInfoRequest}; use crate::app::admin_usecase::{DefaultAdminUsecase, QueryServerInfoRequest};
use crate::app::context::resolve_endpoints_handle;
use crate::auth::{check_key_valid, get_session_token}; use crate::auth::{check_key_valid, get_session_token};
use crate::runtime_capabilities::{EndpointTopologySnapshotProvider, RustFsObservabilitySnapshotProvider}; use crate::runtime_capabilities::{EndpointTopologySnapshotProvider, RustFsObservabilitySnapshotProvider};
use crate::server::{ADMIN_PREFIX, RemoteAddr}; use crate::server::{ADMIN_PREFIX, RemoteAddr};
+3 -2
View File
@@ -13,12 +13,12 @@
// limitations under the License. // limitations under the License.
use super::super::{ECStore, metadata::table_catalog_path_hash, metadata_sys}; use super::super::{ECStore, metadata::table_catalog_path_hash, metadata_sys};
use crate::admin::runtime_sources::{resolve_object_store_handle, resolve_token_signing_key};
use crate::admin::{ use crate::admin::{
auth::{AdminResourceScope, validate_admin_request, validate_admin_request_with_bucket_object}, auth::{AdminResourceScope, validate_admin_request, validate_admin_request_with_bucket_object},
router::{AdminOperation, Operation, S3Router}, router::{AdminOperation, Operation, S3Router},
}; };
use crate::app::admin_usecase::DefaultAdminUsecase; use crate::app::admin_usecase::DefaultAdminUsecase;
use crate::app::context::{resolve_object_store_handle, resolve_token_signing_key};
use crate::auth::{check_key_valid, get_session_token}; use crate::auth::{check_key_valid, get_session_token};
use crate::server::{RemoteAddr, TABLE_CATALOG_COMPAT_PREFIX, TABLE_CATALOG_PREFIX}; use crate::server::{RemoteAddr, TABLE_CATALOG_COMPAT_PREFIX, TABLE_CATALOG_PREFIX};
use crate::table_catalog::{DEFAULT_WAREHOUSE_ID, TableCatalogStore}; use crate::table_catalog::{DEFAULT_WAREHOUSE_ID, TableCatalogStore};
@@ -713,7 +713,8 @@ impl TableCredentialIssuer for IamTableCredentialIssuer {
.map_err(|err| s3_error!(InternalError, "failed to generate table credentials: {}", err))?; .map_err(|err| s3_error!(InternalError, "failed to generate table credentials: {}", err))?;
bind_table_credential_parent(&mut credential, principal); bind_table_credential_parent(&mut credential, principal);
let iam_store = crate::app::context::resolve_ready_iam_handle().map_err(|_| s3_error!(InternalError, "iam not init"))?; let iam_store =
crate::admin::runtime_sources::resolve_ready_iam_handle().map_err(|_| s3_error!(InternalError, "iam not init"))?;
iam_store iam_store
.set_temp_user(&credential.access_key, &credential, None) .set_temp_user(&credential.access_key, &credential, None)
.await .await
+1 -1
View File
@@ -14,7 +14,7 @@
use super::profile::authorize_profile_request; use super::profile::authorize_profile_request;
use crate::admin::router::{AdminOperation, Operation, S3Router}; use crate::admin::router::{AdminOperation, Operation, S3Router};
use crate::app::context::resolve_outbound_tls_state; use crate::admin::runtime_sources::resolve_outbound_tls_state;
use crate::server::ADMIN_PREFIX; use crate::server::ADMIN_PREFIX;
use http::StatusCode; use http::StatusCode;
use http::{HeaderMap, HeaderValue}; use http::{HeaderMap, HeaderValue};
+1 -1
View File
@@ -14,7 +14,7 @@
use super::super::PeerRestClient; use super::super::PeerRestClient;
use crate::admin::router::Operation; use crate::admin::router::Operation;
use crate::app::context::resolve_endpoints_handle; use crate::admin::runtime_sources::resolve_endpoints_handle;
use http::StatusCode; use http::StatusCode;
use hyper::Uri; use hyper::Uri;
use matchit::Params; use matchit::Params;
+7 -7
View File
@@ -227,7 +227,7 @@ impl Operation for AddUser {
return Err(s3_error!(InvalidArgument, "cannot create a user with the system access key")); return Err(s3_error!(InvalidArgument, "cannot create a user with the system access key"));
} }
let Ok(iam_store) = crate::app::context::resolve_ready_iam_handle() else { let Ok(iam_store) = crate::admin::runtime_sources::resolve_ready_iam_handle() else {
return Err(s3_error!(InternalError, "iam is not initialized")); return Err(s3_error!(InternalError, "iam is not initialized"));
}; };
@@ -356,7 +356,7 @@ impl Operation for SetUserStatus {
let status = AccountStatus::try_from(query.status.as_deref().unwrap_or_default()) let status = AccountStatus::try_from(query.status.as_deref().unwrap_or_default())
.map_err(|e| S3Error::with_message(S3ErrorCode::InvalidArgument, e))?; .map_err(|e| S3Error::with_message(S3ErrorCode::InvalidArgument, e))?;
let Ok(iam_store) = crate::app::context::resolve_ready_iam_handle() else { let Ok(iam_store) = crate::admin::runtime_sources::resolve_ready_iam_handle() else {
return Err(s3_error!(InternalError, "iam is not initialized")); return Err(s3_error!(InternalError, "iam is not initialized"));
}; };
@@ -408,7 +408,7 @@ impl Operation for ListUsers {
} }
}; };
let Ok(iam_store) = crate::app::context::resolve_ready_iam_handle() else { let Ok(iam_store) = crate::admin::runtime_sources::resolve_ready_iam_handle() else {
return Err(s3_error!(InternalError, "iam is not initialized")); return Err(s3_error!(InternalError, "iam is not initialized"));
}; };
@@ -481,7 +481,7 @@ impl Operation for RemoveUser {
return Err(s3_error!(InvalidArgument, "cannot remove the current user")); return Err(s3_error!(InvalidArgument, "cannot remove the current user"));
} }
let Ok(iam_store) = crate::app::context::resolve_ready_iam_handle() else { let Ok(iam_store) = crate::admin::runtime_sources::resolve_ready_iam_handle() else {
return Err(s3_error!(InternalError, "iam is not initialized")); return Err(s3_error!(InternalError, "iam is not initialized"));
}; };
@@ -558,7 +558,7 @@ impl Operation for GetUserInfo {
return Err(s3_error!(InvalidArgument, "access key is empty")); return Err(s3_error!(InvalidArgument, "access key is empty"));
} }
let Ok(iam_store) = crate::app::context::resolve_ready_iam_handle() else { let Ok(iam_store) = crate::admin::runtime_sources::resolve_ready_iam_handle() else {
return Err(s3_error!(InternalError, "iam is not initialized")); return Err(s3_error!(InternalError, "iam is not initialized"));
}; };
@@ -654,7 +654,7 @@ impl Operation for ExportIam {
) )
.await?; .await?;
let Ok(iam_store) = crate::app::context::resolve_ready_iam_handle() else { let Ok(iam_store) = crate::admin::runtime_sources::resolve_ready_iam_handle() else {
return Err(s3_error!(InvalidRequest, "iam not init")); return Err(s3_error!(InvalidRequest, "iam not init"));
}; };
@@ -888,7 +888,7 @@ impl Operation for ImportIam {
let mut zip_reader = let mut zip_reader =
ZipArchive::new(Cursor::new(body)).map_err(|e| S3Error::with_message(S3ErrorCode::InternalError, e.to_string()))?; ZipArchive::new(Cursor::new(body)).map_err(|e| S3Error::with_message(S3ErrorCode::InternalError, e.to_string()))?;
let Ok(iam_store) = crate::app::context::resolve_ready_iam_handle() else { let Ok(iam_store) = crate::admin::runtime_sources::resolve_ready_iam_handle() else {
return Err(s3_error!(InvalidRequest, "iam not init")); return Err(s3_error!(InvalidRequest, "iam not init"));
}; };
+1
View File
@@ -21,6 +21,7 @@ mod plugin_contract;
#[allow(dead_code)] #[allow(dead_code)]
pub(crate) mod route_policy; pub(crate) mod route_policy;
pub mod router; pub mod router;
pub(crate) mod runtime_sources;
pub mod service; pub mod service;
pub mod site_replication_identity; pub mod site_replication_identity;
pub mod utils; pub mod utils;
+1 -1
View File
@@ -24,7 +24,7 @@ use super::versioning_sys::BucketVersioningSys;
use super::{AdminReplicationConfigExt as _, AdminVersioningConfigExt as _}; use super::{AdminReplicationConfigExt as _, AdminVersioningConfigExt as _};
use crate::admin::console::{is_console_path, make_console_server}; use crate::admin::console::{is_console_path, make_console_server};
use crate::admin::handlers::oidc::is_oidc_path; use crate::admin::handlers::oidc::is_oidc_path;
use crate::app::context::{ use crate::admin::runtime_sources::{
resolve_boot_time, resolve_bucket_monitor_handle, resolve_deployment_id, resolve_notification_system, resolve_boot_time, resolve_bucket_monitor_handle, resolve_deployment_id, resolve_notification_system,
resolve_object_store_handle, resolve_region, resolve_replication_pool_handle, resolve_replication_stats_handle, resolve_object_store_handle, resolve_region, resolve_replication_pool_handle, resolve_replication_stats_handle,
resolve_server_config, resolve_server_config,
+26
View File
@@ -0,0 +1,26 @@
// 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.
pub(crate) use crate::app::context::{
AppContext, get_global_app_context, publish_server_config, publish_storage_class_config, resolve_action_credentials,
resolve_boot_time, resolve_bucket_metadata_handle, resolve_bucket_monitor_handle, resolve_deployment_id,
resolve_endpoints_handle, resolve_iam_handle, resolve_kms_runtime_service_manager, resolve_notification_system,
resolve_object_store_handle, resolve_object_store_handle_for_context, resolve_oidc_handle,
resolve_or_init_kms_runtime_service_manager, resolve_outbound_tls_generation, resolve_outbound_tls_state,
resolve_ready_iam_handle, resolve_region, resolve_replication_pool_handle, resolve_replication_stats_handle,
resolve_runtime_port, resolve_scanner_metrics_report, resolve_server_config, resolve_token_signing_key,
};
#[cfg(test)]
pub(crate) use crate::app::context::set_test_outbound_tls_generation;
+1 -1
View File
@@ -14,7 +14,7 @@
use super::super::storageclass; use super::super::storageclass;
use super::super::{STORAGE_CLASS_SUB_SYS, read_admin_config_without_migrate}; use super::super::{STORAGE_CLASS_SUB_SYS, read_admin_config_without_migrate};
use crate::app::context::{ use crate::admin::runtime_sources::{
AppContext, get_global_app_context, publish_server_config, publish_storage_class_config, resolve_notification_system, AppContext, get_global_app_context, publish_server_config, publish_storage_class_config, resolve_notification_system,
resolve_object_store_handle, resolve_object_store_handle_for_context, resolve_object_store_handle, resolve_object_store_handle_for_context,
}; };
+1 -1
View File
@@ -14,8 +14,8 @@
use super::super::Error as StorageError; use super::super::Error as StorageError;
use super::super::{read_admin_config, save_admin_config}; use super::super::{read_admin_config, save_admin_config};
use crate::admin::runtime_sources::{AppContext, get_global_app_context, resolve_object_store_handle_for_context};
use crate::admin::site_replication_identity::{deployment_id_for_endpoint, normalize_peer_map_by_identity_with}; use crate::admin::site_replication_identity::{deployment_id_for_endpoint, normalize_peer_map_by_identity_with};
use crate::app::context::{AppContext, get_global_app_context, resolve_object_store_handle_for_context};
use rustfs_madmin::PeerInfo; use rustfs_madmin::PeerInfo;
use s3s::{S3Error, S3ErrorCode, S3Result}; use s3s::{S3Error, S3ErrorCode, S3Result};
use serde_json::{Map, Value}; use serde_json::{Map, Value};
@@ -156,6 +156,7 @@ RUSTFS_APP_CONTEXT_RUNTIME_SOURCE_BYPASS_HITS_FILE="${TMP_DIR}/rustfs_app_contex
RUSTFS_STARTUP_RUNTIME_SOURCE_BYPASS_HITS_FILE="${TMP_DIR}/rustfs_startup_runtime_source_bypass_hits.txt" RUSTFS_STARTUP_RUNTIME_SOURCE_BYPASS_HITS_FILE="${TMP_DIR}/rustfs_startup_runtime_source_bypass_hits.txt"
RUSTFS_SERVER_RUNTIME_SOURCE_BYPASS_HITS_FILE="${TMP_DIR}/rustfs_server_runtime_source_bypass_hits.txt" RUSTFS_SERVER_RUNTIME_SOURCE_BYPASS_HITS_FILE="${TMP_DIR}/rustfs_server_runtime_source_bypass_hits.txt"
RUSTFS_STORAGE_RUNTIME_SOURCE_BYPASS_HITS_FILE="${TMP_DIR}/rustfs_storage_runtime_source_bypass_hits.txt" RUSTFS_STORAGE_RUNTIME_SOURCE_BYPASS_HITS_FILE="${TMP_DIR}/rustfs_storage_runtime_source_bypass_hits.txt"
RUSTFS_ADMIN_RUNTIME_SOURCE_BYPASS_HITS_FILE="${TMP_DIR}/rustfs_admin_runtime_source_bypass_hits.txt"
awk ' awk '
/^## PR Types$/ { /^## PR Types$/ {
@@ -1372,6 +1373,16 @@ if [[ -s "$RUSTFS_STORAGE_RUNTIME_SOURCE_BYPASS_HITS_FILE" ]]; then
report_failure "RustFS storage runtime source reads must stay behind rustfs/src/storage/runtime_sources.rs: $(paste -sd '; ' "$RUSTFS_STORAGE_RUNTIME_SOURCE_BYPASS_HITS_FILE")" report_failure "RustFS storage runtime source reads must stay behind rustfs/src/storage/runtime_sources.rs: $(paste -sd '; ' "$RUSTFS_STORAGE_RUNTIME_SOURCE_BYPASS_HITS_FILE")"
fi fi
(
cd "$ROOT_DIR"
rg -n --with-filename 'crate::app::context::|use crate::app::context' rustfs/src/admin \
| rg -v '^rustfs/src/admin/runtime_sources\.rs:' || true
) >"$RUSTFS_ADMIN_RUNTIME_SOURCE_BYPASS_HITS_FILE"
if [[ -s "$RUSTFS_ADMIN_RUNTIME_SOURCE_BYPASS_HITS_FILE" ]]; then
report_failure "RustFS admin runtime source reads must stay behind rustfs/src/admin/runtime_sources.rs: $(paste -sd '; ' "$RUSTFS_ADMIN_RUNTIME_SOURCE_BYPASS_HITS_FILE")"
fi
( (
cd "$ROOT_DIR" cd "$ROOT_DIR"
rg -n --with-filename 'rustfs_ecstore::api::' \ rg -n --with-filename 'rustfs_ecstore::api::' \