From: Dominik Csapak <d.csapak@proxmox.com>
To: pbs-devel@lists.proxmox.com
Subject: [pbs-devel] [PATCH proxmox-backup v2 3/3] rest-server: add option to rotate task logs by 'max_days' instead of 'max_files'
Date: Mon, 28 Mar 2022 09:54:19 +0200 [thread overview]
Message-ID: <20220328075419.1020418-3-d.csapak@proxmox.com> (raw)
In-Reply-To: <20220328075419.1020418-1-d.csapak@proxmox.com>
and use it with the configurable: 'task_log_max_days' of the node config
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
---
proxmox-rest-server/src/worker_task.rs | 49 +++++++++++++++++++++++---
src/bin/proxmox-backup-proxy.rs | 6 ++++
2 files changed, 51 insertions(+), 4 deletions(-)
diff --git a/proxmox-rest-server/src/worker_task.rs b/proxmox-rest-server/src/worker_task.rs
index cd1a4457..851f3c7c 100644
--- a/proxmox-rest-server/src/worker_task.rs
+++ b/proxmox-rest-server/src/worker_task.rs
@@ -209,14 +209,16 @@ pub fn init_worker_tasks(basedir: PathBuf, file_opts: CreateOptions) -> Result<(
}
/// checks if the Task Archive is bigger that 'size_threshold' bytes, and
-/// rotates it if it is
+/// rotates it if it is, keeps only up to 'max_files'.
+/// If 'max_days' is given, 'max_files' is ignored, and all archive files
+/// will be deleted where there are only tasks that are older than the given days.
pub fn rotate_task_log_archive(
size_threshold: u64,
compress: bool,
max_files: Option<usize>,
+ max_days: Option<usize>,
options: Option<CreateOptions>,
) -> Result<bool, Error> {
-
let setup = worker_task_setup()?;
let _lock = setup.lock_task_list_files(true)?;
@@ -224,11 +226,50 @@ pub fn rotate_task_log_archive(
let mut logrotate = LogRotate::new(
&setup.task_archive_fn,
compress,
- max_files,
+ if max_days.is_none() { max_files } else { None },
options,
)?;
- logrotate.rotate(size_threshold)
+ let mut rotated = logrotate.rotate(size_threshold)?;
+
+ if let Some(max_days) = max_days {
+ let mut delete = false;
+ let file_names = logrotate.file_names();
+ let mut files = logrotate.files();
+ for file_name in file_names {
+ if !delete {
+ // we only have to check if we did not start deleting already
+
+ // this is ok because the task log files are locked, so no one
+ // else should modify these
+ let reader = match files.next() {
+ Some(file) => BufReader::new(file),
+ None => {
+ bail!("unexpected error: files do not match file_names");
+ }
+ };
+ if let Some(line) = reader.lines().next() {
+ if let Ok((_, _, Some(state))) = parse_worker_status_line(&line?) {
+ // we approximate here with the days, but should be close enough
+ let cutoff_time =
+ proxmox_time::epoch_i64() - (max_days * 24 * 60 * 60) as i64;
+ if state.endtime() < cutoff_time {
+ // we found the first file that has only older entries, start deleting
+ delete = true;
+ rotated = true;
+ }
+ }
+ }
+ }
+ if delete {
+ if let Err(err) = std::fs::remove_file(&file_name) {
+ log::error!("could not remove {:?}: {}", file_name, err);
+ }
+ }
+ }
+ }
+
+ Ok(rotated)
}
/// removes all task logs that are older than the oldest task entry in the
diff --git a/src/bin/proxmox-backup-proxy.rs b/src/bin/proxmox-backup-proxy.rs
index 0d2271a8..f0cb29eb 100644
--- a/src/bin/proxmox-backup-proxy.rs
+++ b/src/bin/proxmox-backup-proxy.rs
@@ -847,6 +847,11 @@ async fn schedule_task_log_rotate() {
let max_size = 512 * 1024 - 1; // an entry has ~ 100b, so > 5000 entries/file
let max_files = 20; // times twenty files gives > 100000 task entries
+ let max_days = proxmox_backup::config::node::config()
+ .map(|(cfg, _)| cfg.task_log_max_days)
+ .ok()
+ .flatten();
+
let user = pbs_config::backup_user()?;
let options = proxmox_sys::fs::CreateOptions::new()
.owner(user.uid)
@@ -856,6 +861,7 @@ async fn schedule_task_log_rotate() {
max_size,
true,
Some(max_files),
+ max_days,
Some(options.clone()),
)?;
--
2.30.2
next prev parent reply other threads:[~2022-03-28 7:54 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-28 7:54 [pbs-devel] [PATCH proxmox-backup v2 1/3] rest-server: cleanup_old_tasks: improve error handling Dominik Csapak
2022-03-28 7:54 ` [pbs-devel] [PATCH proxmox-backup v2 2/3] config/node: add 'task_log_max_days' config Dominik Csapak
2022-03-28 7:54 ` Dominik Csapak [this message]
2022-04-07 12:06 ` [pbs-devel] applied-series: [PATCH proxmox-backup v2 1/3] rest-server: cleanup_old_tasks: improve error handling Thomas Lamprecht
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220328075419.1020418-3-d.csapak@proxmox.com \
--to=d.csapak@proxmox.com \
--cc=pbs-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal