diff --git a/daemons/ganeti-cleaner.in b/daemons/ganeti-cleaner.in index 7902c52a91e352eb735a3a4c4f42b7131a44afd4..ec5d8f7cb1e369b719b5e8dde85efed64b30abc6 100644 --- a/daemons/ganeti-cleaner.in +++ b/daemons/ganeti-cleaner.in @@ -1,7 +1,7 @@ #!/bin/bash # -# Copyright (C) 2009, 2010 Google Inc. +# Copyright (C) 2009, 2010, 2011 Google Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -20,9 +20,13 @@ set -e +in_cluster() { + [[ -e $DATA_DIR/ssconf_master_node ]] +} + cleanup_master() { # Return if machine is not part of a cluster - [[ -e $DATA_DIR/ssconf_master_node ]] || return 0 + in_cluster || return 0 # Return if queue archive directory doesn't exist [[ -d $QUEUE_ARCHIVE_DIR ]] || return 0 @@ -45,6 +49,16 @@ cleanup_node() { done } +cleanup_watcher() { + # Return if machine is not part of a cluster + in_cluster || return 0 + + # Remove old watcher files + find $DATA_DIR -maxdepth 1 -type f -mtime +$REMOVE_AFTER \ + -name 'watcher.*-*-*-*.data' -print0 | \ + xargs -r0 rm -vf +} + # Overridden by unittest : ${LOCALSTATEDIR:=@LOCALSTATEDIR@} : ${CHECK_CERT_EXPIRED:=@PKGLIBDIR@/check-cert-expired} @@ -77,5 +91,6 @@ xargs -r rm -vf cleanup_master cleanup_node +cleanup_watcher exit 0 diff --git a/test/ganeti-cleaner_unittest.bash b/test/ganeti-cleaner_unittest.bash index 208ec08241e5f7bd44874f54608fd8e7108c3cb9..367a27c3b7bc0794398e6c5e9703cf45f96b628a 100755 --- a/test/ganeti-cleaner_unittest.bash +++ b/test/ganeti-cleaner_unittest.bash @@ -55,6 +55,13 @@ count_jobs() { [[ "$count" -eq "$n" ]] || err "Found $count jobs instead of $n" } +count_watcher() { + local n=$1 + local count=$(find $watcherdir -maxdepth 1 -type f \ + -name 'watcher.*.data' | wc -l) + [[ "$count" -eq "$n" ]] || err "Found $count watcher files instead of $n" +} + count_and_check_certs() { local n=$1 local count=$(find $cryptodir -mindepth 1 -type f -name cert | wc -l) @@ -97,6 +104,28 @@ create_archived_jobs() { done } +create_watcher_state() { + local uuids=( + 6792a0d5-f8b6-4531-8d8c-3680c86b8a53 + ab74da37-f5f7-44c4-83ad-074159772593 + fced2e48-ffff-43ae-919e-2b77d37ecafa + 6e89ac57-2eb1-4a16-85a1-94daa815d643 + 8714e8f5-59c4-47db-b2cb-196ec37978e5 + 91763d73-e1f3-47c7-a735-57025d4e2a7d + e27d3ff8-9546-4e86-86a4-04151223e140 + aa3f63dd-be17-4ac8-bd01-d71790e124cb + 05b6d7e2-003b-40d9-a6d6-ab61bf123a15 + 54c93e4c-61fe-40de-b47e-2a8e6c805d02 + ) + + i=0 + for uuid in ${uuids[@]}; do + touch -d "$(( 5 * i )) days ago" $watcherdir/watcher.$uuid.data + + let ++i + done +} + create_certdirs() { local cert=$1; shift local certdir @@ -117,6 +146,7 @@ trap "rm -rf $tmpdir" EXIT tmpls=$tmpdir/var queuedir=$tmpls/lib/ganeti/queue cryptodir=$tmpls/run/ganeti/crypto +watcherdir=$tmpls/lib/ganeti mkdir -p $tmpls/{lib,log,run}/ganeti $queuedir/archive $cryptodir @@ -165,4 +195,10 @@ count_and_check_certs 5 check_logfiles $maxlog count_jobs 31 +upto 'Watcher status files' +create_watcher_state +count_watcher 10 +run_cleaner +count_watcher 5 + exit 0