diff --git a/debian/changelog b/debian/changelog index aef12e6f892309b1018c51ac6660b17f34f69be2..0ef4fb34257a83be87700dff64f67db202fda3f2 100644 --- a/debian/changelog +++ b/debian/changelog @@ -4,6 +4,8 @@ tar (1.30+dfsg-2) unstable; urgency=medium pristine-tar to ask tar to recreate pre-1.30 broken behavior so that it's possible to recover a tar file stored in a repo in the old, broken format. closes: #897653 + * patch from upstream that fixes race condition in dirrem01 and dirrem02 + tests when building on a slow machine, closes: #897591 -- Bdale Garbee <bdale@gag.com> Wed, 16 May 2018 01:47:48 -0600 diff --git a/debian/patches/fix-race-in-dirrem01-and-dirrem02.diff b/debian/patches/fix-race-in-dirrem01-and-dirrem02.diff new file mode 100644 index 0000000000000000000000000000000000000000..90b2434ff8774ad8067c055a81196c9443d5e618 --- /dev/null +++ b/debian/patches/fix-race-in-dirrem01-and-dirrem02.diff @@ -0,0 +1,90 @@ +From 64b43fdf70d82c39eb2ca900cd4f8e49b86c2020 Mon Sep 17 00:00:00 2001 +From: Pavel Raiskup <praiskup@redhat.com> +Date: Thu, 4 Jan 2018 18:55:12 +0100 +Subject: 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. +--- + 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]) +-- +cgit v1.0-41-gc330 + diff --git a/debian/patches/series b/debian/patches/series index 665382520964bf0ef211e5d12182c7976b51ac7f..706876301db8ff79df76dd843372a79079fef219 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -2,3 +2,4 @@ pristine-tar.diff listed03-linux-only rmt.8-header-wrong fix-for-difflink.at-failure.diff +fix-race-in-dirrem01-and-dirrem02.diff