bug-tar
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Bug-tar] [PATCH] tests: fix race in dirrem01 and dirrem02


From: Pavel Raiskup
Subject: Re: [Bug-tar] [PATCH] tests: fix race in dirrem01 and dirrem02
Date: Tue, 13 Mar 2018 21:42:41 +0100

ping, still valid issue

On Thursday, January 4, 2018 7:17:31 PM CET Pavel Raiskup wrote:
> 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])
> 







reply via email to

[Prev in Thread] Current Thread [Next in Thread]