summaryrefslogtreecommitdiffstats
path: root/heartbeat/fio.in
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 07:52:36 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 07:52:36 +0000
commit7de03e4e519705301265c0415b3c0af85263a7ac (patch)
tree29d819c5227e3619d18a67d2a5dde963b3229dbe /heartbeat/fio.in
parentInitial commit. (diff)
downloadresource-agents-7de03e4e519705301265c0415b3c0af85263a7ac.tar.xz
resource-agents-7de03e4e519705301265c0415b3c0af85263a7ac.zip
Adding upstream version 1:4.13.0.upstream/1%4.13.0
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'heartbeat/fio.in')
-rw-r--r--heartbeat/fio.in178
1 files changed, 178 insertions, 0 deletions
diff --git a/heartbeat/fio.in b/heartbeat/fio.in
new file mode 100644
index 0000000..4a31251
--- /dev/null
+++ b/heartbeat/fio.in
@@ -0,0 +1,178 @@
+#!@BASH_SHELL@
+#
+# fio RA
+#
+# Copyright (c) 2010 SUSE Linux Products GmbH, Lars Marowsky-Brée
+# All Rights Reserved.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of version 2 of the GNU General Public License as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it would be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+#
+# Further, this software is distributed without any warranty that it is
+# free of the rightful claim of any third person regarding infringement
+# or the like. Any license provided herein, whether implied or
+# otherwise, applies only to this software file. Patent licenses, if
+# any, provided herein do not apply to combinations of this program with
+# other software, or any other product whatsoever.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write the Free Software Foundation,
+# Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
+#
+
+#######################################################################
+# Initialization:
+
+: ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/lib/heartbeat}
+. ${OCF_FUNCTIONS_DIR}/ocf-shellfuncs
+
+# Parameter defaults
+
+OCF_RESKEY_args_default=""
+
+: ${OCF_RESKEY_args=${OCF_RESKEY_args_default}}
+
+#######################################################################
+
+meta_data() {
+ cat <<END
+<?xml version="1.0"?>
+<!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd">
+<resource-agent name="fio" version="1.0">
+<version>1.0</version>
+
+<longdesc lang="en">
+fio is a generic I/O load generator. This RA allows start/stop of fio
+instances to simulate load on a cluster without configuring complex
+services.
+</longdesc>
+<shortdesc lang="en">fio IO load generator</shortdesc>
+
+<parameters>
+<parameter name="args">
+<longdesc lang="en">
+Arguments to the fio client. Minimally, this should be a (list of) job
+descriptions to run.
+</longdesc>
+<shortdesc lang="en">fio arguments</shortdesc>
+<content type="string" default="${OCF_RESKEY_args_default}" />
+</parameter>
+
+</parameters>
+
+<actions>
+<action name="start" timeout="60s" />
+<action name="stop" timeout="60s" />
+<action name="monitor" timeout="60s" interval="10s" />
+<action name="meta-data" timeout="5s" />
+<action name="validate-all" timeout="20s" />
+</actions>
+</resource-agent>
+END
+}
+
+#######################################################################
+
+fio_usage() {
+ cat <<END
+usage: $0 {start|stop|monitor|validate-all|meta-data}
+END
+}
+
+fio_start() {
+ fio_monitor ; rc=$?
+ if [ $rc = $OCF_SUCCESS ]; then
+ ocf_log info "fio already running."
+ exit $OCF_SUCCESS
+ fi
+ if [ $rc != $OCF_NOT_RUNNING ]; then
+ ocf_log info "fio apparently dead; cleaning up before restart"
+ fio_stop
+ fi
+ fio $OCF_RESKEY_args >/dev/null 2>&1 </dev/null &
+ fio_pid=`jobs -p`
+ echo $fio_pid >${fio_state_file}
+ ocf_log info "fio started as pid=$fio_pid"
+ exit $OCF_SUCCESS
+}
+
+fio_stop() {
+ for sig in SIGINT SIGTERM SIGKILL ; do
+ fio_monitor ; rc=$?
+ case $rc in
+ $OCF_NOT_RUNNING)
+ ocf_log info "fio already stopped."
+ exit $OCF_SUCCESS
+ ;;
+ $OCF_ERR_GENERIC)
+ rm $fio_state_file
+ ocf_log info "fio stopped and cleaned up."
+ exit $OCF_SUCCESS
+ ;;
+ $OCF_SUCCESS)
+ if [ -n "$fio_pid" ]; then
+ ocf_log info "Sending $sig to fio (pid=$fio_pid)"
+ kill -$sig $fio_pid
+ sleep 3
+ continue
+ fi
+ ocf_log err "Internal logic failure in fio RA."
+ ;;
+ *) ocf_log err "Internal logic failure in fio RA."
+ ;;
+ esac
+ done
+ ocf_log err "fio did not stop! Perhaps hung on IO?"
+ exit $OCF_ERR_GENERIC
+}
+
+fio_monitor() {
+ fio_state_file="${HA_RSCTMP}/fio-${OCF_RESOURCE_INSTANCE}.state"
+ if [ ! -e $fio_state_file ]; then
+ return $OCF_NOT_RUNNING
+ fi
+ fio_pid=`cat $fio_state_file`
+
+ if [ -z "$fio_pid" ]; then
+ ocf_log err "State file found, but empty. Assuming stopped."
+ return $OCF_NOT_RUNNING
+ fi
+
+ ps=`ps h -o comm $fio_pid 2>&1`
+ if [ "$ps" != "fio" ]; then
+ fio_pid=""
+ return $OCF_ERR_GENERIC
+ fi
+ return $OCF_SUCCESS
+}
+
+fio_validate() {
+ return $OCF_SUCCESS
+}
+
+case $__OCF_ACTION in
+ meta-data) meta_data
+ exit $OCF_SUCCESS
+ ;;
+ validate-all) fio_validate;;
+ usage|help) fio_usage
+ exit $OCF_SUCCESS
+ ;;
+esac
+
+ocf_is_probe || check_binary fio
+
+case $__OCF_ACTION in
+ start) fio_start;;
+ stop) fio_stop;;
+ monitor) fio_monitor;;
+ *) fio_usage
+ exit $OCF_ERR_UNIMPLEMENTED
+ ;;
+esac
+