X-Git-Url: https://gerrit.linuxfoundation.org/infra/gitweb?a=blobdiff_plain;f=shell%2Fopenstack-cleanup-orphaned-objects.sh;h=59e1edff659706371c40044780a3f7119930decc;hb=refs%2Fchanges%2F59%2F72659%2F3;hp=6d845b761ccf6f349e69346496eb08e2aa79b808;hpb=ce1354cc83932ef7ff52b401137aada7a7a8de75;p=releng%2Fglobal-jjb.git diff --git a/shell/openstack-cleanup-orphaned-objects.sh b/shell/openstack-cleanup-orphaned-objects.sh index 6d845b76..59e1edff 100755 --- a/shell/openstack-cleanup-orphaned-objects.sh +++ b/shell/openstack-cleanup-orphaned-objects.sh @@ -43,6 +43,7 @@ echo "Filters: ${filters}" tmpfile=$(mktemp --suffix -openstack-"${object}"s.txt) cores=$(nproc --all) threads=$((3*cores)) +regex_created_at='^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2})Z$' _cleanup() { @@ -50,26 +51,35 @@ _cleanup() created_at=$(openstack --os-cloud "$os_cloud" "${object}" show -f value -c created_at "$uuid") if [ "$created_at" == "None" ]; then + # This is a valid result for some objects; do not stop processing echo "No value for ${object} creation time; skipping: $uuid" - else + + elif echo "$created_at" | grep -qP "$regex_created_at"; then + created_at_uxts=$(date -d "$created_at" +%s) - # For debugging only; this outout usually disabled - # echo "${uuid} created at ${created_at} / ${created_at_uxts} / cutoff: ${cutoff}" - - # Validate timing values are numeric - if [[ "$created_at_uxts" -eq "$created_at_uxts" ]]; then - # Clean up objects when created_at > specified age - if [[ "$created_at_uxts" -lt "$cutoff" ]]; then - echo "Removing orphaned ${object} $uuid created $created_at_uxts > $age" - openstack --os-cloud "$os_cloud" "${object}" delete "$uuid" - fi - else - echo "Date variable failed numeric test; deletion not possible" + # Cleanup objects where created_at is older than specified cutoff time + # created_at_uxts is measured against UNIX epoch; lower values are older + if [[ "$created_at_uxts" -lt "$cutoff" ]]; then + echo "Removing orphaned ${object} $uuid created $created_at_uxts > $age" + openstack --os-cloud "$os_cloud" "${object}" delete "$uuid" fi + else + # Don't stop the job, but warn about unexpected value + echo "Unknown/unexpected value for created_at: ${created_at}" fi } +_rmtemp() +{ + if [ -f "$tmpfile" ]; then + # Removes temporary file on script exit + rm -f "$tmpfile" + fi +} + +trap _rmtemp EXIT + # Output the initial list of object UUIDs to a temporary file if [[ -n ${filters} ]]; then # If a filter/match condition is requested/set @@ -83,6 +93,12 @@ fi # Count the number of objects to process total=$(wc -l "$tmpfile" | awk '{print $1}') + +if [ "$total" -eq 0 ]; then + echo "No orphaned objects to process." + exit 0 +fi + echo "Processing $total ${object} object(s); current time: $current age limit: $cutoff" echo "Using $threads parallel processes..." @@ -91,5 +107,3 @@ export -f _cleanup export os_cloud cutoff age object # Add --progress flag to the command below for additional debug output parallel --retries 3 -j "$threads" _cleanup < "$tmpfile" - -rm "$tmpfile"