From 0f8bc461d64530dc8bfafd8aad3b99a75e34eba4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=89=E6=AD=A3=E8=B6=85?= Date: Thu, 26 Feb 2026 13:31:59 +0800 Subject: [PATCH] refactor(admin): route kms handlers through app context (#1967) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 安正超 Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- rustfs/src/admin/handlers/kms.rs | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/rustfs/src/admin/handlers/kms.rs b/rustfs/src/admin/handlers/kms.rs index e6bf1daa4..44684430c 100644 --- a/rustfs/src/admin/handlers/kms.rs +++ b/rustfs/src/admin/handlers/kms.rs @@ -17,11 +17,12 @@ use super::{kms_dynamic, kms_keys, kms_management}; use crate::admin::auth::validate_admin_request; use crate::admin::router::{AdminOperation, Operation, S3Router}; +use crate::app::context::resolve_kms_runtime_service_manager; use crate::auth::{check_key_valid, get_session_token}; use crate::server::RemoteAddr; use hyper::{HeaderMap, StatusCode}; use matchit::Params; -use rustfs_kms::get_global_encryption_service; +use rustfs_kms::init_global_kms_service_manager; use rustfs_policy::policy::action::{Action, AdminAction}; use s3s::header::CONTENT_TYPE; use s3s::{Body, S3Request, S3Response, S3Result, s3_error}; @@ -29,6 +30,17 @@ use serde::{Deserialize, Serialize}; use serde_json; use tracing::{error, info, warn}; +async fn kms_encryption_service_from_context() -> Option> { + let manager = match resolve_kms_runtime_service_manager() { + Some(manager) => manager, + None => { + warn!("KMS service manager not initialized, initializing now as fallback"); + init_global_kms_service_manager() + } + }; + manager.get_encryption_service().await +} + #[derive(Debug, Serialize, Deserialize)] pub struct KmsStatusResponse { pub backend_type: String, @@ -83,7 +95,7 @@ impl Operation for KmsStatusHandler { ) .await?; - let Some(service) = get_global_encryption_service().await else { + let Some(service) = kms_encryption_service_from_context().await else { return Err(s3_error!(InternalError, "KMS service not initialized")); }; @@ -141,7 +153,7 @@ impl Operation for KmsConfigHandler { ) .await?; - let Some(service) = get_global_encryption_service().await else { + let Some(service) = kms_encryption_service_from_context().await else { return Err(s3_error!(InternalError, "KMS service not initialized")); }; @@ -186,7 +198,7 @@ impl Operation for KmsClearCacheHandler { ) .await?; - let Some(service) = get_global_encryption_service().await else { + let Some(service) = kms_encryption_service_from_context().await else { return Err(s3_error!(InternalError, "KMS service not initialized")); };