mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-22 12:26:37 +00:00
refactor(targets): unify endpoint source/merge logic and bump rustfs-kafka-async to v1.2.0 (#2654)
Co-authored-by: Filipe Monteiro <a22407332@alunos.ulht.pt> Co-authored-by: cxymds <Cxymds@qq.com> Co-authored-by: weisd <im@weisd.in> Co-authored-by: loverustfs <hello@rustfs.com>
This commit is contained in:
@@ -128,3 +128,50 @@ pub async fn check_pulsar_broker_available(args: &crate::target::pulsar::PulsarA
|
||||
Err(_) => Err(crate::TargetError::Timeout("Pulsar connection timed out".to_string())),
|
||||
}
|
||||
}
|
||||
|
||||
pub async fn check_kafka_broker_available(args: &crate::target::kafka::KafkaArgs) -> Result<(), crate::TargetError> {
|
||||
use rustfs_kafka_async::error::{ConnectionError, Error as KafkaError};
|
||||
use rustfs_kafka_async::{AsyncProducer, AsyncProducerConfig, RequiredAcks, SecurityConfig};
|
||||
use std::time::Duration;
|
||||
|
||||
let map_kafka_error = |err: KafkaError, context: &str| match err {
|
||||
KafkaError::Connection(ConnectionError::NoHostReachable) => crate::TargetError::NotConnected,
|
||||
KafkaError::Connection(ConnectionError::Timeout(_)) => crate::TargetError::Timeout(format!("{context}: {err}")),
|
||||
KafkaError::Connection(_) => crate::TargetError::Network(format!("{context}: {err}")),
|
||||
KafkaError::Config(_) => crate::TargetError::Configuration(format!("{context}: {err}")),
|
||||
_ => crate::TargetError::Request(format!("{context}: {err}")),
|
||||
};
|
||||
|
||||
let acks = match args.acks {
|
||||
0 => RequiredAcks::None,
|
||||
1 => RequiredAcks::One,
|
||||
_ => RequiredAcks::All,
|
||||
};
|
||||
|
||||
let mut config = AsyncProducerConfig::new()
|
||||
.with_ack_timeout(Duration::from_secs(5))
|
||||
.with_required_acks(acks);
|
||||
|
||||
if args.tls_enable {
|
||||
let mut security = SecurityConfig::new();
|
||||
if !args.tls_ca.is_empty() {
|
||||
security = security.with_ca_cert(args.tls_ca.clone());
|
||||
}
|
||||
if !args.tls_client_cert.is_empty() && !args.tls_client_key.is_empty() {
|
||||
security = security.with_client_cert(args.tls_client_cert.clone(), args.tls_client_key.clone());
|
||||
}
|
||||
config = config.with_security(security);
|
||||
}
|
||||
|
||||
match tokio::time::timeout(Duration::from_secs(5), async {
|
||||
let _ = AsyncProducer::from_hosts_with_config(args.brokers.clone(), config)
|
||||
.await
|
||||
.map_err(|err| map_kafka_error(err, "Kafka broker check failed to create producer"))?;
|
||||
Ok(())
|
||||
})
|
||||
.await
|
||||
{
|
||||
Ok(result) => result,
|
||||
Err(_) => Err(crate::TargetError::Timeout("Kafka connection timed out".to_string())),
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user