mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-18 18:46:17 +00:00
fix: correct ARN parsing for notification targets (#1010)
Co-authored-by: Andrew Leng <work@Andrews-MacBook-Air.local> Co-authored-by: houseme <housemecn@gmail.com>
This commit is contained in:
+16
-5
@@ -60,12 +60,11 @@ use rustfs_ecstore::{
|
|||||||
use rustfs_iam::init_iam_sys;
|
use rustfs_iam::init_iam_sys;
|
||||||
use rustfs_notify::notifier_global;
|
use rustfs_notify::notifier_global;
|
||||||
use rustfs_obs::{init_obs, set_global_guard};
|
use rustfs_obs::{init_obs, set_global_guard};
|
||||||
use rustfs_targets::arn::TargetID;
|
use rustfs_targets::arn::{ARN, TargetIDError};
|
||||||
use rustfs_utils::net::parse_and_resolve_address;
|
use rustfs_utils::net::parse_and_resolve_address;
|
||||||
use s3s::s3_error;
|
use s3s::s3_error;
|
||||||
use std::env;
|
use std::env;
|
||||||
use std::io::{Error, Result};
|
use std::io::{Error, Result};
|
||||||
use std::str::FromStr;
|
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use tokio_util::sync::CancellationToken;
|
use tokio_util::sync::CancellationToken;
|
||||||
use tracing::{debug, error, info, instrument, warn};
|
use tracing::{debug, error, info, instrument, warn};
|
||||||
@@ -516,9 +515,21 @@ async fn add_bucket_notification_configuration(buckets: Vec<String>) {
|
|||||||
"Bucket '{}' has existing notification configuration: {:?}", bucket, cfg);
|
"Bucket '{}' has existing notification configuration: {:?}", bucket, cfg);
|
||||||
|
|
||||||
let mut event_rules = Vec::new();
|
let mut event_rules = Vec::new();
|
||||||
process_queue_configurations(&mut event_rules, cfg.queue_configurations.clone(), TargetID::from_str);
|
process_queue_configurations(&mut event_rules, cfg.queue_configurations.clone(), |arn_str| {
|
||||||
process_topic_configurations(&mut event_rules, cfg.topic_configurations.clone(), TargetID::from_str);
|
ARN::parse(arn_str)
|
||||||
process_lambda_configurations(&mut event_rules, cfg.lambda_function_configurations.clone(), TargetID::from_str);
|
.map(|arn| arn.target_id)
|
||||||
|
.map_err(|e| TargetIDError::InvalidFormat(e.to_string()))
|
||||||
|
});
|
||||||
|
process_topic_configurations(&mut event_rules, cfg.topic_configurations.clone(), |arn_str| {
|
||||||
|
ARN::parse(arn_str)
|
||||||
|
.map(|arn| arn.target_id)
|
||||||
|
.map_err(|e| TargetIDError::InvalidFormat(e.to_string()))
|
||||||
|
});
|
||||||
|
process_lambda_configurations(&mut event_rules, cfg.lambda_function_configurations.clone(), |arn_str| {
|
||||||
|
ARN::parse(arn_str)
|
||||||
|
.map(|arn| arn.target_id)
|
||||||
|
.map_err(|e| TargetIDError::InvalidFormat(e.to_string()))
|
||||||
|
});
|
||||||
|
|
||||||
if let Err(e) = notifier_global::add_event_specific_rules(bucket, region, &event_rules)
|
if let Err(e) = notifier_global::add_event_specific_rules(bucket, region, &event_rules)
|
||||||
.await
|
.await
|
||||||
|
|||||||
+16
-12
@@ -108,7 +108,7 @@ use rustfs_s3select_api::{
|
|||||||
use rustfs_s3select_query::get_global_db;
|
use rustfs_s3select_query::get_global_db;
|
||||||
use rustfs_targets::{
|
use rustfs_targets::{
|
||||||
EventName,
|
EventName,
|
||||||
arn::{TargetID, TargetIDError},
|
arn::{ARN, TargetID, TargetIDError},
|
||||||
};
|
};
|
||||||
use rustfs_utils::{
|
use rustfs_utils::{
|
||||||
CompressionAlgorithm, extract_req_params_header, extract_resp_elements, get_request_host, get_request_user_agent,
|
CompressionAlgorithm, extract_req_params_header, extract_resp_elements, get_request_host, get_request_user_agent,
|
||||||
@@ -4869,20 +4869,24 @@ impl S3 for FS {
|
|||||||
let parse_rules = async {
|
let parse_rules = async {
|
||||||
let mut event_rules = Vec::new();
|
let mut event_rules = Vec::new();
|
||||||
|
|
||||||
process_queue_configurations(
|
process_queue_configurations(&mut event_rules, notification_configuration.queue_configurations.clone(), |arn_str| {
|
||||||
&mut event_rules,
|
ARN::parse(arn_str)
|
||||||
notification_configuration.queue_configurations.clone(),
|
.map(|arn| arn.target_id)
|
||||||
TargetID::from_str,
|
.map_err(|e| TargetIDError::InvalidFormat(e.to_string()))
|
||||||
);
|
});
|
||||||
process_topic_configurations(
|
process_topic_configurations(&mut event_rules, notification_configuration.topic_configurations.clone(), |arn_str| {
|
||||||
&mut event_rules,
|
ARN::parse(arn_str)
|
||||||
notification_configuration.topic_configurations.clone(),
|
.map(|arn| arn.target_id)
|
||||||
TargetID::from_str,
|
.map_err(|e| TargetIDError::InvalidFormat(e.to_string()))
|
||||||
);
|
});
|
||||||
process_lambda_configurations(
|
process_lambda_configurations(
|
||||||
&mut event_rules,
|
&mut event_rules,
|
||||||
notification_configuration.lambda_function_configurations.clone(),
|
notification_configuration.lambda_function_configurations.clone(),
|
||||||
TargetID::from_str,
|
|arn_str| {
|
||||||
|
ARN::parse(arn_str)
|
||||||
|
.map(|arn| arn.target_id)
|
||||||
|
.map_err(|e| TargetIDError::InvalidFormat(e.to_string()))
|
||||||
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
event_rules
|
event_rules
|
||||||
|
|||||||
Reference in New Issue
Block a user