Fix bug with sequential deletion block order
This commit is contained in:
parent
930e0b0b3b
commit
eb3ced8fbe
2 changed files with 21 additions and 8 deletions
14
backup.sh
14
backup.sh
|
@ -276,7 +276,7 @@ delete-backup () {
|
||||||
|
|
||||||
# Sequential delete method
|
# Sequential delete method
|
||||||
delete-sequentially () {
|
delete-sequentially () {
|
||||||
local BACKUPS=("$BACKUP_DIRECTORY"/*)
|
local BACKUPS=("$BACKUP_DIRECTORY"/*) # List oldest first
|
||||||
while [[ $MAX_BACKUPS -ge 0 && ${#BACKUPS[@]} -gt $MAX_BACKUPS ]]; do
|
while [[ $MAX_BACKUPS -ge 0 && ${#BACKUPS[@]} -gt $MAX_BACKUPS ]]; do
|
||||||
delete-backup "$(basename "${BACKUPS[0]}")"
|
delete-backup "$(basename "${BACKUPS[0]}")"
|
||||||
BACKUPS=("$BACKUP_DIRECTORY"/*)
|
BACKUPS=("$BACKUP_DIRECTORY"/*)
|
||||||
|
@ -342,19 +342,19 @@ delete-thinning () {
|
||||||
fi
|
fi
|
||||||
|
|
||||||
local CURRENT_INDEX=0
|
local CURRENT_INDEX=0
|
||||||
local BACKUPS=("$BACKUP_DIRECTORY"/*) # List newest first
|
local BACKUPS=("$BACKUP_DIRECTORY"/*) # Oldest first
|
||||||
|
local NUM_BACKUPS="${#BACKUPS[@]}"
|
||||||
|
|
||||||
for BLOCK_INDEX in "${!BLOCK_SIZES[@]}"; do
|
for BLOCK_INDEX in "${!BLOCK_SIZES[@]}"; do
|
||||||
local BLOCK_SIZE=${BLOCK_SIZES[BLOCK_INDEX]}
|
local BLOCK_SIZE=${BLOCK_SIZES[BLOCK_INDEX]}
|
||||||
local BLOCK_FUNCTION=${BLOCK_FUNCTIONS[BLOCK_INDEX]}
|
local BLOCK_FUNCTION=${BLOCK_FUNCTIONS[BLOCK_INDEX]}
|
||||||
local OLDEST_BACKUP_IN_BLOCK_INDEX=$((BLOCK_SIZE + CURRENT_INDEX)) # Not an off-by-one error because a new backup was already saved
|
local OLDEST_BACKUP_IN_BLOCK_INDEX=$((NUM_BACKUPS - 1 - (BLOCK_SIZE + CURRENT_INDEX))) # Not an off-by-one error because a new backup was already saved
|
||||||
|
if [ "$OLDEST_BACKUP_IN_BLOCK_INDEX" -lt 0 ]; then
|
||||||
|
break;
|
||||||
|
fi
|
||||||
local OLDEST_BACKUP_IN_BLOCK
|
local OLDEST_BACKUP_IN_BLOCK
|
||||||
OLDEST_BACKUP_IN_BLOCK="$(basename "${BACKUPS[OLDEST_BACKUP_IN_BLOCK_INDEX]}")"
|
OLDEST_BACKUP_IN_BLOCK="$(basename "${BACKUPS[OLDEST_BACKUP_IN_BLOCK_INDEX]}")"
|
||||||
|
|
||||||
if [[ "$OLDEST_BACKUP_IN_BLOCK" == "" ]]; then
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
|
|
||||||
local OLDEST_BACKUP_TIMESTAMP
|
local OLDEST_BACKUP_TIMESTAMP
|
||||||
OLDEST_BACKUP_TIMESTAMP=$(parse-file-timestamp "${OLDEST_BACKUP_IN_BLOCK:0:19}")
|
OLDEST_BACKUP_TIMESTAMP=$(parse-file-timestamp "${OLDEST_BACKUP_IN_BLOCK:0:19}")
|
||||||
local BLOCK_COMMAND="$BLOCK_FUNCTION $OLDEST_BACKUP_TIMESTAMP"
|
local BLOCK_COMMAND="$BLOCK_FUNCTION $OLDEST_BACKUP_TIMESTAMP"
|
||||||
|
|
15
test/test.sh
15
test/test.sh
|
@ -227,7 +227,11 @@ test-rcon-interface-not-running () {
|
||||||
}
|
}
|
||||||
|
|
||||||
test-sequential-delete () {
|
test-sequential-delete () {
|
||||||
for i in $(seq 0 99); do
|
for i in $(seq 0 20); do
|
||||||
|
TIMESTAMP="$(date +%F_%H-%M-%S --date="2021-01-01 +$i hour")"
|
||||||
|
./backup.sh -d "sequential" -m 30 -i "$TEST_TMP/server/world" -o "$TEST_TMP/backups" -s "$SCREEN_TMP" -f "$TIMESTAMP"
|
||||||
|
done
|
||||||
|
for i in $(seq 20 99); do
|
||||||
TIMESTAMP="$(date +%F_%H-%M-%S --date="2021-01-01 +$i hour")"
|
TIMESTAMP="$(date +%F_%H-%M-%S --date="2021-01-01 +$i hour")"
|
||||||
./backup.sh -d "sequential" -m 10 -i "$TEST_TMP/server/world" -o "$TEST_TMP/backups" -s "$SCREEN_TMP" -f "$TIMESTAMP"
|
./backup.sh -d "sequential" -m 10 -i "$TEST_TMP/server/world" -o "$TEST_TMP/backups" -s "$SCREEN_TMP" -f "$TIMESTAMP"
|
||||||
done
|
done
|
||||||
|
@ -293,6 +297,15 @@ test-thinning-delete-long () {
|
||||||
TIMESTAMP="$(date +%F_%H-%M-%S --date="2021-01-01 +$i day")"
|
TIMESTAMP="$(date +%F_%H-%M-%S --date="2021-01-01 +$i day")"
|
||||||
OUTPUT="$(./backup.sh -v -i "$TEST_TMP/server/world" -o "$TEST_TMP/backups" -s "$SCREEN_TMP" -f "$TIMESTAMP")"
|
OUTPUT="$(./backup.sh -v -i "$TEST_TMP/server/world" -o "$TEST_TMP/backups" -s "$SCREEN_TMP" -f "$TIMESTAMP")"
|
||||||
done
|
done
|
||||||
|
UNEXPECTED_TIMESTAMPS=(
|
||||||
|
"2021-01-05_00-00-00"
|
||||||
|
"2021-01-12_00-00-00"
|
||||||
|
"2021-01-24_00-00-00"
|
||||||
|
)
|
||||||
|
for TIMESTAMP in "${UNEXPECTED_TIMESTAMPS[@]}"; do
|
||||||
|
assertFalse '[ -f '"$TEST_TMP/backups/$TIMESTAMP.tar.gz"' ]'
|
||||||
|
done
|
||||||
|
assertEquals 74 "$(find "$TEST_TMP/backups" -type f | wc -l)"
|
||||||
EXPECTED_TIMESTAMPS=(
|
EXPECTED_TIMESTAMPS=(
|
||||||
# Weekly
|
# Weekly
|
||||||
"2021-01-04_00-00-00"
|
"2021-01-04_00-00-00"
|
||||||
|
|
Loading…
Add table
Reference in a new issue