From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:40922) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TcxB4-0007NA-9t for qemu-devel@nongnu.org; Mon, 26 Nov 2012 06:48:46 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TcxAy-0001wu-Ct for qemu-devel@nongnu.org; Mon, 26 Nov 2012 06:48:42 -0500 Received: from mail7.hitachi.co.jp ([133.145.228.42]:42407) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TcxAx-0001vz-Sy for qemu-devel@nongnu.org; Mon, 26 Nov 2012 06:48:36 -0500 Message-ID: <50B3573D.8070705@hitachi.com> Date: Mon, 26 Nov 2012 20:49:17 +0900 From: Tomoki Sekiyama MIME-Version: 1.0 References: <20121122021535.9852.40353.stgit@melchior2.sdl.hitachi.co.jp> <20121122021549.9852.73727.stgit@melchior2.sdl.hitachi.co.jp> <20121122140343.18a911fe@doriath.home> In-Reply-To: <20121122140343.18a911fe@doriath.home> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v4 2/2] qemu-ga: sample fsfreeze hooks List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: lcapitulino@redhat.com Cc: qemu-devel@nongnu.org, mdroth@linux.vnet.ibm.com On 2012/11/23 1:03, Luiz Capitulino wrote: > On Thu, 22 Nov 2012 11:15:49 +0900 > Tomoki Sekiyama 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 >> +# 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. > 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? >> 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, -- Tomoki Sekiyama Linux Technology Center Hitachi, Ltd., Yokohama Research Laboratory