qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Luiz Capitulino <lcapitulino@redhat.com>
To: Tomoki Sekiyama <tomoki.sekiyama.qu@hitachi.com>
Cc: qemu-devel@nongnu.org, mdroth@linux.vnet.ibm.com
Subject: Re: [Qemu-devel] [PATCH v4 2/2] qemu-ga: sample fsfreeze hooks
Date: Mon, 26 Nov 2012 10:40:01 -0200	[thread overview]
Message-ID: <20121126104001.01d68e50@doriath.home> (raw)
In-Reply-To: <50B3573D.8070705@hitachi.com>

On Mon, 26 Nov 2012 20:49:17 +0900
Tomoki Sekiyama <tomoki.sekiyama.qu@hitachi.com> wrote:

> On 2012/11/23 1:03, Luiz Capitulino wrote:
> > On Thu, 22 Nov 2012 11:15:49 +0900
> > Tomoki Sekiyama <tomoki.sekiyama.qu@hitachi.com> 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	other threads:[~2012-11-26 13:33 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-11-22  2:15 [Qemu-devel] [PATCH v4 0/2] qemu-ga: add hook to quiesce the guest on fsfreeze-freeze/thaw Tomoki Sekiyama
2012-11-22  2:15 ` [Qemu-devel] [PATCH v4 1/2] qemu-ga: execute " Tomoki Sekiyama
2012-11-22 15:52   ` Luiz Capitulino
2012-11-26 11:49     ` Tomoki Sekiyama
2012-11-26 12:32       ` Luiz Capitulino
2012-11-22  2:15 ` [Qemu-devel] [PATCH v4 2/2] qemu-ga: sample fsfreeze hooks Tomoki Sekiyama
2012-11-22 16:03   ` Luiz Capitulino
2012-11-26 11:49     ` Tomoki Sekiyama
2012-11-26 12:40       ` Luiz Capitulino [this message]
2012-11-27  2:35         ` Tomoki Sekiyama

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20121126104001.01d68e50@doriath.home \
    --to=lcapitulino@redhat.com \
    --cc=mdroth@linux.vnet.ibm.com \
    --cc=qemu-devel@nongnu.org \
    --cc=tomoki.sekiyama.qu@hitachi.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).