284 lines
11 KiB
Diff
284 lines
11 KiB
Diff
From 09c44e3e4877a283bdb9bfca6ac1036513f2f2c1 Mon Sep 17 00:00:00 2001
|
|
From: licunlong <licunlong1@huawei.com>
|
|
Date: Wed, 5 Jul 2023 16:29:35 +0800
|
|
Subject: [PATCH] fix: log message out when we create/delete a file or
|
|
directory
|
|
|
|
---
|
|
coms/service/src/mng.rs | 9 ++-------
|
|
core/libsysmaster/rel/api.rs | 17 ++++++++++-------
|
|
core/libsysmaster/rel/history.rs | 23 ++++++++++-------------
|
|
core/sysmaster/manager/commands.rs | 9 ++++++---
|
|
core/sysmaster/unit/sigchld.rs | 5 ++++-
|
|
init/src/runtime/comm.rs | 12 ++++++++----
|
|
libs/cgroup/src/cgroup.rs | 9 +++++++--
|
|
9 files changed, 53 insertions(+), 46 deletions(-)
|
|
|
|
diff --git a/coms/service/src/mng.rs b/coms/service/src/mng.rs
|
|
index 4bf20bd..b44a0dd 100644
|
|
--- a/coms/service/src/mng.rs
|
|
+++ b/coms/service/src/mng.rs
|
|
@@ -20,7 +20,7 @@ use super::rentry::{
|
|
};
|
|
use super::spawn::ServiceSpawn;
|
|
use crate::rentry::{ExitStatus, PreserveMode};
|
|
-use basic::{fd_util, IN_SET};
|
|
+use basic::{do_entry_log, fd_util, IN_SET};
|
|
use basic::{file_util, process_util};
|
|
use event::{EventState, EventType, Events, Source};
|
|
use log::Level;
|
|
@@ -623,12 +623,7 @@ impl ServiceMng {
|
|
}
|
|
|
|
if let Some(p) = self.config.pid_file() {
|
|
- if let Err(e) = nix::unistd::unlink(&p) {
|
|
- log::warn!(
|
|
- "{}",
|
|
- format!("failed to unlink pid file: {:?}, error: {}", p, e)
|
|
- );
|
|
- }
|
|
+ do_entry_log!(nix::unistd::unlink, p, "unlink");
|
|
}
|
|
}
|
|
|
|
diff --git a/core/libsysmaster/rel/api.rs b/core/libsysmaster/rel/api.rs
|
|
index ad14796..fb482b8 100644
|
|
--- a/core/libsysmaster/rel/api.rs
|
|
+++ b/core/libsysmaster/rel/api.rs
|
|
@@ -19,6 +19,7 @@ use super::{
|
|
ReDbTable, ReStation, ReStationKind,
|
|
};
|
|
use crate::{error::*, rel::base};
|
|
+use basic::do_entry_or_return_io_error;
|
|
use heed::Database;
|
|
use std::{
|
|
fs::{self, File},
|
|
@@ -267,6 +268,7 @@ impl Reliability {
|
|
} else {
|
|
log::info!("reliability debug_clear: first time, try clear.");
|
|
File::create(&cfirst).unwrap();
|
|
+ log::debug!("Successfully created {cfirst:?}");
|
|
log::info!("reliability debug_clear: first time, clear ...");
|
|
|
|
// clear data excluding enable
|
|
@@ -289,6 +291,7 @@ impl Reliability {
|
|
} else {
|
|
log::info!("reliability debug_panic: first time, try panic.");
|
|
File::create(&pfirst).unwrap();
|
|
+ log::debug!("Successfully created {pfirst:?}");
|
|
log::info!("reliability debug_panic: first time, panic ...");
|
|
panic!("first debug_panic.");
|
|
}
|
|
@@ -366,15 +369,15 @@ impl Reliability {
|
|
pub fn reli_debug_enable_switch(enable: bool) -> Result<()> {
|
|
log::info!("reliability debug: enable[{}] switch.", enable);
|
|
|
|
- // [enable]touch switch.debug or [disable]rm -rf switch.debug
|
|
let dir_string = base::reli_dir_get().unwrap();
|
|
let switch = Path::new(&dir_string).join(RELI_DEBUG_SWITCH_FILE);
|
|
- if enable {
|
|
- if !switch.exists() {
|
|
- File::create(&switch).context(IoSnafu)?;
|
|
- }
|
|
- } else if switch.exists() {
|
|
- fs::remove_file(&switch).context(IoSnafu)?;
|
|
+ // touch switch.debug if enable
|
|
+ if enable && !switch.exists() {
|
|
+ do_entry_or_return_io_error!(File::create, switch, "create");
|
|
+ }
|
|
+ // remove switch.debug if disable
|
|
+ if !enable && switch.exists() {
|
|
+ do_entry_or_return_io_error!(fs::remove_file, switch, "remove");
|
|
}
|
|
|
|
Ok(())
|
|
diff --git a/core/libsysmaster/rel/history.rs b/core/libsysmaster/rel/history.rs
|
|
index 9381c10..fc31623 100644
|
|
--- a/core/libsysmaster/rel/history.rs
|
|
+++ b/core/libsysmaster/rel/history.rs
|
|
@@ -12,6 +12,7 @@
|
|
|
|
use super::base::{ReDbRoTxn, ReDbRwTxn, ReDbTable};
|
|
use crate::error::*;
|
|
+use basic::{do_entry_log, do_entry_or_return_io_error};
|
|
use heed::{CompactionOption, Env, EnvOpenOptions};
|
|
use std::cell::RefCell;
|
|
use std::collections::HashMap;
|
|
@@ -126,8 +127,8 @@ impl ReliHistory {
|
|
let next_file = next_path.join(RELI_HISTORY_DATA_FILE);
|
|
|
|
// clear next: delete and re-create the whole directory
|
|
- fs::remove_dir_all(next_path.clone()).context(IoSnafu)?;
|
|
- fs::create_dir_all(next_path).context(IoSnafu)?;
|
|
+ do_entry_or_return_io_error!(fs::remove_dir_all, next_path, "remove");
|
|
+ do_entry_or_return_io_error!(fs::create_dir_all, next_path, "create");
|
|
|
|
// copy to next
|
|
self.env
|
|
@@ -138,21 +139,17 @@ impl ReliHistory {
|
|
// remark the next flag at last: the another one
|
|
let bflag = bflag_path_get(history.clone());
|
|
if self.b_exist {
|
|
- fs::remove_file(bflag).context(IoSnafu)?;
|
|
+ do_entry_or_return_io_error!(fs::remove_file, bflag, "remove");
|
|
} else {
|
|
- File::create(bflag).context(IoSnafu)?;
|
|
+ do_entry_or_return_io_error!(File::create, bflag, "create");
|
|
}
|
|
|
|
// try to clear previous: it would be done in the next re-exec, but we try to delete it as soon as possible.
|
|
let cur_path = history.join(subdir_cur_get(self.b_exist));
|
|
let cur_data = cur_path.join(RELI_HISTORY_DATA_FILE);
|
|
let cur_lock = cur_path.join(RELI_HISTORY_LOCK_FILE);
|
|
- if let Err(e) = fs::remove_file(cur_data.clone()) {
|
|
- log::error!("remove data file {:?} failed, err = {:?}", cur_data, e);
|
|
- }
|
|
- if let Err(e) = fs::remove_file(cur_lock.clone()) {
|
|
- log::error!("remove lock file {:?} failed, err = {:?}", cur_lock, e);
|
|
- }
|
|
+ do_entry_log!(fs::remove_file, cur_data, "remove");
|
|
+ do_entry_log!(fs::remove_file, cur_lock, "remove");
|
|
|
|
Ok(())
|
|
}
|
|
@@ -181,18 +178,18 @@ pub fn prepare(dir_str: &str) -> Result<()> {
|
|
// directory
|
|
let history = history_path_get(dir_str);
|
|
if !history.exists() {
|
|
- fs::create_dir_all(&history).context(IoSnafu)?;
|
|
+ do_entry_or_return_io_error!(fs::create_dir_all, history, "create");
|
|
}
|
|
|
|
// sub-directory
|
|
let a = history.join(RELI_HISTORY_A_DIR);
|
|
if !a.exists() {
|
|
- fs::create_dir_all(&a).context(IoSnafu)?;
|
|
+ do_entry_or_return_io_error!(fs::create_dir_all, a, "create");
|
|
}
|
|
|
|
let b = history.join(RELI_HISTORY_B_DIR);
|
|
if !b.exists() {
|
|
- fs::create_dir_all(&b).context(IoSnafu)?;
|
|
+ do_entry_or_return_io_error!(fs::create_dir_all, a, "create");
|
|
}
|
|
|
|
Ok(())
|
|
diff --git a/core/sysmaster/manager/commands.rs b/core/sysmaster/manager/commands.rs
|
|
index 57f9d5d..6e1da40 100644
|
|
--- a/core/sysmaster/manager/commands.rs
|
|
+++ b/core/sysmaster/manager/commands.rs
|
|
@@ -10,7 +10,7 @@
|
|
// NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
|
// See the Mulan PSL v2 for more details.
|
|
|
|
-use basic::socket_util;
|
|
+use basic::{do_entry_log, socket_util};
|
|
use cmdproto::proto::execute::ExecuterAction;
|
|
use cmdproto::proto::ProstServerStream;
|
|
use event::{EventType, Events, Source};
|
|
@@ -37,7 +37,7 @@ impl<T> Commands<T> {
|
|
let sctl_socket_path = Path::new(SCTL_SOCKET);
|
|
/* remove the old socket if it exists */
|
|
if sctl_socket_path.exists() && !sctl_socket_path.is_symlink() {
|
|
- let _ = std::fs::remove_file(sctl_socket_path);
|
|
+ do_entry_log!(std::fs::remove_file, sctl_socket_path, "remove");
|
|
}
|
|
let sctl_socket_addr = socket::UnixAddr::new(Path::new(SCTL_SOCKET)).unwrap();
|
|
let socket_fd = socket::socket(
|
|
@@ -51,7 +51,10 @@ impl<T> Commands<T> {
|
|
socket_util::set_pass_cred(socket_fd, true).unwrap();
|
|
/* create the socket with mode 666 */
|
|
let old_mask = stat::umask(stat::Mode::from_bits_truncate(!0o666));
|
|
- let _ = socket::bind(socket_fd, &sctl_socket_addr);
|
|
+ match socket::bind(socket_fd, &sctl_socket_addr) {
|
|
+ Err(e) => log::error!("Failed to bind {sctl_socket_addr:?}: {e}"),
|
|
+ Ok(_) => log::debug!("Successfully bind {sctl_socket_addr:?}"),
|
|
+ }
|
|
/* restore our umask */
|
|
let _ = stat::umask(old_mask);
|
|
/* Allow at most 4096 incoming connections can queue */
|
|
diff --git a/core/sysmaster/unit/sigchld.rs b/core/sysmaster/unit/sigchld.rs
|
|
index 423b9b9..eead6f7 100644
|
|
--- a/core/sysmaster/unit/sigchld.rs
|
|
+++ b/core/sysmaster/unit/sigchld.rs
|
|
@@ -198,7 +198,10 @@ impl SigchldData {
|
|
|
|
// check
|
|
let (pid, code, signal) = si.unwrap();
|
|
- log::debug!("Process {} exited witch code: {code}, signal: {signal:?}", pid.as_raw());
|
|
+ log::debug!(
|
|
+ "Process {} exited witch code: {code}, signal: {signal:?}",
|
|
+ pid.as_raw()
|
|
+ );
|
|
|
|
if pid.as_raw() <= 0 {
|
|
log::debug!("invalid pid in signal: {:?}", pid);
|
|
diff --git a/init/src/runtime/comm.rs b/init/src/runtime/comm.rs
|
|
index 8f71511..92d52bc 100644
|
|
--- a/init/src/runtime/comm.rs
|
|
+++ b/init/src/runtime/comm.rs
|
|
@@ -282,11 +282,15 @@ fn create_listen_fd(epoll: &Rc<Epoll>) -> Result<(i32, Inotify, WatchDescriptor)
|
|
)?;
|
|
|
|
let sock_path = PathBuf::from(INIT_SOCKET);
|
|
- let parent_path = sock_path.as_path().parent();
|
|
- match parent_path {
|
|
- Some(path) => fs::create_dir_all(path)
|
|
- .map_err(|e| Errno::from_i32(e.raw_os_error().unwrap_or(Errno::EINVAL as i32)))?,
|
|
+ let path = match sock_path.as_path().parent() {
|
|
None => return Err(Errno::EINVAL),
|
|
+ Some(v) => v,
|
|
+ };
|
|
+ if let Err(e) = fs::create_dir_all(path) {
|
|
+ eprintln!("Failed to create directory {path:?}: {e}");
|
|
+ return Err(Errno::from_i32(
|
|
+ e.raw_os_error().unwrap_or(Errno::EINVAL as i32),
|
|
+ ));
|
|
}
|
|
|
|
if let Err(e) = unistd::unlink(&sock_path) {
|
|
diff --git a/libs/cgroup/src/cgroup.rs b/libs/cgroup/src/cgroup.rs
|
|
index 13efee2..02b266c 100644
|
|
--- a/libs/cgroup/src/cgroup.rs
|
|
+++ b/libs/cgroup/src/cgroup.rs
|
|
@@ -13,6 +13,7 @@
|
|
use super::CgFlags;
|
|
use crate::error::*;
|
|
use crate::CgType;
|
|
+use basic::do_entry_or_return_io_error;
|
|
use basic::special::CGROUP_SYSMASTER;
|
|
use basic::special::INIT_SCOPE;
|
|
use basic::special::SYSMASTER_SLICE;
|
|
@@ -146,7 +147,7 @@ pub fn cg_attach(pid: Pid, cg_path: &PathBuf) -> Result<()> {
|
|
pub fn cg_create(cg_path: &PathBuf) -> Result<()> {
|
|
log::debug!("cgroup create path {:?}", cg_path);
|
|
let abs_cg_path: PathBuf = cg_abs_path(cg_path, &PathBuf::from(""))?;
|
|
- fs::create_dir_all(abs_cg_path).context(IoSnafu)?;
|
|
+ do_entry_or_return_io_error!(fs::create_dir_all, abs_cg_path, "create");
|
|
|
|
Ok(())
|
|
}
|
|
@@ -232,7 +233,10 @@ fn remove_dir(cg_path: &PathBuf) -> Result<()> {
|
|
let mut try_times = 0;
|
|
loop {
|
|
let e = match fs::remove_dir(cg_path) {
|
|
- Ok(()) => return Ok(()),
|
|
+ Ok(()) => {
|
|
+ log::debug!("Successfully removed {cg_path:?}");
|
|
+ return Ok(());
|
|
+ }
|
|
Err(e) => e,
|
|
};
|
|
let os_errno = match e.raw_os_error() {
|
|
@@ -244,6 +248,7 @@ fn remove_dir(cg_path: &PathBuf) -> Result<()> {
|
|
try_times += 1;
|
|
continue;
|
|
}
|
|
+ log::error!("Failed to remove {cg_path:?}: {e}");
|
|
return Err(Error::Io { source: e });
|
|
}
|
|
}
|
|
--
|
|
2.33.0
|
|
|