Accepting request 459648 from home:ZRen:branches:Base:System
Fixes for bsc#1012973,bsc#1023283¸bsc#1025560 OBS-URL: https://build.opensuse.org/request/show/459648 OBS-URL: https://build.opensuse.org/package/show/Base:System/lvm2?expand=0&rev=167
This commit is contained in:
parent
bf54202619
commit
d35ced24ce
310
clvmd.ocf
310
clvmd.ocf
@ -1,6 +1,5 @@
|
||||
#!/bin/bash
|
||||
# Copyright (c) 2008 Xinwei Hu
|
||||
# All Rights Reserved.
|
||||
# Copyright (c) 2008 Xinwei Hu 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
|
||||
@ -12,7 +11,7 @@
|
||||
#
|
||||
# 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
|
||||
# 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.
|
||||
@ -38,161 +37,175 @@ DAEMON="${sbindir}/clvmd"
|
||||
CMIRRORD="${sbindir}/cmirrord"
|
||||
LVMCONF="${sbindir}/lvmconf"
|
||||
|
||||
time_to_seconds() {
|
||||
local val
|
||||
val=$1
|
||||
case $val in
|
||||
*h) echo $(( $(echo $val | sed -e "s/h$//") * 3600 ));;
|
||||
*ms) echo $(( $(echo $val | sed -e "s/ms$//") / 1000 ));;
|
||||
*s) echo $val | sed -e "s/s$//";;
|
||||
*m) echo $(( $(echo $val | sed -e "s/m$//") * 60 ));;
|
||||
*) echo "$val";;
|
||||
esac
|
||||
}
|
||||
|
||||
OCF_RESKEY_daemon_timeout=$(time_to_seconds ${OCF_RESKEY_daemon_timeout})
|
||||
|
||||
status_daemons()
|
||||
{
|
||||
PID=`pidofproc "$DAEMON"`
|
||||
PID=`pidofproc "$DAEMON"`
|
||||
NPID=`pidofproc "$CMIRRORD"`
|
||||
if [ -n "$PID" -a -n "$NPID" ]; then
|
||||
return $OCF_SUCCESS
|
||||
fi
|
||||
return $OCF_NOT_RUNNING
|
||||
if [ -n "$PID" -a -n "$NPID" ]; then
|
||||
return $OCF_SUCCESS
|
||||
fi
|
||||
return $OCF_NOT_RUNNING
|
||||
}
|
||||
|
||||
status_clvmd()
|
||||
{
|
||||
PID=`pidofproc "$DAEMON"`
|
||||
if [ -n "$PID" ]; then
|
||||
return $OCF_SUCCESS
|
||||
fi
|
||||
return $OCF_NOT_RUNNING
|
||||
PID=`pidofproc "$DAEMON"`
|
||||
if [ -n "$PID" ]; then
|
||||
return $OCF_SUCCESS
|
||||
fi
|
||||
return $OCF_NOT_RUNNING
|
||||
}
|
||||
|
||||
status_cmirrord()
|
||||
{
|
||||
PID=`pidofproc "$CMIRRORD"`
|
||||
if [ -n "$PID" ]; then
|
||||
return $OCF_SUCCESS
|
||||
fi
|
||||
return $OCF_NOT_RUNNING
|
||||
PID=`pidofproc "$CMIRRORD"`
|
||||
if [ -n "$PID" ]; then
|
||||
return $OCF_SUCCESS
|
||||
fi
|
||||
return $OCF_NOT_RUNNING
|
||||
}
|
||||
|
||||
bringup_clvmd()
|
||||
{
|
||||
if [ ! -e "$DAEMON" ]; then
|
||||
ocf_log err "Required binary not found: $DAEMON"
|
||||
return $OCF_ERR_INSTALLED
|
||||
fi
|
||||
if [ ! -e "$DAEMON" ]; then
|
||||
ocf_log err "Required binary not found: $DAEMON"
|
||||
return $OCF_ERR_INSTALLED
|
||||
fi
|
||||
|
||||
start_daemon "$DAEMON" "$OCF_RESKEY_daemon_options"; rc=$?
|
||||
if [ $rc != 0 ]; then
|
||||
ocf_log err "Could not start $DAEMON"
|
||||
return $OCF_ERR_GENERIC
|
||||
fi
|
||||
start_daemon "$DAEMON" "$OCF_RESKEY_daemon_options"; rc=$?
|
||||
if [ $rc != 0 ]; then
|
||||
ocf_log err "Could not start $DAEMON"
|
||||
return $OCF_ERR_GENERIC
|
||||
fi
|
||||
|
||||
sleep 1
|
||||
COUNT=0
|
||||
rc=$OCF_NOT_RUNNING
|
||||
sleep 1
|
||||
COUNT=0
|
||||
rc=$OCF_NOT_RUNNING
|
||||
|
||||
while [ $rc = $OCF_NOT_RUNNING ]; do
|
||||
COUNT=`expr $COUNT + 1`
|
||||
if [ $COUNT -gt $OCF_RESKEY_daemon_timeout ]; then
|
||||
ocf_log err "`basename $DAEMON` did not come up"
|
||||
return $OCF_ERR_GENERIC
|
||||
fi
|
||||
status_clvmd; rc=$?
|
||||
sleep 1
|
||||
done
|
||||
while [ $rc = $OCF_NOT_RUNNING ]; do
|
||||
COUNT=`expr $COUNT + 1`
|
||||
if [ $COUNT -gt $OCF_RESKEY_daemon_timeout ]; then
|
||||
ocf_log err "`basename $DAEMON` did not come up"
|
||||
return $OCF_ERR_GENERIC
|
||||
fi
|
||||
status_clvmd; rc=$?
|
||||
sleep 1
|
||||
done
|
||||
|
||||
return $rc
|
||||
return $rc
|
||||
}
|
||||
|
||||
bringup_cmirrord()
|
||||
{
|
||||
if [ ! -e "$CMIRRORD" ]; then
|
||||
ocf_log err "Required binary not found: $DAEMON"
|
||||
return $OCF_ERR_INSTALLED
|
||||
fi
|
||||
if [ ! -e "$CMIRRORD" ]; then
|
||||
ocf_log err "Required binary not found: $DAEMON"
|
||||
return $OCF_ERR_INSTALLED
|
||||
fi
|
||||
|
||||
start_daemon "$CMIRRORD"; rc=$?
|
||||
if [ $rc != 0 ]; then
|
||||
ocf_log err "Could not start $CMIRRORD"
|
||||
return $OCF_ERR_GENERIC
|
||||
fi
|
||||
start_daemon "$CMIRRORD"; rc=$?
|
||||
if [ $rc != 0 ]; then
|
||||
ocf_log err "Could not start $CMIRRORD"
|
||||
return $OCF_ERR_GENERIC
|
||||
fi
|
||||
|
||||
sleep 1
|
||||
COUNT=0
|
||||
rc=$OCF_NOT_RUNNING
|
||||
sleep 1
|
||||
COUNT=0
|
||||
rc=$OCF_NOT_RUNNING
|
||||
|
||||
while [ $rc = $OCF_NOT_RUNNING ]; do
|
||||
COUNT=`expr $COUNT + 1`
|
||||
if [ $COUNT -gt $OCF_RESKEY_daemon_timeout ]; then
|
||||
ocf_log err "`basename $DAEMON` did not come up"
|
||||
return $OCF_ERR_GENERIC
|
||||
fi
|
||||
status_cmirrord; rc=$?
|
||||
sleep 1
|
||||
done
|
||||
while [ $rc = $OCF_NOT_RUNNING ]; do
|
||||
COUNT=`expr $COUNT + 1`
|
||||
if [ $COUNT -gt $OCF_RESKEY_daemon_timeout ]; then
|
||||
ocf_log err "`basename $DAEMON` did not come up"
|
||||
return $OCF_ERR_GENERIC
|
||||
fi
|
||||
status_cmirrord; rc=$?
|
||||
sleep 1
|
||||
done
|
||||
|
||||
return $rc
|
||||
return $rc
|
||||
}
|
||||
|
||||
|
||||
kill_clvmd()
|
||||
{
|
||||
status_clvmd; rc=$?
|
||||
if [ $rc != $OCF_SUCCESS ]; then
|
||||
return rc
|
||||
fi
|
||||
status_clvmd; rc=$?
|
||||
if [ $rc != $OCF_SUCCESS ]; then
|
||||
return $rc
|
||||
fi
|
||||
|
||||
ocf_log info "Stopping `basename "$DAEMON"`"
|
||||
killproc -INT "$DAEMON"
|
||||
ocf_log info "Stopping `basename "$DAEMON"`"
|
||||
killproc -INT "$DAEMON"
|
||||
|
||||
sleep 1
|
||||
status_daemons; rc=$?
|
||||
|
||||
COUNT=0
|
||||
while [ $rc = $OCF_SUCCESS ]; do
|
||||
COUNT=`expr $COUNT + 1`
|
||||
if [ $COUNT -gt $OCF_RESKEY_daemon_timeout ]; then
|
||||
ocf_log err "`basename $DAEMON` shutdown emergency"
|
||||
killproc -9 "$DAEMON"
|
||||
sleep 1
|
||||
status_daemons; rc=$?
|
||||
|
||||
COUNT=0
|
||||
while [ $rc = $OCF_SUCCESS ]; do
|
||||
COUNT=`expr $COUNT + 1`
|
||||
if [ $COUNT -gt $OCF_RESKEY_daemon_timeout ]; then
|
||||
ocf_log err "`basename $DAEMON` shutdown emergency"
|
||||
killproc -9 "$DAEMON"
|
||||
status_clvmd; rc=$?
|
||||
if [ $rc = $OCF_NOT_RUNNING ]; then
|
||||
return $OCF_SUCCESS
|
||||
else
|
||||
return $OCF_ERR_GENERIC
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
killproc -INT "$DAEMON"
|
||||
sleep 1
|
||||
sleep 1
|
||||
status_clvmd; rc=$?
|
||||
done
|
||||
done
|
||||
|
||||
return $OCF_SUCCESS
|
||||
return $OCF_SUCCESS
|
||||
}
|
||||
|
||||
kill_cmirrord()
|
||||
{
|
||||
status_cmirrord; rc=$?
|
||||
if [ $rc != $OCF_SUCCESS ]; then
|
||||
return rc
|
||||
fi
|
||||
status_cmirrord; rc=$?
|
||||
if [ $rc != $OCF_SUCCESS ]; then
|
||||
return $rc
|
||||
fi
|
||||
|
||||
ocf_log info "Stopping `basename "$CMIRRORD"`"
|
||||
killproc -INT "$CMIRRORD"
|
||||
ocf_log info "Stopping `basename "$CMIRRORD"`"
|
||||
killproc -INT "$CMIRRORD"
|
||||
|
||||
sleep 1
|
||||
status_cmirrord; rc=$?
|
||||
|
||||
COUNT=0
|
||||
while [ $rc = $OCF_SUCCESS ]; do
|
||||
COUNT=`expr $COUNT + 1`
|
||||
if [ $COUNT -gt $OCF_RESKEY_daemon_timeout ]; then
|
||||
ocf_log err "`basename $CMIRRORD` shutdown emergency"
|
||||
killproc -9 "$CMIRRORD"
|
||||
sleep 1
|
||||
status_cmirrord; rc=$?
|
||||
|
||||
COUNT=0
|
||||
while [ $rc = $OCF_SUCCESS ]; do
|
||||
COUNT=`expr $COUNT + 1`
|
||||
if [ $COUNT -gt $OCF_RESKEY_daemon_timeout ]; then
|
||||
ocf_log err "`basename $CMIRRORD` shutdown emergency"
|
||||
killproc -9 "$CMIRRORD"
|
||||
status_cmirrord; rc=$?
|
||||
if [ $rc = $OCF_NOT_RUNNING ]; then
|
||||
return $OCF_SUCCESS
|
||||
else
|
||||
return $OCF_ERR_GENERIC
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
killproc -INT "$CMIRRORD"
|
||||
sleep 1
|
||||
sleep 1
|
||||
status_cmirrord; rc=$?
|
||||
done
|
||||
done
|
||||
|
||||
return $OCF_SUCCESS
|
||||
return $OCF_SUCCESS
|
||||
}
|
||||
|
||||
|
||||
@ -201,34 +214,34 @@ clvmd_start()
|
||||
clvmd_validate
|
||||
ocf_log info "Starting $OCF_RESOURCE_INSTANCE"
|
||||
|
||||
# autoset locking type to clusted when lvmconf tool is available
|
||||
if [ -x "$LVMCONF" ]; then
|
||||
$LVMCONF --enable-cluster > /dev/null 2>&1
|
||||
fi
|
||||
# autoset locking type to clusted when lvmconf tool is available
|
||||
if [ -x "$LVMCONF" ]; then
|
||||
$LVMCONF --enable-cluster > /dev/null 2>&1
|
||||
fi
|
||||
|
||||
status_clvmd; rc=$?
|
||||
if [ $rc == $OCF_NOT_RUNNING ]; then
|
||||
bringup_clvmd; rc=$?
|
||||
if [ $rc != $OCF_SUCCESS ]; then
|
||||
return $OCF_ERR_GENERIC
|
||||
fi
|
||||
if [ $rc == $OCF_NOT_RUNNING ]; then
|
||||
bringup_clvmd; rc=$?
|
||||
if [ $rc != $OCF_SUCCESS ]; then
|
||||
return $OCF_ERR_GENERIC
|
||||
fi
|
||||
fi
|
||||
|
||||
status_cmirrord; rc=$?
|
||||
if [ $rc == $OCF_NOT_RUNNING ]; then
|
||||
bringup_cmirrord; rc=$?
|
||||
if [ $rc != $OCF_SUCCESS ]; then
|
||||
kill_clvmd
|
||||
return $OCF_ERR_GENERIC
|
||||
fi
|
||||
if [ $rc == $OCF_NOT_RUNNING ]; then
|
||||
bringup_cmirrord; rc=$?
|
||||
if [ $rc != $OCF_SUCCESS ]; then
|
||||
kill_clvmd
|
||||
return $OCF_ERR_GENERIC
|
||||
fi
|
||||
fi
|
||||
|
||||
return $OCF_SUCCESS
|
||||
return $OCF_SUCCESS
|
||||
}
|
||||
|
||||
clvmd_stop() {
|
||||
clvmd_validate
|
||||
ocf_log info "Stopping $OCF_RESOURCE_INSTANCE"
|
||||
ocf_log info "Stopping $OCF_RESOURCE_INSTANCE"
|
||||
|
||||
status_clvmd; rc=$?
|
||||
if [ $rc != $OCF_NOT_RUNNING ]; then
|
||||
@ -252,28 +265,28 @@ clvmd_stop() {
|
||||
}
|
||||
|
||||
clvmd_monitor() {
|
||||
clvmd_validate
|
||||
clvmd_validate
|
||||
|
||||
status_daemons
|
||||
return $?
|
||||
status_daemons
|
||||
return $?
|
||||
}
|
||||
|
||||
clvmd_usage() {
|
||||
echo "usage: $0 {start|stop|monitor|validate-all|meta-data}"
|
||||
echo " Expects to have a fully populated OCF RA-compliant environment set."
|
||||
echo " In particualr, a value for OCF_ROOT"
|
||||
echo "usage: $0 {start|stop|monitor|validate-all|meta-data}"
|
||||
echo " Expects to have a fully populated OCF RA-compliant environment set."
|
||||
echo " In particualr, a value for OCF_ROOT"
|
||||
}
|
||||
|
||||
clvmd_validate() {
|
||||
: TODO: check for globally_unique=true and return OCF_ERR_CONFIGURED
|
||||
case ${OCF_RESKEY_CRM_meta_globally_unique} in
|
||||
: TODO: check for globally_unique=true and return OCF_ERR_CONFIGURED
|
||||
case ${OCF_RESKEY_CRM_meta_globally_unique} in
|
||||
yes|Yes|true|True|1)
|
||||
ocf_log err "$OCF_RESOURCE_INSTANCE must be configured with the globally_unique=false meta attribute"
|
||||
exit $OCF_ERR_CONFIGURED
|
||||
;;
|
||||
esac
|
||||
ocf_log err "$OCF_RESOURCE_INSTANCE must be configured with the globally_unique=false meta attribute"
|
||||
exit $OCF_ERR_CONFIGURED
|
||||
;;
|
||||
esac
|
||||
|
||||
return $OCF_SUCCESS
|
||||
return $OCF_SUCCESS
|
||||
}
|
||||
|
||||
meta_data() {
|
||||
@ -289,30 +302,29 @@ It starts clvmd and cmirrord as anonymous clones.
|
||||
<shortdesc lang="en">clvmd resource agent</shortdesc>
|
||||
<parameters>
|
||||
|
||||
<parameter name="daemon_timeout" unique="0">
|
||||
<longdesc lang="en">
|
||||
<parameter name="daemon_timeout" unique="0">
|
||||
<longdesc lang="en">
|
||||
Number of seconds to allow the control daemon to come up and down
|
||||
</longdesc>
|
||||
<shortdesc lang="en">Daemon Timeout</shortdesc>
|
||||
<content type="string" default="80"/>
|
||||
</parameter>
|
||||
</longdesc>
|
||||
<shortdesc lang="en">Daemon Timeout</shortdesc>
|
||||
<content type="string" default="80"/>
|
||||
</parameter>
|
||||
|
||||
<parameter name="daemon_options" unique="0">
|
||||
<longdesc lang="en">
|
||||
<parameter name="daemon_options" unique="0">
|
||||
<longdesc lang="en">
|
||||
Options to clvmd. Refer to clvmd.8 for detailed descriptions.
|
||||
</longdesc>
|
||||
<shortdesc lang="en">Daemon Options</shortdesc>
|
||||
<content type="string" default="-d0"/>
|
||||
</parameter>
|
||||
|
||||
</longdesc>
|
||||
<shortdesc lang="en">Daemon Options</shortdesc>
|
||||
<content type="string" default="-d0"/>
|
||||
</parameter>
|
||||
|
||||
</parameters>
|
||||
<actions>
|
||||
<action name="start" timeout="90" />
|
||||
<action name="stop" timeout="100" />
|
||||
<action name="monitor" timeout="20" depth="0"/>
|
||||
<action name="meta-data" timeout="5" />
|
||||
<action name="validate-all" timeout="30" />
|
||||
<action name="start" timeout="90"/>
|
||||
<action name="stop" timeout="100"/>
|
||||
<action name="monitor" timeout="20" depth="0"/>
|
||||
<action name="meta-data" timeout="5"/>
|
||||
<action name="validate-all" timeout="30"/>
|
||||
</actions>
|
||||
</resource-agent>
|
||||
END
|
||||
@ -333,7 +345,7 @@ validate-all) clvmd_validate
|
||||
usage|help) clvmd_usage
|
||||
exit $OCF_SUCCESS
|
||||
;;
|
||||
*) clvmd_usage
|
||||
*) clvmd_usage
|
||||
exit $OCF_ERR_UNIMPLEMENTED
|
||||
;;
|
||||
esac
|
||||
|
198
cmirrord.ocf
198
cmirrord.ocf
@ -1,6 +1,5 @@
|
||||
#!/bin/bash
|
||||
# Copyright (c) 2008 Xinwei Hu
|
||||
# All Rights Reserved.
|
||||
# Copyright (c) 2008 Xinwei Hu 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
|
||||
@ -12,7 +11,7 @@
|
||||
#
|
||||
# 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
|
||||
# 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.
|
||||
@ -35,126 +34,140 @@ sbindir=$HA_SBIN_DIR
|
||||
# Common variables
|
||||
DAEMON="${sbindir}/cmirrord"
|
||||
|
||||
time_to_seconds() {
|
||||
local val
|
||||
val=$1
|
||||
case $val in
|
||||
*h) echo $(( $(echo $val | sed -e "s/h$//") * 3600 ));;
|
||||
*ms) echo $(( $(echo $val | sed -e "s/ms$//") / 1000 ));;
|
||||
*s) echo $val | sed -e "s/s$//";;
|
||||
*m) echo $(( $(echo $val | sed -e "s/m$//") * 60 ));;
|
||||
*) echo "$val";;
|
||||
esac
|
||||
}
|
||||
|
||||
OCF_RESKEY_daemon_timeout=$(time_to_seconds ${OCF_RESKEY_daemon_timeout})
|
||||
|
||||
status_daemon()
|
||||
{
|
||||
PID=`pidofproc "$DAEMON"`
|
||||
if [ -n "$PID" ]; then
|
||||
return $OCF_SUCCESS
|
||||
fi
|
||||
return $OCF_NOT_RUNNING
|
||||
PID=`pidofproc "$DAEMON"`
|
||||
if [ -n "$PID" ]; then
|
||||
return $OCF_SUCCESS
|
||||
fi
|
||||
return $OCF_NOT_RUNNING
|
||||
}
|
||||
|
||||
bringup_daemon()
|
||||
{
|
||||
if [ ! -e "$DAEMON" ]; then
|
||||
ocf_log err "Required binary not found: $DAEMON"
|
||||
return $OCF_ERR_INSTALLED
|
||||
fi
|
||||
if [ ! -e "$DAEMON" ]; then
|
||||
ocf_log err "Required binary not found: $DAEMON"
|
||||
return $OCF_ERR_INSTALLED
|
||||
fi
|
||||
|
||||
start_daemon "$DAEMON"; rc=$?
|
||||
if [ $rc != 0 ]; then
|
||||
ocf_log err "Could not start $DAEMON"
|
||||
return $OCF_ERR_GENERIC
|
||||
fi
|
||||
start_daemon "$DAEMON"; rc=$?
|
||||
if [ $rc != 0 ]; then
|
||||
ocf_log err "Could not start $DAEMON"
|
||||
return $OCF_ERR_GENERIC
|
||||
fi
|
||||
|
||||
sleep 1
|
||||
COUNT=0
|
||||
rc=$OCF_NOT_RUNNING
|
||||
sleep 1
|
||||
COUNT=0
|
||||
rc=$OCF_NOT_RUNNING
|
||||
|
||||
while [ $rc = $OCF_NOT_RUNNING ]; do
|
||||
COUNT=`expr $COUNT + 1`
|
||||
if [ $COUNT -gt $OCF_RESKEY_daemon_timeout ]; then
|
||||
ocf_log err "`basename $DAEMON` did not come up"
|
||||
return $OCF_ERR_GENERIC
|
||||
fi
|
||||
status_daemon; rc=$?
|
||||
sleep 1
|
||||
done
|
||||
while [ $rc = $OCF_NOT_RUNNING ]; do
|
||||
COUNT=`expr $COUNT + 1`
|
||||
if [ $COUNT -gt $OCF_RESKEY_daemon_timeout ]; then
|
||||
ocf_log err "`basename $DAEMON` did not come up"
|
||||
return $OCF_ERR_GENERIC
|
||||
fi
|
||||
status_daemon; rc=$?
|
||||
sleep 1
|
||||
done
|
||||
|
||||
return $rc
|
||||
return $rc
|
||||
}
|
||||
|
||||
kill_daemon()
|
||||
{
|
||||
status_daemon; rc=$?
|
||||
if [ $rc != $OCF_SUCCESS ]; then
|
||||
return rc
|
||||
fi
|
||||
status_daemon; rc=$?
|
||||
if [ $rc != $OCF_SUCCESS ]; then
|
||||
return $rc
|
||||
fi
|
||||
|
||||
ocf_log info "Stopping `basename "$DAEMON"`"
|
||||
killproc -INT "$DAEMON"
|
||||
ocf_log info "Stopping `basename "$DAEMON"`"
|
||||
killproc -INT "$DAEMON"
|
||||
|
||||
sleep 1
|
||||
status_daemon; rc=$?
|
||||
|
||||
COUNT=0
|
||||
while [ $rc = $OCF_SUCCESS ]; do
|
||||
COUNT=`expr $COUNT + 1`
|
||||
if [ $COUNT -gt $OCF_RESKEY_daemon_timeout ]; then
|
||||
ocf_log err "`basename $DAEMON` shutdown emergency"
|
||||
killproc -9 "$DAEMON"
|
||||
sleep 1
|
||||
status_daemon; rc=$?
|
||||
|
||||
COUNT=0
|
||||
while [ $rc = $OCF_SUCCESS ]; do
|
||||
COUNT=`expr $COUNT + 1`
|
||||
if [ $COUNT -gt $OCF_RESKEY_daemon_timeout ]; then
|
||||
ocf_log err "`basename $DAEMON` shutdown emergency"
|
||||
killproc -9 "$DAEMON"
|
||||
status_daemon; rc=$?
|
||||
if [ $rc = $OCF_NOT_RUNNING ]; then
|
||||
return $OCF_SUCCESS
|
||||
else
|
||||
return $OCF_ERR_GENERIC
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
killproc -INT "$DAEMON"
|
||||
sleep 1
|
||||
sleep 1
|
||||
status_daemon; rc=$?
|
||||
done
|
||||
done
|
||||
|
||||
return $OCF_SUCCESS
|
||||
return $OCF_SUCCESS
|
||||
}
|
||||
|
||||
cmirrord_start() {
|
||||
|
||||
cmirrord_monitor; rc=$?
|
||||
if [ $rc != $OCF_NOT_RUNNING ]; then
|
||||
return $rc
|
||||
fi
|
||||
cmirrord_monitor; rc=$?
|
||||
if [ $rc != $OCF_NOT_RUNNING ]; then
|
||||
return $rc
|
||||
fi
|
||||
|
||||
ocf_log info "Starting $OCF_RESOURCE_INSTANCE"
|
||||
ocf_log info "Starting $OCF_RESOURCE_INSTANCE"
|
||||
|
||||
bringup_daemon
|
||||
return $?
|
||||
bringup_daemon
|
||||
return $?
|
||||
}
|
||||
|
||||
cmirrord_stop() {
|
||||
cmirrord_monitor; rc=$?
|
||||
case $rc in
|
||||
$OCF_NOT_RUNNING) return $OCF_SUCCESS;;
|
||||
esac
|
||||
cmirrord_monitor; rc=$?
|
||||
case $rc in
|
||||
$OCF_NOT_RUNNING) return $OCF_SUCCESS;;
|
||||
esac
|
||||
|
||||
ocf_log info "Stopping $OCF_RESOURCE_INSTANCE"
|
||||
ocf_log info "Stopping $OCF_RESOURCE_INSTANCE"
|
||||
|
||||
kill_daemon
|
||||
kill_daemon
|
||||
}
|
||||
|
||||
cmirrord_monitor() {
|
||||
cmirrord_validate
|
||||
cmirrord_validate
|
||||
|
||||
status_daemon
|
||||
return $?
|
||||
status_daemon
|
||||
return $?
|
||||
}
|
||||
|
||||
cmirrord_usage() {
|
||||
echo "usage: $0 {start|stop|monitor|validate-all|meta-data}"
|
||||
echo " Expects to have a fully populated OCF RA-compliant environment set."
|
||||
echo " In particualr, a value for OCF_ROOT"
|
||||
echo "usage: $0 {start|stop|monitor|validate-all|meta-data}"
|
||||
echo " Expects to have a fully populated OCF RA-compliant environment set."
|
||||
echo " In particualr, a value for OCF_ROOT"
|
||||
}
|
||||
|
||||
cmirrord_validate() {
|
||||
: TODO: check for globally_unique=true and return OCF_ERR_CONFIGURED
|
||||
case ${OCF_RESKEY_CRM_meta_globally_unique} in
|
||||
: TODO: check for globally_unique=true and return OCF_ERR_CONFIGURED
|
||||
case ${OCF_RESKEY_CRM_meta_globally_unique} in
|
||||
yes|Yes|true|True|1)
|
||||
ocf_log err "$OCF_RESOURCE_INSTANCE must be configured with the globally_unique=false meta attribute"
|
||||
exit $OCF_ERR_CONFIGURED
|
||||
;;
|
||||
esac
|
||||
ocf_log err "$OCF_RESOURCE_INSTANCE must be configured with the globally_unique=false meta attribute"
|
||||
exit $OCF_ERR_CONFIGURED
|
||||
;;
|
||||
esac
|
||||
|
||||
return $OCF_SUCCESS
|
||||
return $OCF_SUCCESS
|
||||
}
|
||||
|
||||
meta_data() {
|
||||
@ -170,31 +183,30 @@ It starts cmirrord as anonymous clones.
|
||||
<shortdesc lang="en">cmirrord resource agent</shortdesc>
|
||||
<parameters>
|
||||
|
||||
<parameter name="daemon_timeout" unique="0">
|
||||
<longdesc lang="en">
|
||||
<parameter name="daemon_timeout" unique="0">
|
||||
<longdesc lang="en">
|
||||
Number of seconds to allow the control daemon to come up and down
|
||||
</longdesc>
|
||||
<shortdesc lang="en">Daemon Timeout</shortdesc>
|
||||
<content type="string" default="80"/>
|
||||
</parameter>
|
||||
</longdesc>
|
||||
<shortdesc lang="en">Daemon Timeout</shortdesc>
|
||||
<content type="string" default="80"/>
|
||||
</parameter>
|
||||
|
||||
<parameter name="daemon_options" unique="0">
|
||||
<longdesc lang="en">
|
||||
<parameter name="daemon_options" unique="0">
|
||||
<longdesc lang="en">
|
||||
Options to cmirrord. Cmirrord actually doesn't accept any options
|
||||
for now.
|
||||
</longdesc>
|
||||
<shortdesc lang="en">Daemon Options</shortdesc>
|
||||
<content type="string" default=""/>
|
||||
</parameter>
|
||||
|
||||
</longdesc>
|
||||
<shortdesc lang="en">Daemon Options</shortdesc>
|
||||
<content type="string" default=""/>
|
||||
</parameter>
|
||||
|
||||
</parameters>
|
||||
<actions>
|
||||
<action name="start" timeout="90" />
|
||||
<action name="stop" timeout="100" />
|
||||
<action name="monitor" timeout="20" depth="0"/>
|
||||
<action name="meta-data" timeout="5" />
|
||||
<action name="validate-all" timeout="30" />
|
||||
<action name="start" timeout="90"/>
|
||||
<action name="stop" timeout="100"/>
|
||||
<action name="monitor" timeout="20" depth="0"/>
|
||||
<action name="meta-data" timeout="5"/>
|
||||
<action name="validate-all" timeout="30"/>
|
||||
</actions>
|
||||
</resource-agent>
|
||||
END
|
||||
|
@ -1,3 +1,20 @@
|
||||
-------------------------------------------------------------------
|
||||
Wed Feb 22 10:43:38 UTC 2017 - zren@suse.com
|
||||
|
||||
- Fix several issues about clvmd/cmorriord RAs (bsc#1023283,
|
||||
bsc#1025560)
|
||||
* deal with time values passed down with time units
|
||||
* make correct "return code"
|
||||
* fix format issue that tab messes up with spaces
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Wed Feb 22 06:39:27 UTC 2017 - zren@suse.com
|
||||
|
||||
- udev: simplify special-case for md in 69-dm-lvm-metadata.rules
|
||||
* fix regression of bsc#1012973
|
||||
* drop remove-special-case-for-md-in-69-dm-lvm-metadata.rul.patch
|
||||
* add simplify-special-case-for-md-in-69-dm-lvm-metadata.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri Jan 20 09:46:27 UTC 2017 - tchvatal@suse.com
|
||||
|
||||
|
@ -78,8 +78,8 @@ Patch2009: pvcreate-enhance-the-error-message.patch
|
||||
Patch2010: 69-dm-lvm-metad.rules-Do-not-process-rules-for-multi.patch
|
||||
#PATCH-FIX-SUSE, bnc#950089
|
||||
Patch2011: lvm2-testsuite.patch
|
||||
# Remove special case for the md rules
|
||||
Patch2012: remove-special-case-for-md-in-69-dm-lvm-metadata.rul.patch
|
||||
# simplify special case for the md rules
|
||||
Patch2012: simplify-special-case-for-md-in-69-dm-lvm-metadata.patch
|
||||
### COMMON-PATCH-END ###
|
||||
BuildRequires: gcc-c++
|
||||
BuildRequires: pkgconfig
|
||||
|
@ -1,3 +1,20 @@
|
||||
-------------------------------------------------------------------
|
||||
Wed Feb 22 10:43:38 UTC 2017 - zren@suse.com
|
||||
|
||||
- Fix several issues about clvmd/cmorriord RAs (bsc#1023283,
|
||||
bsc#1025560)
|
||||
* deal with time values passed down with time units
|
||||
* make correct "return code"
|
||||
* fix format issue that tab messes up with spaces
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Wed Feb 22 06:39:27 UTC 2017 - zren@suse.com
|
||||
|
||||
- udev: simplify special-case for md in 69-dm-lvm-metadata.rules
|
||||
* fix regression of bsc#1012973
|
||||
* drop remove-special-case-for-md-in-69-dm-lvm-metadata.rul.patch
|
||||
* add simplify-special-case-for-md-in-69-dm-lvm-metadata.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri Jan 20 09:46:27 UTC 2017 - tchvatal@suse.com
|
||||
|
||||
|
@ -77,8 +77,8 @@ Patch2009: pvcreate-enhance-the-error-message.patch
|
||||
Patch2010: 69-dm-lvm-metad.rules-Do-not-process-rules-for-multi.patch
|
||||
#PATCH-FIX-SUSE, bnc#950089
|
||||
Patch2011: lvm2-testsuite.patch
|
||||
# Remove special case for the md rules
|
||||
Patch2012: remove-special-case-for-md-in-69-dm-lvm-metadata.rul.patch
|
||||
# simplify special case for the md rules
|
||||
Patch2012: simplify-special-case-for-md-in-69-dm-lvm-metadata.patch
|
||||
### COMMON-PATCH-END ###
|
||||
BuildRequires: libcorosync-devel
|
||||
BuildRequires: libdlm-devel
|
||||
|
17
lvm2.changes
17
lvm2.changes
@ -1,3 +1,20 @@
|
||||
-------------------------------------------------------------------
|
||||
Wed Feb 22 10:43:38 UTC 2017 - zren@suse.com
|
||||
|
||||
- Fix several issues about clvmd/cmorriord RAs (bsc#1023283,
|
||||
bsc#1025560)
|
||||
* deal with time values passed down with time units
|
||||
* make correct "return code"
|
||||
* fix format issue that tab messes up with spaces
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Wed Feb 22 06:39:27 UTC 2017 - zren@suse.com
|
||||
|
||||
- udev: simplify special-case for md in 69-dm-lvm-metadata.rules
|
||||
* fix regression of bsc#1012973
|
||||
* drop remove-special-case-for-md-in-69-dm-lvm-metadata.rul.patch
|
||||
* add simplify-special-case-for-md-in-69-dm-lvm-metadata.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri Jan 20 09:46:27 UTC 2017 - tchvatal@suse.com
|
||||
|
||||
|
@ -79,8 +79,8 @@ Patch2009: pvcreate-enhance-the-error-message.patch
|
||||
Patch2010: 69-dm-lvm-metad.rules-Do-not-process-rules-for-multi.patch
|
||||
#PATCH-FIX-SUSE, bnc#950089
|
||||
Patch2011: lvm2-testsuite.patch
|
||||
# Remove special case for the md rules
|
||||
Patch2012: remove-special-case-for-md-in-69-dm-lvm-metadata.rul.patch
|
||||
# simplify special case for the md rules
|
||||
Patch2012: simplify-special-case-for-md-in-69-dm-lvm-metadata.patch
|
||||
### COMMON-PATCH-END ###
|
||||
BuildRequires: gcc-c++
|
||||
BuildRequires: libaio-devel
|
||||
|
@ -1,9 +1,9 @@
|
||||
From 2759c9fa04af726d2777db142806287256bd9cc5 Mon Sep 17 00:00:00 2001
|
||||
From 0913b597d61b9b430654d7ab06528cdfcfaf06f4 Mon Sep 17 00:00:00 2001
|
||||
From: NeilBrown <neilb@suse.com>
|
||||
Date: Wed, 4 Jan 2017 14:30:52 +1100
|
||||
Subject: [PATCH] Remove special-case for md in 69-dm-lvm-metadata.rules
|
||||
Date: Wed, 4 Jan 2017 14:20:53 +1100
|
||||
Subject: [PATCH] Simplify special-case for md in 69-dm-lvm-metadata.rules
|
||||
|
||||
This special casing brings no value. It appears to attempt to
|
||||
This special casing brings little value. It appears to attempt to
|
||||
determine if the array is active yet or not, and to skip
|
||||
processing if the array has not yet been started.
|
||||
However, if the array hasn't been started, then "blkid" will
|
||||
@ -24,36 +24,35 @@ and "udevadm trigger --action=add" will be run.
|
||||
So the first and only event seen by this script for an md device will be
|
||||
"add", and it will incorrectly ignore it.
|
||||
|
||||
It is probable that the special handling for "loop" should be removed as
|
||||
well, but I have not actually seen that cause a problem, so I'm
|
||||
leaving it unchanged.
|
||||
So replace the special handling with code that simply jumps to lvm_scan
|
||||
on any 'add' or 'change' event.
|
||||
|
||||
Signed-off-by: NeilBrown <neilb@suse.com>
|
||||
---
|
||||
udev/69-dm-lvm-metad.rules.in | 10 ----------
|
||||
1 file changed, 10 deletions(-)
|
||||
udev/69-dm-lvm-metad.rules.in | 8 +++-----
|
||||
1 file changed, 3 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/udev/69-dm-lvm-metad.rules.in b/udev/69-dm-lvm-metad.rules.in
|
||||
index bd75fc8..db213ed 100644
|
||||
index bd75fc8efcd5..fcbb7f755eba 100644
|
||||
--- a/udev/69-dm-lvm-metad.rules.in
|
||||
+++ b/udev/69-dm-lvm-metad.rules.in
|
||||
@@ -50,16 +50,6 @@ KERNEL!="dm-[0-9]*", GOTO="next"
|
||||
ENV{DM_UDEV_PRIMARY_SOURCE_FLAG}=="1", ENV{DM_ACTIVATION}=="1", GOTO="lvm_scan"
|
||||
@@ -51,13 +51,11 @@ ENV{DM_UDEV_PRIMARY_SOURCE_FLAG}=="1", ENV{DM_ACTIVATION}=="1", GOTO="lvm_scan"
|
||||
GOTO="lvm_end"
|
||||
|
||||
-# MD device:
|
||||
-LABEL="next"
|
||||
-KERNEL!="md[0-9]*", GOTO="next"
|
||||
# MD device:
|
||||
+# Need to scan on both 'add' and 'change'
|
||||
LABEL="next"
|
||||
KERNEL!="md[0-9]*", GOTO="next"
|
||||
-IMPORT{db}="LVM_MD_PV_ACTIVATED"
|
||||
-ACTION=="add", ENV{LVM_MD_PV_ACTIVATED}=="1", GOTO="lvm_scan"
|
||||
-ACTION=="change", ENV{LVM_MD_PV_ACTIVATED}!="1", TEST=="md/array_state", ENV{LVM_MD_PV_ACTIVATED}="1", GOTO="lvm_scan"
|
||||
-ACTION=="add", KERNEL=="md[0-9]*p[0-9]*", GOTO="lvm_scan"
|
||||
-ENV{LVM_MD_PV_ACTIVATED}!="1", ENV{SYSTEMD_READY}="0"
|
||||
-GOTO="lvm_end"
|
||||
-
|
||||
+ACTION=="add", GOTO="lvm_scan"
|
||||
+ACTION=="change", GOTO="lvm_scan"
|
||||
GOTO="lvm_end"
|
||||
|
||||
# Loop device:
|
||||
LABEL="next"
|
||||
KERNEL!="loop[0-9]*", GOTO="next"
|
||||
--
|
||||
2.10.2
|
||||
2.11.0
|
||||
|
Loading…
Reference in New Issue
Block a user