feat: display error information when unix socket is not exist (#447)

Signed-off-by: Gaius <gaius.qi@gmail.com>
This commit is contained in:
Gaius 2024-05-08 16:05:39 +08:00 committed by GitHub
parent 2e36483a09
commit c5af577b50
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 13 additions and 6 deletions

View File

@ -23,7 +23,7 @@ use dragonfly_client::grpc::health::HealthClient;
use dragonfly_client::tracing::init_tracing; use dragonfly_client::tracing::init_tracing;
use dragonfly_client_config::{self, default_piece_length, dfdaemon, dfget}; use dragonfly_client_config::{self, default_piece_length, dfdaemon, dfget};
use dragonfly_client_core::{ use dragonfly_client_core::{
error::{ErrorType, OrErr}, error::{ErrorType, ExternalError, OrErr},
Error, Result, Error, Result,
}; };
use dragonfly_client_util::http::header_vec_to_hashmap; use dragonfly_client_util::http::header_vec_to_hashmap;
@ -35,7 +35,7 @@ use std::time::Duration;
use std::{cmp::min, fmt::Write}; use std::{cmp::min, fmt::Write};
use termion::{color, style}; use termion::{color, style};
use tokio::process::{Child, Command}; use tokio::process::{Child, Command};
use tracing::{debug, error, info, Level}; use tracing::{error, info, Level};
use url::Url; use url::Url;
// DEFAULT_DFDAEMON_CHECK_HEALTH_INTERVAL is the default interval of checking dfdaemon's health. // DEFAULT_DFDAEMON_CHECK_HEALTH_INTERVAL is the default interval of checking dfdaemon's health.
@ -450,7 +450,7 @@ async fn get_or_create_dfdaemon_download_client(
// Get dfdaemon download client and check its health. // Get dfdaemon download client and check its health.
match get_dfdaemon_download_client(endpoint.clone()).await { match get_dfdaemon_download_client(endpoint.clone()).await {
Ok(dfdaemon_download_client) => return Ok(dfdaemon_download_client), Ok(dfdaemon_download_client) => return Ok(dfdaemon_download_client),
Err(err) => debug!("get dfdaemon download client failed: {}", err), Err(err) => error!("get dfdaemon download client failed: {}", err),
} }
// Create a lock file to prevent multiple dfdaemon processes from being created. // Create a lock file to prevent multiple dfdaemon processes from being created.
@ -460,11 +460,18 @@ async fn get_or_create_dfdaemon_download_client(
// Check dfdaemon download client again. // Check dfdaemon download client again.
match get_dfdaemon_download_client(endpoint.clone()).await { match get_dfdaemon_download_client(endpoint.clone()).await {
Ok(dfdaemon_download_client) => return Ok(dfdaemon_download_client), Ok(dfdaemon_download_client) => return Ok(dfdaemon_download_client),
Err(err) => debug!("get dfdaemon download client failed: {}", err), Err(err) => error!("get dfdaemon download client failed: {}", err),
} }
// Spawn a dfdaemon process. // Spawn a dfdaemon process.
let child = spawn_dfdaemon(config_path, log_dir, log_level, log_max_files)?; let child = spawn_dfdaemon(config_path, log_dir, log_level, log_max_files).map_err(|err| {
error!("spawn dfdaemon process failed: {}", err);
ExternalError::new(ErrorType::ConfigError).with_context(format!(
"Dfdaemon's unix socket is not exist in path: {:?}. dfget will spawn a dfdaemon process automatically, but spawn failed: {}. If you need to use the existing dfdaemon, please set the correct path of the dfdaemon's unix socket with --endpoint option.",
endpoint.to_string_lossy(),
err
))
})?;
info!("spawn dfdaemon process: {:?}", child); info!("spawn dfdaemon process: {:?}", child);
// Initialize the timeout of checking dfdaemon's health. // Initialize the timeout of checking dfdaemon's health.
@ -481,7 +488,7 @@ async fn get_or_create_dfdaemon_download_client(
f.unlock()?; f.unlock()?;
return Ok(dfdaemon_download_client); return Ok(dfdaemon_download_client);
} }
Err(err) => debug!("get dfdaemon download client failed: {}", err), Err(err) => error!("get dfdaemon download client failed: {}", err),
} }
} }
_ = &mut check_health_timeout => { _ = &mut check_health_timeout => {