tests: fix race in dirrem01 and dirrem02
Previously the '--checkpoint-action=echo' was triggered after '--checkpoint-action=sleep=1' - so the order of events *usually* was (for --format='gnu'): ... 1. checkpoint handler before write of 'dir/sub' member 2. one-second delay 3. stderr write: 'tar: Write checkpoint 3' 4. write the member 'dir/sub' into the archive 5. check that the member's ctime has not been changed 6. genfile's detecting 'Write checkpoint', doing unlink ... But sometimes, the genfile was fast enough to win the race and unlinked the directory before the member was written into the archive (IOW, the order was 1-2-3-6-4-5). This led to the occasional warning 'tar: dir/sub: file changed as we read it'. Swap the order of 'sleep=1' and 'echo' actions so the genfile utility has (hopefully) enough time to do the unlink before writing the file into the archive (enforce 1-2-3-6-4-5 order). * tests/dirrem01.at: Swap 'sleep=1' and 'echo' actions. * tests/dirrem02.at: Likewise.
This commit is contained in:
committed by
Sergey Poznyakoff
parent
7b8efcc7cb
commit
64b43fdf70
@@ -47,14 +47,15 @@ gnu) CPT=3;;
|
||||
esac
|
||||
|
||||
genfile --run --checkpoint=$CPT --unlink dir/sub/file2 --unlink dir/sub -- \
|
||||
tar --blocking-factor=1 --checkpoint=1 --checkpoint-action='sleep=1' \
|
||||
--checkpoint-action='echo' -c -f archive.tar \
|
||||
tar --blocking-factor=1 --checkpoint=1 --checkpoint-action='echo' \
|
||||
--checkpoint-action='sleep=1' -c -f archive.tar \
|
||||
--listed-incremental db -v dir >/dev/null
|
||||
],
|
||||
[1],
|
||||
[ignore],
|
||||
[tar: dir: Directory is new
|
||||
tar: dir/sub: Directory is new
|
||||
tar: dir/sub: file changed as we read it
|
||||
tar: dir/sub: File removed before we read it
|
||||
],[],[],[gnu,posix])
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
|
||||
# Description:
|
||||
#
|
||||
# When an explicitley named directory disappears during creation
|
||||
# When an explicitly named directory disappears during creation
|
||||
# of incremental dump, tar should still exit with TAREXIT_FAILURE (2).
|
||||
#
|
||||
# For further details see dirrem01.at
|
||||
@@ -44,14 +44,15 @@ gnu) CPT=3;;
|
||||
esac
|
||||
|
||||
genfile --run --checkpoint=$CPT --unlink dir/sub/file2 --unlink dir/sub -- \
|
||||
tar --blocking-factor=1 --checkpoint=1 --checkpoint-action='sleep=1' \
|
||||
--checkpoint-action='echo' -c -f archive.tar \
|
||||
tar --blocking-factor=1 --checkpoint=1 --checkpoint-action='echo' \
|
||||
--checkpoint-action='sleep=1' -c -f archive.tar \
|
||||
--listed-incremental db -v dir dir/sub >/dev/null
|
||||
],
|
||||
[2],
|
||||
[ignore],
|
||||
[tar: dir: Directory is new
|
||||
tar: dir/sub: Directory is new
|
||||
tar: dir/sub: file changed as we read it
|
||||
tar: dir/sub: Cannot open: No such file or directory
|
||||
tar: Exiting with failure status due to previous errors
|
||||
],[],[],[gnu,posix])
|
||||
|
||||
Reference in New Issue
Block a user