[Piuparts-commits] [SCM] piuparts git repository branch, master, updated. 0.47-41-ga9fc1b0

Andreas Beckmann debian at abeckmann.de
Fri Nov 30 11:20:27 UTC 2012


The following commit has been merged in the master branch:
commit ccafcf0f8aa90f207db78d25f1f7025dd5a12c3f
Author: Andreas Beckmann <debian at abeckmann.de>
Date:   Fri Oct 5 22:09:19 2012 +0200

    expire logfiles marked for recycling after some time
    
    if they can't be recycled due to unsatisfied deps ...
    ... move them to dependency-failed-testing state instead
    
    Signed-off-by: Andreas Beckmann <debian at abeckmann.de>

diff --git a/README.txt b/README.txt
index ce78fb2..9bcf8ac 100644
--- a/README.txt
+++ b/README.txt
@@ -506,7 +506,7 @@ values are set in the scripts.
 
 * "reschedule-untestable-days" (global) sets the rescheduling delay for untestable packages (e.g. due to unsatisfied dependencies).
 
-* "reschedule-old-days" (global, section) and the following three settings define the rescheduling scheme for passed and failed packages.
+* "reschedule-old-days" (global, section) and the following five settings define the rescheduling scheme for passed and failed packages. Logs that are marked for recycling but are older than expire-*-days will be deleted, moving the package to dependency-failed-testing state. expire-*-days needs to be greater than reschedule-*-days to enable expiration.
 
 * "reschedule-old-count" (global, section)
 
@@ -514,6 +514,10 @@ values are set in the scripts.
 
 * "reschedule-fail-count" (global, section)
 
+* "expire-old-days" (global, section)
+
+* "expire-fail-days" (global, section)
+
 * "auto-reschedule" (section) can be set to "no" to disable rescheduling of passed and failed packages.
 
 
diff --git a/conf/piuparts.conf.sample b/conf/piuparts.conf.sample
index c838d7d..fe9ab83 100644
--- a/conf/piuparts.conf.sample
+++ b/conf/piuparts.conf.sample
@@ -20,12 +20,15 @@ doc-root = /piuparts/
 master-command = python /usr/share/piuparts/piuparts-master
 idle-sleep = 300
 max-tgz-age = 604800
+expire-old-days = 120
 reschedule-old-days = 90
 reschedule-old-count = 150
+expire-fail-days = 45
 reschedule-fail-days = 30
 reschedule-fail-count = 25
 #bts-from
 
+
 [sid]
 precedence = 1
 description = "Debian sid / main"
diff --git a/debian/changelog b/debian/changelog
index 40cbbd5..dabc5e3 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -11,6 +11,8 @@ piuparts (0.48) UNRELEASED; urgency=low
     - Add debsums, processes, and broken-symlinks check after the first purge
       in --install-purge-install mode.
     - Add --install-recommends option, disabled by default.
+  * piuparts.conf:
+    - New per section settings: expire-old-days, expire-fail-days.
   * piuparts-master.py:
     - Enable recycling before initializing the real package db.
     - Enable logging by default and set default log-file to
@@ -18,6 +20,10 @@ piuparts (0.48) UNRELEASED; urgency=low
   * piuparts-slave.py:
   * piuparts-report.py:
   * detect_piuparts_issues: Catch the chroot running out of space.
+  * reschedule_oldest_logs: Implement logfile expiration. Delete logfiles that
+    are marked for recycling and are older than expire-{old,fail}-days. This
+    will put the package into dependency-failed-testing or similar state.
+    expire-*-days needs to be greater than reschedule-*-days to enable this.
   * New bug template: copyright_file_missing_after_upgrade.
   * New known problem: Installing something over existing symlinks.
 
diff --git a/master-bin/reschedule_oldest_logs b/master-bin/reschedule_oldest_logs
index 06fd99d..0c6fdfc 100755
--- a/master-bin/reschedule_oldest_logs
+++ b/master-bin/reschedule_oldest_logs
@@ -42,9 +42,14 @@ get_config_value SECTIONS global sections
 #
 # reschedule 200 oldest log files, if they are older than 180 days
 # reschedule 25 oldest fail log files, if they are older than 30 days
+# delete $reschedule-old-count oldest logfiles, if they are scheduled
+#   for recycling and older than $expire-old-days
+#   and $expire-old-days > $reschedule-old-days
 #
+get_config_value EXPIRE_AGE global expire-old-days 0
 get_config_value AGE        global reschedule-old-days 180
 get_config_value COUNT      global reschedule-old-count 200
+get_config_value EXPIRE_FAIL_AGE global expire-fail-days 0
 get_config_value FAIL_AGE   global reschedule-fail-days 30
 get_config_value FAIL_COUNT global reschedule-fail-count 25
 
@@ -63,9 +68,11 @@ list_logs()
 
 
 TOTAL=0
+TOTAL_EXPIRED=0
 UNSCHEDULE=0
 LOGS=$(mktemp)
 OBSOLETE=$(mktemp)
+EXPIRED=$(mktemp)
 UNSORTED=$(mktemp)
 OLDPWD=$(pwd)
 for SECTION in $SECTIONS ; do
@@ -83,14 +90,28 @@ for SECTION in $SECTIONS ; do
 
 	# Reschedule old logs
 	>$LOGS
+	>$EXPIRED
 	get_config_value RESCHEDULE $SECTION auto-reschedule $AUTO_RESCHEDULE
 	if [ "$RESCHEDULE" = "yes" ]; then
+		get_config_value _EXPIRE_AGE $SECTION expire-old-days $EXPIRE_AGE
 		get_config_value _AGE        $SECTION reschedule-old-days $AGE
 		get_config_value _COUNT      $SECTION reschedule-old-count $COUNT
+		get_config_value _EXPIRE_FAIL_AGE $SECTION expire-fail-days $EXPIRE_FAIL_AGE
 		get_config_value _FAIL_AGE   $SECTION reschedule-fail-days $FAIL_AGE
 		get_config_value _FAIL_COUNT $SECTION reschedule-fail-count $FAIL_COUNT
 		# FIXME: we ignore bugged here - ptyhon-bts is really the way to go
 		>$UNSORTED
+		if [ "$_EXPIRE_AGE" -gt "$_AGE" ]; then
+			list_logs $_EXPIRE_AGE      $_COUNT      pass fail affected >> $UNSORTED
+		fi
+		if [ "$_EXPIRE_FAIL_AGE" -gt "$_FAIL_AGE" ]; then
+			list_logs $_EXPIRE_FAIL_AGE $_FAIL_COUNT      fail affected >> $UNSORTED
+		fi
+		for log in $(sort -u $UNSORTED) ; do
+			# the log needs to be scheduled for recycling before it gets expired
+			test -f "recycle/${log#*/}" && echo "$log"
+		done > $EXPIRED
+		>$UNSORTED
 		list_logs $_AGE      $_COUNT      pass fail affected >> $UNSORTED
 		list_logs $_FAIL_AGE $_FAIL_COUNT      fail affected >> $UNSORTED
 		for log in $(sort -u $UNSORTED) ; do
@@ -99,16 +120,22 @@ for SECTION in $SECTIONS ; do
 		done > $LOGS
 	fi
 
-	if [ -s $LOGS ] || [ -s $OBSOLETE ]; then
+	if [ -s $LOGS ] || [ -s $OBSOLETE ] || [ -s $EXPIRED ]; then
 		RCOUNT=$(wc -l $LOGS | awk '{ print $1 }')
 		TOTAL=$(($TOTAL + $RCOUNT))
+		ECOUNT=$(wc -l $EXPIRED | awk '{ print $1 }')
+		TOTAL_EXPIRED=$(($TOTAL_EXPIRED + $ECOUNT))
 		UCOUNT=$(wc -l $OBSOLETE | awk '{ print $1 }')
 		UNSCHEDULE=$(($UNSCHEDULE + $UCOUNT))
-		echo "$SECTION: $RCOUNT/$UCOUNT"
+		echo "$SECTION: $RCOUNT/$ECOUNT/$UCOUNT"
 		if [ -s $LOGS ]; then
 			ls -dtl $(cat $LOGS)
 			ln -f $(cat $LOGS) recycle/
 		fi
+		if [ -s $EXPIRED ]; then
+			ls -dtl $(cat $EXPIRED)
+			rm -fv $(cat $EXPIRED)
+		fi
 		if [ -s $OBSOLETE ]; then
 			rm -fv $(cat $OBSOLETE)
 		fi
@@ -120,11 +147,15 @@ for SECTION in $SECTIONS ; do
 done
 rm $LOGS
 rm $OBSOLETE
+rm $EXPIRED
 rm $UNSORTED
 
 if [ "$TOTAL" -gt "0" ]; then
 	echo "Rescheduled $TOTAL logs."
 fi
+if [ "$TOTAL_EXPIRED" -gt "0" ]; then
+	echo "Deleted $TOTAL_EXPIRED expired logs."
+fi
 if [ "$UNSCHEDULE" -gt "0" ]; then
 	echo "Cancelled $UNSCHEDULE outdated rescheduling requests."
 fi

-- 
piuparts git repository



More information about the Piuparts-commits mailing list