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
|
#!/bin/bash
|
||||||
# Copyright (c) 2008 Xinwei Hu
|
# Copyright (c) 2008 Xinwei Hu All Rights Reserved.
|
||||||
# All Rights Reserved.
|
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# 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
|
# 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
|
# Further, this software is distributed without any warranty that it is
|
||||||
# free of the rightful claim of any third person regarding infringement
|
# 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
|
# otherwise, applies only to this software file. Patent licenses, if
|
||||||
# any, provided herein do not apply to combinations of this program with
|
# any, provided herein do not apply to combinations of this program with
|
||||||
# other software, or any other product whatsoever.
|
# other software, or any other product whatsoever.
|
||||||
@ -38,161 +37,175 @@ DAEMON="${sbindir}/clvmd"
|
|||||||
CMIRRORD="${sbindir}/cmirrord"
|
CMIRRORD="${sbindir}/cmirrord"
|
||||||
LVMCONF="${sbindir}/lvmconf"
|
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()
|
status_daemons()
|
||||||
{
|
{
|
||||||
PID=`pidofproc "$DAEMON"`
|
PID=`pidofproc "$DAEMON"`
|
||||||
NPID=`pidofproc "$CMIRRORD"`
|
NPID=`pidofproc "$CMIRRORD"`
|
||||||
if [ -n "$PID" -a -n "$NPID" ]; then
|
if [ -n "$PID" -a -n "$NPID" ]; then
|
||||||
return $OCF_SUCCESS
|
return $OCF_SUCCESS
|
||||||
fi
|
fi
|
||||||
return $OCF_NOT_RUNNING
|
return $OCF_NOT_RUNNING
|
||||||
}
|
}
|
||||||
|
|
||||||
status_clvmd()
|
status_clvmd()
|
||||||
{
|
{
|
||||||
PID=`pidofproc "$DAEMON"`
|
PID=`pidofproc "$DAEMON"`
|
||||||
if [ -n "$PID" ]; then
|
if [ -n "$PID" ]; then
|
||||||
return $OCF_SUCCESS
|
return $OCF_SUCCESS
|
||||||
fi
|
fi
|
||||||
return $OCF_NOT_RUNNING
|
return $OCF_NOT_RUNNING
|
||||||
}
|
}
|
||||||
|
|
||||||
status_cmirrord()
|
status_cmirrord()
|
||||||
{
|
{
|
||||||
PID=`pidofproc "$CMIRRORD"`
|
PID=`pidofproc "$CMIRRORD"`
|
||||||
if [ -n "$PID" ]; then
|
if [ -n "$PID" ]; then
|
||||||
return $OCF_SUCCESS
|
return $OCF_SUCCESS
|
||||||
fi
|
fi
|
||||||
return $OCF_NOT_RUNNING
|
return $OCF_NOT_RUNNING
|
||||||
}
|
}
|
||||||
|
|
||||||
bringup_clvmd()
|
bringup_clvmd()
|
||||||
{
|
{
|
||||||
if [ ! -e "$DAEMON" ]; then
|
if [ ! -e "$DAEMON" ]; then
|
||||||
ocf_log err "Required binary not found: $DAEMON"
|
ocf_log err "Required binary not found: $DAEMON"
|
||||||
return $OCF_ERR_INSTALLED
|
return $OCF_ERR_INSTALLED
|
||||||
fi
|
fi
|
||||||
|
|
||||||
start_daemon "$DAEMON" "$OCF_RESKEY_daemon_options"; rc=$?
|
start_daemon "$DAEMON" "$OCF_RESKEY_daemon_options"; rc=$?
|
||||||
if [ $rc != 0 ]; then
|
if [ $rc != 0 ]; then
|
||||||
ocf_log err "Could not start $DAEMON"
|
ocf_log err "Could not start $DAEMON"
|
||||||
return $OCF_ERR_GENERIC
|
return $OCF_ERR_GENERIC
|
||||||
fi
|
fi
|
||||||
|
|
||||||
sleep 1
|
sleep 1
|
||||||
COUNT=0
|
COUNT=0
|
||||||
rc=$OCF_NOT_RUNNING
|
rc=$OCF_NOT_RUNNING
|
||||||
|
|
||||||
while [ $rc = $OCF_NOT_RUNNING ]; do
|
while [ $rc = $OCF_NOT_RUNNING ]; do
|
||||||
COUNT=`expr $COUNT + 1`
|
COUNT=`expr $COUNT + 1`
|
||||||
if [ $COUNT -gt $OCF_RESKEY_daemon_timeout ]; then
|
if [ $COUNT -gt $OCF_RESKEY_daemon_timeout ]; then
|
||||||
ocf_log err "`basename $DAEMON` did not come up"
|
ocf_log err "`basename $DAEMON` did not come up"
|
||||||
return $OCF_ERR_GENERIC
|
return $OCF_ERR_GENERIC
|
||||||
fi
|
fi
|
||||||
status_clvmd; rc=$?
|
status_clvmd; rc=$?
|
||||||
sleep 1
|
sleep 1
|
||||||
done
|
done
|
||||||
|
|
||||||
return $rc
|
return $rc
|
||||||
}
|
}
|
||||||
|
|
||||||
bringup_cmirrord()
|
bringup_cmirrord()
|
||||||
{
|
{
|
||||||
if [ ! -e "$CMIRRORD" ]; then
|
if [ ! -e "$CMIRRORD" ]; then
|
||||||
ocf_log err "Required binary not found: $DAEMON"
|
ocf_log err "Required binary not found: $DAEMON"
|
||||||
return $OCF_ERR_INSTALLED
|
return $OCF_ERR_INSTALLED
|
||||||
fi
|
fi
|
||||||
|
|
||||||
start_daemon "$CMIRRORD"; rc=$?
|
start_daemon "$CMIRRORD"; rc=$?
|
||||||
if [ $rc != 0 ]; then
|
if [ $rc != 0 ]; then
|
||||||
ocf_log err "Could not start $CMIRRORD"
|
ocf_log err "Could not start $CMIRRORD"
|
||||||
return $OCF_ERR_GENERIC
|
return $OCF_ERR_GENERIC
|
||||||
fi
|
fi
|
||||||
|
|
||||||
sleep 1
|
sleep 1
|
||||||
COUNT=0
|
COUNT=0
|
||||||
rc=$OCF_NOT_RUNNING
|
rc=$OCF_NOT_RUNNING
|
||||||
|
|
||||||
while [ $rc = $OCF_NOT_RUNNING ]; do
|
while [ $rc = $OCF_NOT_RUNNING ]; do
|
||||||
COUNT=`expr $COUNT + 1`
|
COUNT=`expr $COUNT + 1`
|
||||||
if [ $COUNT -gt $OCF_RESKEY_daemon_timeout ]; then
|
if [ $COUNT -gt $OCF_RESKEY_daemon_timeout ]; then
|
||||||
ocf_log err "`basename $DAEMON` did not come up"
|
ocf_log err "`basename $DAEMON` did not come up"
|
||||||
return $OCF_ERR_GENERIC
|
return $OCF_ERR_GENERIC
|
||||||
fi
|
fi
|
||||||
status_cmirrord; rc=$?
|
status_cmirrord; rc=$?
|
||||||
sleep 1
|
sleep 1
|
||||||
done
|
done
|
||||||
|
|
||||||
return $rc
|
return $rc
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
kill_clvmd()
|
kill_clvmd()
|
||||||
{
|
{
|
||||||
status_clvmd; rc=$?
|
status_clvmd; rc=$?
|
||||||
if [ $rc != $OCF_SUCCESS ]; then
|
if [ $rc != $OCF_SUCCESS ]; then
|
||||||
return rc
|
return $rc
|
||||||
fi
|
fi
|
||||||
|
|
||||||
ocf_log info "Stopping `basename "$DAEMON"`"
|
ocf_log info "Stopping `basename "$DAEMON"`"
|
||||||
killproc -INT "$DAEMON"
|
killproc -INT "$DAEMON"
|
||||||
|
|
||||||
sleep 1
|
sleep 1
|
||||||
status_daemons; rc=$?
|
status_daemons; rc=$?
|
||||||
|
|
||||||
COUNT=0
|
COUNT=0
|
||||||
while [ $rc = $OCF_SUCCESS ]; do
|
while [ $rc = $OCF_SUCCESS ]; do
|
||||||
COUNT=`expr $COUNT + 1`
|
COUNT=`expr $COUNT + 1`
|
||||||
if [ $COUNT -gt $OCF_RESKEY_daemon_timeout ]; then
|
if [ $COUNT -gt $OCF_RESKEY_daemon_timeout ]; then
|
||||||
ocf_log err "`basename $DAEMON` shutdown emergency"
|
ocf_log err "`basename $DAEMON` shutdown emergency"
|
||||||
killproc -9 "$DAEMON"
|
killproc -9 "$DAEMON"
|
||||||
status_clvmd; rc=$?
|
status_clvmd; rc=$?
|
||||||
if [ $rc = $OCF_NOT_RUNNING ]; then
|
if [ $rc = $OCF_NOT_RUNNING ]; then
|
||||||
return $OCF_SUCCESS
|
return $OCF_SUCCESS
|
||||||
else
|
else
|
||||||
return $OCF_ERR_GENERIC
|
return $OCF_ERR_GENERIC
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
killproc -INT "$DAEMON"
|
killproc -INT "$DAEMON"
|
||||||
sleep 1
|
sleep 1
|
||||||
status_clvmd; rc=$?
|
status_clvmd; rc=$?
|
||||||
done
|
done
|
||||||
|
|
||||||
return $OCF_SUCCESS
|
return $OCF_SUCCESS
|
||||||
}
|
}
|
||||||
|
|
||||||
kill_cmirrord()
|
kill_cmirrord()
|
||||||
{
|
{
|
||||||
status_cmirrord; rc=$?
|
status_cmirrord; rc=$?
|
||||||
if [ $rc != $OCF_SUCCESS ]; then
|
if [ $rc != $OCF_SUCCESS ]; then
|
||||||
return rc
|
return $rc
|
||||||
fi
|
fi
|
||||||
|
|
||||||
ocf_log info "Stopping `basename "$CMIRRORD"`"
|
ocf_log info "Stopping `basename "$CMIRRORD"`"
|
||||||
killproc -INT "$CMIRRORD"
|
killproc -INT "$CMIRRORD"
|
||||||
|
|
||||||
sleep 1
|
sleep 1
|
||||||
status_cmirrord; rc=$?
|
status_cmirrord; rc=$?
|
||||||
|
|
||||||
COUNT=0
|
COUNT=0
|
||||||
while [ $rc = $OCF_SUCCESS ]; do
|
while [ $rc = $OCF_SUCCESS ]; do
|
||||||
COUNT=`expr $COUNT + 1`
|
COUNT=`expr $COUNT + 1`
|
||||||
if [ $COUNT -gt $OCF_RESKEY_daemon_timeout ]; then
|
if [ $COUNT -gt $OCF_RESKEY_daemon_timeout ]; then
|
||||||
ocf_log err "`basename $CMIRRORD` shutdown emergency"
|
ocf_log err "`basename $CMIRRORD` shutdown emergency"
|
||||||
killproc -9 "$CMIRRORD"
|
killproc -9 "$CMIRRORD"
|
||||||
status_cmirrord; rc=$?
|
status_cmirrord; rc=$?
|
||||||
if [ $rc = $OCF_NOT_RUNNING ]; then
|
if [ $rc = $OCF_NOT_RUNNING ]; then
|
||||||
return $OCF_SUCCESS
|
return $OCF_SUCCESS
|
||||||
else
|
else
|
||||||
return $OCF_ERR_GENERIC
|
return $OCF_ERR_GENERIC
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
killproc -INT "$CMIRRORD"
|
killproc -INT "$CMIRRORD"
|
||||||
sleep 1
|
sleep 1
|
||||||
status_cmirrord; rc=$?
|
status_cmirrord; rc=$?
|
||||||
done
|
done
|
||||||
|
|
||||||
return $OCF_SUCCESS
|
return $OCF_SUCCESS
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -201,34 +214,34 @@ clvmd_start()
|
|||||||
clvmd_validate
|
clvmd_validate
|
||||||
ocf_log info "Starting $OCF_RESOURCE_INSTANCE"
|
ocf_log info "Starting $OCF_RESOURCE_INSTANCE"
|
||||||
|
|
||||||
# autoset locking type to clusted when lvmconf tool is available
|
# autoset locking type to clusted when lvmconf tool is available
|
||||||
if [ -x "$LVMCONF" ]; then
|
if [ -x "$LVMCONF" ]; then
|
||||||
$LVMCONF --enable-cluster > /dev/null 2>&1
|
$LVMCONF --enable-cluster > /dev/null 2>&1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
status_clvmd; rc=$?
|
status_clvmd; rc=$?
|
||||||
if [ $rc == $OCF_NOT_RUNNING ]; then
|
if [ $rc == $OCF_NOT_RUNNING ]; then
|
||||||
bringup_clvmd; rc=$?
|
bringup_clvmd; rc=$?
|
||||||
if [ $rc != $OCF_SUCCESS ]; then
|
if [ $rc != $OCF_SUCCESS ]; then
|
||||||
return $OCF_ERR_GENERIC
|
return $OCF_ERR_GENERIC
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
status_cmirrord; rc=$?
|
status_cmirrord; rc=$?
|
||||||
if [ $rc == $OCF_NOT_RUNNING ]; then
|
if [ $rc == $OCF_NOT_RUNNING ]; then
|
||||||
bringup_cmirrord; rc=$?
|
bringup_cmirrord; rc=$?
|
||||||
if [ $rc != $OCF_SUCCESS ]; then
|
if [ $rc != $OCF_SUCCESS ]; then
|
||||||
kill_clvmd
|
kill_clvmd
|
||||||
return $OCF_ERR_GENERIC
|
return $OCF_ERR_GENERIC
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
return $OCF_SUCCESS
|
return $OCF_SUCCESS
|
||||||
}
|
}
|
||||||
|
|
||||||
clvmd_stop() {
|
clvmd_stop() {
|
||||||
clvmd_validate
|
clvmd_validate
|
||||||
ocf_log info "Stopping $OCF_RESOURCE_INSTANCE"
|
ocf_log info "Stopping $OCF_RESOURCE_INSTANCE"
|
||||||
|
|
||||||
status_clvmd; rc=$?
|
status_clvmd; rc=$?
|
||||||
if [ $rc != $OCF_NOT_RUNNING ]; then
|
if [ $rc != $OCF_NOT_RUNNING ]; then
|
||||||
@ -252,28 +265,28 @@ clvmd_stop() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
clvmd_monitor() {
|
clvmd_monitor() {
|
||||||
clvmd_validate
|
clvmd_validate
|
||||||
|
|
||||||
status_daemons
|
status_daemons
|
||||||
return $?
|
return $?
|
||||||
}
|
}
|
||||||
|
|
||||||
clvmd_usage() {
|
clvmd_usage() {
|
||||||
echo "usage: $0 {start|stop|monitor|validate-all|meta-data}"
|
echo "usage: $0 {start|stop|monitor|validate-all|meta-data}"
|
||||||
echo " Expects to have a fully populated OCF RA-compliant environment set."
|
echo " Expects to have a fully populated OCF RA-compliant environment set."
|
||||||
echo " In particualr, a value for OCF_ROOT"
|
echo " In particualr, a value for OCF_ROOT"
|
||||||
}
|
}
|
||||||
|
|
||||||
clvmd_validate() {
|
clvmd_validate() {
|
||||||
: TODO: check for globally_unique=true and return OCF_ERR_CONFIGURED
|
: TODO: check for globally_unique=true and return OCF_ERR_CONFIGURED
|
||||||
case ${OCF_RESKEY_CRM_meta_globally_unique} in
|
case ${OCF_RESKEY_CRM_meta_globally_unique} in
|
||||||
yes|Yes|true|True|1)
|
yes|Yes|true|True|1)
|
||||||
ocf_log err "$OCF_RESOURCE_INSTANCE must be configured with the globally_unique=false meta attribute"
|
ocf_log err "$OCF_RESOURCE_INSTANCE must be configured with the globally_unique=false meta attribute"
|
||||||
exit $OCF_ERR_CONFIGURED
|
exit $OCF_ERR_CONFIGURED
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
return $OCF_SUCCESS
|
return $OCF_SUCCESS
|
||||||
}
|
}
|
||||||
|
|
||||||
meta_data() {
|
meta_data() {
|
||||||
@ -289,30 +302,29 @@ It starts clvmd and cmirrord as anonymous clones.
|
|||||||
<shortdesc lang="en">clvmd resource agent</shortdesc>
|
<shortdesc lang="en">clvmd resource agent</shortdesc>
|
||||||
<parameters>
|
<parameters>
|
||||||
|
|
||||||
<parameter name="daemon_timeout" unique="0">
|
<parameter name="daemon_timeout" unique="0">
|
||||||
<longdesc lang="en">
|
<longdesc lang="en">
|
||||||
Number of seconds to allow the control daemon to come up and down
|
Number of seconds to allow the control daemon to come up and down
|
||||||
</longdesc>
|
</longdesc>
|
||||||
<shortdesc lang="en">Daemon Timeout</shortdesc>
|
<shortdesc lang="en">Daemon Timeout</shortdesc>
|
||||||
<content type="string" default="80"/>
|
<content type="string" default="80"/>
|
||||||
</parameter>
|
</parameter>
|
||||||
|
|
||||||
<parameter name="daemon_options" unique="0">
|
<parameter name="daemon_options" unique="0">
|
||||||
<longdesc lang="en">
|
<longdesc lang="en">
|
||||||
Options to clvmd. Refer to clvmd.8 for detailed descriptions.
|
Options to clvmd. Refer to clvmd.8 for detailed descriptions.
|
||||||
</longdesc>
|
</longdesc>
|
||||||
<shortdesc lang="en">Daemon Options</shortdesc>
|
<shortdesc lang="en">Daemon Options</shortdesc>
|
||||||
<content type="string" default="-d0"/>
|
<content type="string" default="-d0"/>
|
||||||
</parameter>
|
</parameter>
|
||||||
|
|
||||||
|
|
||||||
</parameters>
|
</parameters>
|
||||||
<actions>
|
<actions>
|
||||||
<action name="start" timeout="90" />
|
<action name="start" timeout="90"/>
|
||||||
<action name="stop" timeout="100" />
|
<action name="stop" timeout="100"/>
|
||||||
<action name="monitor" timeout="20" depth="0"/>
|
<action name="monitor" timeout="20" depth="0"/>
|
||||||
<action name="meta-data" timeout="5" />
|
<action name="meta-data" timeout="5"/>
|
||||||
<action name="validate-all" timeout="30" />
|
<action name="validate-all" timeout="30"/>
|
||||||
</actions>
|
</actions>
|
||||||
</resource-agent>
|
</resource-agent>
|
||||||
END
|
END
|
||||||
@ -333,7 +345,7 @@ validate-all) clvmd_validate
|
|||||||
usage|help) clvmd_usage
|
usage|help) clvmd_usage
|
||||||
exit $OCF_SUCCESS
|
exit $OCF_SUCCESS
|
||||||
;;
|
;;
|
||||||
*) clvmd_usage
|
*) clvmd_usage
|
||||||
exit $OCF_ERR_UNIMPLEMENTED
|
exit $OCF_ERR_UNIMPLEMENTED
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
198
cmirrord.ocf
198
cmirrord.ocf
@ -1,6 +1,5 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# Copyright (c) 2008 Xinwei Hu
|
# Copyright (c) 2008 Xinwei Hu All Rights Reserved.
|
||||||
# All Rights Reserved.
|
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# 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
|
# 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
|
# Further, this software is distributed without any warranty that it is
|
||||||
# free of the rightful claim of any third person regarding infringement
|
# 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
|
# otherwise, applies only to this software file. Patent licenses, if
|
||||||
# any, provided herein do not apply to combinations of this program with
|
# any, provided herein do not apply to combinations of this program with
|
||||||
# other software, or any other product whatsoever.
|
# other software, or any other product whatsoever.
|
||||||
@ -35,126 +34,140 @@ sbindir=$HA_SBIN_DIR
|
|||||||
# Common variables
|
# Common variables
|
||||||
DAEMON="${sbindir}/cmirrord"
|
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()
|
status_daemon()
|
||||||
{
|
{
|
||||||
PID=`pidofproc "$DAEMON"`
|
PID=`pidofproc "$DAEMON"`
|
||||||
if [ -n "$PID" ]; then
|
if [ -n "$PID" ]; then
|
||||||
return $OCF_SUCCESS
|
return $OCF_SUCCESS
|
||||||
fi
|
fi
|
||||||
return $OCF_NOT_RUNNING
|
return $OCF_NOT_RUNNING
|
||||||
}
|
}
|
||||||
|
|
||||||
bringup_daemon()
|
bringup_daemon()
|
||||||
{
|
{
|
||||||
if [ ! -e "$DAEMON" ]; then
|
if [ ! -e "$DAEMON" ]; then
|
||||||
ocf_log err "Required binary not found: $DAEMON"
|
ocf_log err "Required binary not found: $DAEMON"
|
||||||
return $OCF_ERR_INSTALLED
|
return $OCF_ERR_INSTALLED
|
||||||
fi
|
fi
|
||||||
|
|
||||||
start_daemon "$DAEMON"; rc=$?
|
start_daemon "$DAEMON"; rc=$?
|
||||||
if [ $rc != 0 ]; then
|
if [ $rc != 0 ]; then
|
||||||
ocf_log err "Could not start $DAEMON"
|
ocf_log err "Could not start $DAEMON"
|
||||||
return $OCF_ERR_GENERIC
|
return $OCF_ERR_GENERIC
|
||||||
fi
|
fi
|
||||||
|
|
||||||
sleep 1
|
sleep 1
|
||||||
COUNT=0
|
COUNT=0
|
||||||
rc=$OCF_NOT_RUNNING
|
rc=$OCF_NOT_RUNNING
|
||||||
|
|
||||||
while [ $rc = $OCF_NOT_RUNNING ]; do
|
while [ $rc = $OCF_NOT_RUNNING ]; do
|
||||||
COUNT=`expr $COUNT + 1`
|
COUNT=`expr $COUNT + 1`
|
||||||
if [ $COUNT -gt $OCF_RESKEY_daemon_timeout ]; then
|
if [ $COUNT -gt $OCF_RESKEY_daemon_timeout ]; then
|
||||||
ocf_log err "`basename $DAEMON` did not come up"
|
ocf_log err "`basename $DAEMON` did not come up"
|
||||||
return $OCF_ERR_GENERIC
|
return $OCF_ERR_GENERIC
|
||||||
fi
|
fi
|
||||||
status_daemon; rc=$?
|
status_daemon; rc=$?
|
||||||
sleep 1
|
sleep 1
|
||||||
done
|
done
|
||||||
|
|
||||||
return $rc
|
return $rc
|
||||||
}
|
}
|
||||||
|
|
||||||
kill_daemon()
|
kill_daemon()
|
||||||
{
|
{
|
||||||
status_daemon; rc=$?
|
status_daemon; rc=$?
|
||||||
if [ $rc != $OCF_SUCCESS ]; then
|
if [ $rc != $OCF_SUCCESS ]; then
|
||||||
return rc
|
return $rc
|
||||||
fi
|
fi
|
||||||
|
|
||||||
ocf_log info "Stopping `basename "$DAEMON"`"
|
ocf_log info "Stopping `basename "$DAEMON"`"
|
||||||
killproc -INT "$DAEMON"
|
killproc -INT "$DAEMON"
|
||||||
|
|
||||||
sleep 1
|
sleep 1
|
||||||
status_daemon; rc=$?
|
status_daemon; rc=$?
|
||||||
|
|
||||||
COUNT=0
|
COUNT=0
|
||||||
while [ $rc = $OCF_SUCCESS ]; do
|
while [ $rc = $OCF_SUCCESS ]; do
|
||||||
COUNT=`expr $COUNT + 1`
|
COUNT=`expr $COUNT + 1`
|
||||||
if [ $COUNT -gt $OCF_RESKEY_daemon_timeout ]; then
|
if [ $COUNT -gt $OCF_RESKEY_daemon_timeout ]; then
|
||||||
ocf_log err "`basename $DAEMON` shutdown emergency"
|
ocf_log err "`basename $DAEMON` shutdown emergency"
|
||||||
killproc -9 "$DAEMON"
|
killproc -9 "$DAEMON"
|
||||||
status_daemon; rc=$?
|
status_daemon; rc=$?
|
||||||
if [ $rc = $OCF_NOT_RUNNING ]; then
|
if [ $rc = $OCF_NOT_RUNNING ]; then
|
||||||
return $OCF_SUCCESS
|
return $OCF_SUCCESS
|
||||||
else
|
else
|
||||||
return $OCF_ERR_GENERIC
|
return $OCF_ERR_GENERIC
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
killproc -INT "$DAEMON"
|
killproc -INT "$DAEMON"
|
||||||
sleep 1
|
sleep 1
|
||||||
status_daemon; rc=$?
|
status_daemon; rc=$?
|
||||||
done
|
done
|
||||||
|
|
||||||
return $OCF_SUCCESS
|
return $OCF_SUCCESS
|
||||||
}
|
}
|
||||||
|
|
||||||
cmirrord_start() {
|
cmirrord_start() {
|
||||||
|
|
||||||
cmirrord_monitor; rc=$?
|
cmirrord_monitor; rc=$?
|
||||||
if [ $rc != $OCF_NOT_RUNNING ]; then
|
if [ $rc != $OCF_NOT_RUNNING ]; then
|
||||||
return $rc
|
return $rc
|
||||||
fi
|
fi
|
||||||
|
|
||||||
ocf_log info "Starting $OCF_RESOURCE_INSTANCE"
|
ocf_log info "Starting $OCF_RESOURCE_INSTANCE"
|
||||||
|
|
||||||
bringup_daemon
|
bringup_daemon
|
||||||
return $?
|
return $?
|
||||||
}
|
}
|
||||||
|
|
||||||
cmirrord_stop() {
|
cmirrord_stop() {
|
||||||
cmirrord_monitor; rc=$?
|
cmirrord_monitor; rc=$?
|
||||||
case $rc in
|
case $rc in
|
||||||
$OCF_NOT_RUNNING) return $OCF_SUCCESS;;
|
$OCF_NOT_RUNNING) return $OCF_SUCCESS;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
ocf_log info "Stopping $OCF_RESOURCE_INSTANCE"
|
ocf_log info "Stopping $OCF_RESOURCE_INSTANCE"
|
||||||
|
|
||||||
kill_daemon
|
kill_daemon
|
||||||
}
|
}
|
||||||
|
|
||||||
cmirrord_monitor() {
|
cmirrord_monitor() {
|
||||||
cmirrord_validate
|
cmirrord_validate
|
||||||
|
|
||||||
status_daemon
|
status_daemon
|
||||||
return $?
|
return $?
|
||||||
}
|
}
|
||||||
|
|
||||||
cmirrord_usage() {
|
cmirrord_usage() {
|
||||||
echo "usage: $0 {start|stop|monitor|validate-all|meta-data}"
|
echo "usage: $0 {start|stop|monitor|validate-all|meta-data}"
|
||||||
echo " Expects to have a fully populated OCF RA-compliant environment set."
|
echo " Expects to have a fully populated OCF RA-compliant environment set."
|
||||||
echo " In particualr, a value for OCF_ROOT"
|
echo " In particualr, a value for OCF_ROOT"
|
||||||
}
|
}
|
||||||
|
|
||||||
cmirrord_validate() {
|
cmirrord_validate() {
|
||||||
: TODO: check for globally_unique=true and return OCF_ERR_CONFIGURED
|
: TODO: check for globally_unique=true and return OCF_ERR_CONFIGURED
|
||||||
case ${OCF_RESKEY_CRM_meta_globally_unique} in
|
case ${OCF_RESKEY_CRM_meta_globally_unique} in
|
||||||
yes|Yes|true|True|1)
|
yes|Yes|true|True|1)
|
||||||
ocf_log err "$OCF_RESOURCE_INSTANCE must be configured with the globally_unique=false meta attribute"
|
ocf_log err "$OCF_RESOURCE_INSTANCE must be configured with the globally_unique=false meta attribute"
|
||||||
exit $OCF_ERR_CONFIGURED
|
exit $OCF_ERR_CONFIGURED
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
return $OCF_SUCCESS
|
return $OCF_SUCCESS
|
||||||
}
|
}
|
||||||
|
|
||||||
meta_data() {
|
meta_data() {
|
||||||
@ -170,31 +183,30 @@ It starts cmirrord as anonymous clones.
|
|||||||
<shortdesc lang="en">cmirrord resource agent</shortdesc>
|
<shortdesc lang="en">cmirrord resource agent</shortdesc>
|
||||||
<parameters>
|
<parameters>
|
||||||
|
|
||||||
<parameter name="daemon_timeout" unique="0">
|
<parameter name="daemon_timeout" unique="0">
|
||||||
<longdesc lang="en">
|
<longdesc lang="en">
|
||||||
Number of seconds to allow the control daemon to come up and down
|
Number of seconds to allow the control daemon to come up and down
|
||||||
</longdesc>
|
</longdesc>
|
||||||
<shortdesc lang="en">Daemon Timeout</shortdesc>
|
<shortdesc lang="en">Daemon Timeout</shortdesc>
|
||||||
<content type="string" default="80"/>
|
<content type="string" default="80"/>
|
||||||
</parameter>
|
</parameter>
|
||||||
|
|
||||||
<parameter name="daemon_options" unique="0">
|
<parameter name="daemon_options" unique="0">
|
||||||
<longdesc lang="en">
|
<longdesc lang="en">
|
||||||
Options to cmirrord. Cmirrord actually doesn't accept any options
|
Options to cmirrord. Cmirrord actually doesn't accept any options
|
||||||
for now.
|
for now.
|
||||||
</longdesc>
|
</longdesc>
|
||||||
<shortdesc lang="en">Daemon Options</shortdesc>
|
<shortdesc lang="en">Daemon Options</shortdesc>
|
||||||
<content type="string" default=""/>
|
<content type="string" default=""/>
|
||||||
</parameter>
|
</parameter>
|
||||||
|
|
||||||
|
|
||||||
</parameters>
|
</parameters>
|
||||||
<actions>
|
<actions>
|
||||||
<action name="start" timeout="90" />
|
<action name="start" timeout="90"/>
|
||||||
<action name="stop" timeout="100" />
|
<action name="stop" timeout="100"/>
|
||||||
<action name="monitor" timeout="20" depth="0"/>
|
<action name="monitor" timeout="20" depth="0"/>
|
||||||
<action name="meta-data" timeout="5" />
|
<action name="meta-data" timeout="5"/>
|
||||||
<action name="validate-all" timeout="30" />
|
<action name="validate-all" timeout="30"/>
|
||||||
</actions>
|
</actions>
|
||||||
</resource-agent>
|
</resource-agent>
|
||||||
END
|
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
|
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
|
Patch2010: 69-dm-lvm-metad.rules-Do-not-process-rules-for-multi.patch
|
||||||
#PATCH-FIX-SUSE, bnc#950089
|
#PATCH-FIX-SUSE, bnc#950089
|
||||||
Patch2011: lvm2-testsuite.patch
|
Patch2011: lvm2-testsuite.patch
|
||||||
# Remove special case for the md rules
|
# simplify special case for the md rules
|
||||||
Patch2012: remove-special-case-for-md-in-69-dm-lvm-metadata.rul.patch
|
Patch2012: simplify-special-case-for-md-in-69-dm-lvm-metadata.patch
|
||||||
### COMMON-PATCH-END ###
|
### COMMON-PATCH-END ###
|
||||||
BuildRequires: gcc-c++
|
BuildRequires: gcc-c++
|
||||||
BuildRequires: pkgconfig
|
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
|
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
|
Patch2010: 69-dm-lvm-metad.rules-Do-not-process-rules-for-multi.patch
|
||||||
#PATCH-FIX-SUSE, bnc#950089
|
#PATCH-FIX-SUSE, bnc#950089
|
||||||
Patch2011: lvm2-testsuite.patch
|
Patch2011: lvm2-testsuite.patch
|
||||||
# Remove special case for the md rules
|
# simplify special case for the md rules
|
||||||
Patch2012: remove-special-case-for-md-in-69-dm-lvm-metadata.rul.patch
|
Patch2012: simplify-special-case-for-md-in-69-dm-lvm-metadata.patch
|
||||||
### COMMON-PATCH-END ###
|
### COMMON-PATCH-END ###
|
||||||
BuildRequires: libcorosync-devel
|
BuildRequires: libcorosync-devel
|
||||||
BuildRequires: libdlm-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
|
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
|
Patch2010: 69-dm-lvm-metad.rules-Do-not-process-rules-for-multi.patch
|
||||||
#PATCH-FIX-SUSE, bnc#950089
|
#PATCH-FIX-SUSE, bnc#950089
|
||||||
Patch2011: lvm2-testsuite.patch
|
Patch2011: lvm2-testsuite.patch
|
||||||
# Remove special case for the md rules
|
# simplify special case for the md rules
|
||||||
Patch2012: remove-special-case-for-md-in-69-dm-lvm-metadata.rul.patch
|
Patch2012: simplify-special-case-for-md-in-69-dm-lvm-metadata.patch
|
||||||
### COMMON-PATCH-END ###
|
### COMMON-PATCH-END ###
|
||||||
BuildRequires: gcc-c++
|
BuildRequires: gcc-c++
|
||||||
BuildRequires: libaio-devel
|
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>
|
From: NeilBrown <neilb@suse.com>
|
||||||
Date: Wed, 4 Jan 2017 14:30:52 +1100
|
Date: Wed, 4 Jan 2017 14:20:53 +1100
|
||||||
Subject: [PATCH] Remove special-case for md in 69-dm-lvm-metadata.rules
|
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
|
determine if the array is active yet or not, and to skip
|
||||||
processing if the array has not yet been started.
|
processing if the array has not yet been started.
|
||||||
However, if the array hasn't been started, then "blkid" will
|
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
|
So the first and only event seen by this script for an md device will be
|
||||||
"add", and it will incorrectly ignore it.
|
"add", and it will incorrectly ignore it.
|
||||||
|
|
||||||
It is probable that the special handling for "loop" should be removed as
|
So replace the special handling with code that simply jumps to lvm_scan
|
||||||
well, but I have not actually seen that cause a problem, so I'm
|
on any 'add' or 'change' event.
|
||||||
leaving it unchanged.
|
|
||||||
|
|
||||||
Signed-off-by: NeilBrown <neilb@suse.com>
|
Signed-off-by: NeilBrown <neilb@suse.com>
|
||||||
---
|
---
|
||||||
udev/69-dm-lvm-metad.rules.in | 10 ----------
|
udev/69-dm-lvm-metad.rules.in | 8 +++-----
|
||||||
1 file changed, 10 deletions(-)
|
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
|
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
|
--- a/udev/69-dm-lvm-metad.rules.in
|
||||||
+++ b/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"
|
@@ -51,13 +51,11 @@ ENV{DM_UDEV_PRIMARY_SOURCE_FLAG}=="1", ENV{DM_ACTIVATION}=="1", GOTO="lvm_scan"
|
||||||
ENV{DM_UDEV_PRIMARY_SOURCE_FLAG}=="1", ENV{DM_ACTIVATION}=="1", GOTO="lvm_scan"
|
|
||||||
GOTO="lvm_end"
|
GOTO="lvm_end"
|
||||||
|
|
||||||
-# MD device:
|
# MD device:
|
||||||
-LABEL="next"
|
+# Need to scan on both 'add' and 'change'
|
||||||
-KERNEL!="md[0-9]*", GOTO="next"
|
LABEL="next"
|
||||||
|
KERNEL!="md[0-9]*", GOTO="next"
|
||||||
-IMPORT{db}="LVM_MD_PV_ACTIVATED"
|
-IMPORT{db}="LVM_MD_PV_ACTIVATED"
|
||||||
-ACTION=="add", ENV{LVM_MD_PV_ACTIVATED}=="1", GOTO="lvm_scan"
|
-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=="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"
|
-ACTION=="add", KERNEL=="md[0-9]*p[0-9]*", GOTO="lvm_scan"
|
||||||
-ENV{LVM_MD_PV_ACTIVATED}!="1", ENV{SYSTEMD_READY}="0"
|
-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:
|
# Loop device:
|
||||||
LABEL="next"
|
|
||||||
KERNEL!="loop[0-9]*", GOTO="next"
|
|
||||||
--
|
--
|
||||||
2.10.2
|
2.11.0
|
||||||
|
|
Loading…
Reference in New Issue
Block a user