qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH v4 2/2] qemu-ga: sample fsfreeze hooks


From: Luiz Capitulino
Subject: Re: [Qemu-devel] [PATCH v4 2/2] qemu-ga: sample fsfreeze hooks
Date: Mon, 26 Nov 2012 10:40:01 -0200

On Mon, 26 Nov 2012 20:49:17 +0900
Tomoki Sekiyama <address@hidden> wrote:

> On 2012/11/23 1:03, Luiz Capitulino wrote:
> > On Thu, 22 Nov 2012 11:15:49 +0900
> > Tomoki Sekiyama <address@hidden> wrote:
> > 
> >> Adds sample hook scripts for --fsfreeze-hook option of qemu-ga.
> >>   - fsfreeze-hook : execute scripts in fsfreeze-hook.d/
> >>   - fsfreeze-hook.d.sample/mysql-flush.sh : quiesce MySQL before snapshot
> <snip>
> >> +# Iterate executables in directory "fsfreeze-hook.d" with the specified 
> >> args
> >> +[ ! -d "$FSFREEZE_D" ] && exit 1
> >> +for file in "$FSFREEZE_D"/* ; do
> >> +    is_ignored_file "$file" && continue
> >> +    [ -x "$file" ] || continue
> >> +    echo "$(date): execute $file $@" >>$LOGFILE
> >> +    "$file" "$@" >>$LOGFILE 2>&1
> >> +    STATUS=$?
> >> +    echo "$(date): $file finished with status=$STATUS" >>$LOGFILE
> >> +done
> > 
> > execute_fsfreeze_hook() will fail the freeze process if this script fails. 
> > Two
> > comments:
> > 
> >  1. Do we want to fail the freeze process if one of the sub-scripts fails?
> >     If yes, then we have to exit 1 in the first failure
> 
> I originally thought the hooks are optional; even they failed, 
> filesystem-level
> consistency are still kept in the snapshot.
> However, if we are going to fail fsfreeze process by one of sub-scripts'
> failure, we also need to notify scripts which already succeeded to pre-freeze
> to thaw (or abort) freezing, before exit 1 here.

Right, which makes things more complex. I vote for doing it the simpler way
for now then, which is to ignore subscripts exit status. But then you should
add exit 0 after the loop to avoid this:

> >  2. The exit status of the script will echo's exit status. I doubt we want 
> > that
> 
> Do you mean $STATUS (not $status) is specialized in some shell environments?

No, what I meant is that (afaik) when the script finishes, its return status to
qemu-ga is actually going to be the latest call echo exit status because it's
the last command executed in the loop. If echo fails (say no space) then
the script will fail.

We either, ignore any failures in qemu-ga itself (although we should at least
print a warning there) and/or add exit 0 as the last line of the script.

> 
> >> diff --git a/docs/qemu-guest-agent/fsfreeze-hook.d.sample/mysql-flush.sh 
> >> b/docs/qemu-guest-agent/fsfreeze-hook.d.sample/mysql-flush.sh
> >> new file mode 100755
> >> index 0000000..e6d7998
> >> --- /dev/null
> >> +++ b/docs/qemu-guest-agent/fsfreeze-hook.d.sample/mysql-flush.sh
> >> @@ -0,0 +1,47 @@
> >> +#!/bin/sh
> >> +
> >> +# Flush MySQL tables to the disk before the filesystem is freezed.
> >> +# At the same time, this keeps a read lock while the filesystem is freezed
> >> +# in order to avoid write accesses by the other clients.
> >> +
> >> +MYSQL="mysql -uroot" #"-prootpassword"
> >> +FIFO=/tmp/mysql-flush.fifo
> >> +
> >> +flush_and_wait() {
> >> +    printf "FLUSH TABLES WITH READ LOCK \\G\n"
> >> +    read < $FIFO
> >> +    printf "UNLOCK TABLES \\G\n"
> >> +}
> >> +
> >> +case "$1" in
> >> +    freeze)
> >> +        mkfifo $FIFO || exit 1
> >> +        flush_and_wait | $MYSQL &
> > 
> > Honest question: what happens if I don't have mysql installed?
> 
> Ah OK, availability of mysql should be checked in advance.
> 
> Thanks,




reply via email to

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