Blame SOURCES/tar-1.30-tests-dirrem.patch

7893ae
From 298cfc4743b9cca6cc0c685b9fce5b34827bec1b Mon Sep 17 00:00:00 2001
7893ae
From: Pavel Raiskup <praiskup@redhat.com>
7893ae
Date: Thu, 4 Jan 2018 18:21:27 +0100
7893ae
Subject: [PATCH] tests: fix race in dirrem01 and dirrem02
7893ae
7893ae
Proposal:
7893ae
https://www.mail-archive.com/bug-tar@gnu.org/msg05451.html
7893ae
7893ae
Previously the '--checkpoint-action=echo' was triggered after
7893ae
'--checkpoint-action=sleep=1' - so the order of events *usually*
7893ae
was (for --format='gnu'):
7893ae
7893ae
  ...
7893ae
  1. checkpoint handler before write of 'dir/sub' member
7893ae
  2. one-second delay
7893ae
  3. stderr write: 'tar: Write checkpoint 3'
7893ae
  4. write the member 'dir/sub' into the archive
7893ae
  5. check that the member's ctime has not been changed
7893ae
  6. genfile's detecting 'Write checkpoint', doing unlink
7893ae
  ...
7893ae
7893ae
But sometimes, the genfile was fast enough to win the race and
7893ae
unlinked the directory before the member was written into the
7893ae
archive (IOW, the order was 1-2-3-6-4-5).  This led to the
7893ae
occasional warning 'tar: dir/sub: file changed as we read it'.
7893ae
7893ae
Swap the order of 'sleep=1' and 'echo' actions so the genfile
7893ae
utility has (hopefully) enough time to do the unlink before
7893ae
writing the file into the archive (enforce 1-2-3-6-4-5 order).
7893ae
7893ae
* tests/dirrem01.at: Swap 'sleep=1' and 'echo' actions.
7893ae
* tests/dirrem02.at: Likewise.
7893ae
---
7893ae
 tests/dirrem01.at | 5 +++--
7893ae
 tests/dirrem02.at | 7 ++++---
7893ae
 2 files changed, 7 insertions(+), 5 deletions(-)
7893ae
7893ae
diff --git a/tests/dirrem01.at b/tests/dirrem01.at
7893ae
index 40344dc..dabc206 100644
7893ae
--- a/tests/dirrem01.at
7893ae
+++ b/tests/dirrem01.at
7893ae
@@ -47,14 +47,15 @@ gnu)   CPT=3;;
7893ae
 esac
7893ae
 
7893ae
 genfile --run --checkpoint=$CPT --unlink dir/sub/file2 --unlink dir/sub -- \
7893ae
-       tar --blocking-factor=1 --checkpoint=1 --checkpoint-action='sleep=1' \
7893ae
-       --checkpoint-action='echo' -c -f archive.tar \
7893ae
+       tar --blocking-factor=1 --checkpoint=1 --checkpoint-action='echo' \
7893ae
+       --checkpoint-action='sleep=1' -c -f archive.tar \
7893ae
        --listed-incremental db -v dir >/dev/null
7893ae
 ],
7893ae
 [1],
7893ae
 [ignore],
7893ae
 [tar: dir: Directory is new
7893ae
 tar: dir/sub: Directory is new
7893ae
+tar: dir/sub: file changed as we read it
7893ae
 tar: dir/sub: File removed before we read it
7893ae
 ],[],[],[gnu,posix])
7893ae
 
7893ae
diff --git a/tests/dirrem02.at b/tests/dirrem02.at
7893ae
index e1cf9ef..924454f 100644
7893ae
--- a/tests/dirrem02.at
7893ae
+++ b/tests/dirrem02.at
7893ae
@@ -20,7 +20,7 @@
7893ae
 
7893ae
 # Description:
7893ae
 #
7893ae
-# When an explicitley named directory disappears during creation
7893ae
+# When an explicitly named directory disappears during creation
7893ae
 # of incremental dump, tar should still exit with TAREXIT_FAILURE (2).
7893ae
 #
7893ae
 # For further details see dirrem01.at
7893ae
@@ -44,14 +44,15 @@ gnu)   CPT=3;;
7893ae
 esac
7893ae
 
7893ae
 genfile --run --checkpoint=$CPT --unlink dir/sub/file2 --unlink dir/sub -- \
7893ae
-       tar --blocking-factor=1 --checkpoint=1 --checkpoint-action='sleep=1' \
7893ae
-       --checkpoint-action='echo' -c -f archive.tar \
7893ae
+       tar --blocking-factor=1 --checkpoint=1 --checkpoint-action='echo' \
7893ae
+       --checkpoint-action='sleep=1' -c -f archive.tar \
7893ae
        --listed-incremental db -v dir dir/sub >/dev/null
7893ae
 ],
7893ae
 [2],
7893ae
 [ignore],
7893ae
 [tar: dir: Directory is new
7893ae
 tar: dir/sub: Directory is new
7893ae
+tar: dir/sub: file changed as we read it
7893ae
 tar: dir/sub: Cannot open: No such file or directory
7893ae
 tar: Exiting with failure status due to previous errors
7893ae
 ],[],[],[gnu,posix])
7893ae
-- 
7893ae
2.14.3
7893ae