tests: dirrem: fix race
Proposed upstream: https://www.mail-archive.com/bug-tar@gnu.org/msg05451.html Version: 1.30-1
This commit is contained in:
parent
0b2e2ac261
commit
0521be8808
93
tar-1.30-tests-dirrem.patch
Normal file
93
tar-1.30-tests-dirrem.patch
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
From 298cfc4743b9cca6cc0c685b9fce5b34827bec1b Mon Sep 17 00:00:00 2001
|
||||||
|
From: Pavel Raiskup <praiskup@redhat.com>
|
||||||
|
Date: Thu, 4 Jan 2018 18:21:27 +0100
|
||||||
|
Subject: [PATCH] tests: fix race in dirrem01 and dirrem02
|
||||||
|
|
||||||
|
Proposal:
|
||||||
|
https://www.mail-archive.com/bug-tar@gnu.org/msg05451.html
|
||||||
|
|
||||||
|
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.
|
||||||
|
---
|
||||||
|
tests/dirrem01.at | 5 +++--
|
||||||
|
tests/dirrem02.at | 7 ++++---
|
||||||
|
2 files changed, 7 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/tests/dirrem01.at b/tests/dirrem01.at
|
||||||
|
index 40344dc..dabc206 100644
|
||||||
|
--- a/tests/dirrem01.at
|
||||||
|
+++ b/tests/dirrem01.at
|
||||||
|
@@ -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])
|
||||||
|
|
||||||
|
diff --git a/tests/dirrem02.at b/tests/dirrem02.at
|
||||||
|
index e1cf9ef..924454f 100644
|
||||||
|
--- a/tests/dirrem02.at
|
||||||
|
+++ b/tests/dirrem02.at
|
||||||
|
@@ -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])
|
||||||
|
--
|
||||||
|
2.14.3
|
||||||
|
|
5
tar.spec
5
tar.spec
@ -22,6 +22,7 @@ Patch4: tar-1.28-atime-rofs.patch
|
|||||||
Patch9: tar-1.28-document-exclude-mistakes.patch
|
Patch9: tar-1.28-document-exclude-mistakes.patch
|
||||||
Patch11: tar-1.28-sparse-inf-loops.patch
|
Patch11: tar-1.28-sparse-inf-loops.patch
|
||||||
Patch12: tar-1.30-tests-difflink.patch
|
Patch12: tar-1.30-tests-difflink.patch
|
||||||
|
Patch13: tar-1.30-tests-dirrem.patch
|
||||||
|
|
||||||
# run "make check" by default
|
# run "make check" by default
|
||||||
%bcond_without check
|
%bcond_without check
|
||||||
@ -130,8 +131,8 @@ fi
|
|||||||
%{_infodir}/tar.info*
|
%{_infodir}/tar.info*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
* Tue Dec 19 2017 Pavel Raiskup <praiskup@redhat.com> - 1.30-1
|
* Thu Jan 04 2018 Pavel Raiskup <praiskup@redhat.com> - 1.30-1
|
||||||
- testsuite fix per upstream report
|
- testsuite fixes per upstream reports
|
||||||
|
|
||||||
* Mon Dec 18 2017 Pavel Raiskup <praiskup@redhat.com> - 1.30-1
|
* Mon Dec 18 2017 Pavel Raiskup <praiskup@redhat.com> - 1.30-1
|
||||||
- rebase to latest upstream release, per release notes
|
- rebase to latest upstream release, per release notes
|
||||||
|
Loading…
Reference in New Issue
Block a user