From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id A2815611E3 for ; Tue, 20 Oct 2020 11:11:21 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 99434CF5A for ; Tue, 20 Oct 2020 11:10:51 +0200 (CEST) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [212.186.127.180]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS id 9B03ACF28 for ; Tue, 20 Oct 2020 11:10:50 +0200 (CEST) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id 6CE5B45E31 for ; Tue, 20 Oct 2020 11:10:50 +0200 (CEST) From: Thomas Lamprecht To: pbs-devel@lists.proxmox.com Date: Tue, 20 Oct 2020 11:10:43 +0200 Message-Id: <20201020091044.6971-3-t.lamprecht@proxmox.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20201020091044.6971-1-t.lamprecht@proxmox.com> References: <20201020091044.6971-1-t.lamprecht@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL -0.129 Adjusted score from AWL reputation of From: address KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment RCVD_IN_DNSWL_MED -2.3 Sender listed at https://www.dnswl.org/, medium trust SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [logrotate.rs] Subject: [pbs-devel] applied: [PATCH backup 3/4] log rotate: do NOT compress first rotation X-BeenThere: pbs-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Backup Server development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 20 Oct 2020 09:11:21 -0000 The first rotation is normally the one still opened by one or more processes for writing, so it must NOT be replaced, removed, ..., as this then makes the remaining logging, until those processes are noticed that they should reopen the logfile due to rotation, goes into nirvana, which is far from ideal for a log. Only rotating (renaming) is OK for this active file, as this does not invalidates the file and keeps open FDs intact. So start compressing with the second rotation, which should be clear to use, as all writers must have been told to reopen the log during the last rotation, reopen is a fast operation and normally triggered at least day ago (at least if one did not dropped the state file manually), so we are fine to archive that one for real. If we plan to allow faster rotation the whole rotation+reopen should be locked, so that we can guarantee that all writers switched over, but this is unlikely to be needed. Again, this is was logrotate sanely does by default since forever. Signed-off-by: Thomas Lamprecht --- src/tools/logrotate.rs | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/tools/logrotate.rs b/src/tools/logrotate.rs index 28e3b7bb..54fe4bfe 100644 --- a/src/tools/logrotate.rs +++ b/src/tools/logrotate.rs @@ -100,17 +100,16 @@ impl LogRotate { filenames.push(PathBuf::from(next_filename)); let count = filenames.len(); - // rotate all but the first, that we maybe have to compress - for i in (1..count-1).rev() { + for i in (0..count-1).rev() { rename(&filenames[i], &filenames[i+1])?; } if self.compress { - if filenames[0].extension().unwrap_or(std::ffi::OsStr::new("")) != "zst" { - Self::compress(&filenames[0], &options)?; + for i in 2..count-1 { + if filenames[i].extension().unwrap_or(std::ffi::OsStr::new("")) != "zst" { + Self::compress(&filenames[i], &options)?; + } } - } else { - rename(&filenames[0], &filenames[1])?; } if let Some(max_files) = max_files { -- 2.27.0