mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
The attached patch breaks out
- log() function from xen-hotplug-common.sh -> logging.sh - locking-related functions from xen-hotplug-common.sh -> locking.sh - xen-hotplug-common.sh 'sources' both those files now to not loose these functions (which should make the break-out atomic) - adapts the Makefile to install locking.sh and logging.sh at the right place. I ran the xm-tests over it and no (additional) errors appear due to this change. Signed-off-by: Stefan Berger <stefanb@us.ibm.com>
This commit is contained in:
1 parent
79e4b2910a
commit
46ede6808b
4 files changed
+123
-90
No files matched your search
@@ -27,7 +27,7 @@ XEN_SCRIPTS += network-nat vif-nat
|
||||
XEN_SCRIPTS += block
|
||||
XEN_SCRIPTS += block-enbd block-nbd
|
||||
XEN_SCRIPTS += vtpm
|
||||
XEN_SCRIPT_DATA = xen-script-common.sh
|
||||
XEN_SCRIPT_DATA = xen-script-common.sh locking.sh logging.sh
|
||||
XEN_SCRIPT_DATA += xen-hotplug-common.sh xen-network-common.sh vif-common.sh
|
||||
XEN_SCRIPT_DATA += block-common.sh vtpm-common.sh
|
||||
|
||||
|
||||
@@ -17,7 +17,9 @@
|
||||
|
||||
|
||||
dir=$(dirname "$0")
|
||||
. "$dir/logging.sh"
|
||||
. "$dir/xen-script-common.sh"
|
||||
. "$dir/locking.sh"
|
||||
|
||||
exec 2>>/var/log/xen-hotplug.log
|
||||
|
||||
@@ -25,12 +27,6 @@ export PATH="/sbin:/bin:/usr/bin:/usr/sbin:$PATH"
|
||||
export LANG="POSIX"
|
||||
unset $(set | grep ^LC_ | cut -d= -f1)
|
||||
|
||||
log() {
|
||||
local level="$1"
|
||||
shift
|
||||
logger -p "daemon.$level" -- "$0:" "$@" || echo "$0 $@" >&2
|
||||
}
|
||||
|
||||
fatal() {
|
||||
xenstore_write "$XENBUS_PATH"/hotplug-status error
|
||||
log err "$@"
|
||||
@@ -93,87 +89,4 @@ xenstore_write() {
|
||||
}
|
||||
|
||||
|
||||
#
|
||||
# Serialisation
|
||||
#
|
||||
|
||||
LOCK_SLEEPTIME=1
|
||||
LOCK_SPINNING_RETRIES=5
|
||||
LOCK_RETRIES=10
|
||||
LOCK_BASEDIR=/var/run/xen-hotplug
|
||||
|
||||
|
||||
claim_lock()
|
||||
{
|
||||
local lockdir="$LOCK_BASEDIR/$1"
|
||||
mkdir -p "$LOCK_BASEDIR"
|
||||
_claim_lock "$lockdir"
|
||||
}
|
||||
|
||||
|
||||
release_lock()
|
||||
{
|
||||
_release_lock "$LOCK_BASEDIR/$1"
|
||||
}
|
||||
|
||||
|
||||
_claim_lock()
|
||||
{
|
||||
local lockdir="$1"
|
||||
local owner=$(_lock_owner "$lockdir")
|
||||
local retries=0
|
||||
|
||||
while [ $retries -lt $LOCK_RETRIES ]
|
||||
do
|
||||
mkdir "$lockdir" 2>/dev/null && trap "release_lock $1; sigerr" ERR &&
|
||||
_update_lock_info "$lockdir" && return
|
||||
|
||||
local new_owner=$(_lock_owner "$lockdir")
|
||||
if [ "$new_owner" != "$owner" ]
|
||||
then
|
||||
owner="$new_owner"
|
||||
retries=0
|
||||
fi
|
||||
|
||||
if [ $retries -gt $LOCK_SPINNING_RETRIES ]
|
||||
then
|
||||
sleep $LOCK_SLEEPTIME
|
||||
else
|
||||
sleep 0
|
||||
fi
|
||||
retries=$(($retries + 1))
|
||||
done
|
||||
_steal_lock "$lockdir"
|
||||
}
|
||||
|
||||
|
||||
_release_lock()
|
||||
{
|
||||
trap sigerr ERR
|
||||
rm -rf "$1" 2>/dev/null || true
|
||||
}
|
||||
|
||||
|
||||
_steal_lock()
|
||||
{
|
||||
local lockdir="$1"
|
||||
local owner=$(cat "$lockdir/owner" 2>/dev/null || echo "unknown")
|
||||
log err "Forced to steal lock on $lockdir from $owner!"
|
||||
_release_lock "$lockdir"
|
||||
_claim_lock "$lockdir"
|
||||
}
|
||||
|
||||
|
||||
_lock_owner()
|
||||
{
|
||||
cat "$1/owner" 2>/dev/null || echo "unknown"
|
||||
}
|
||||
|
||||
|
||||
_update_lock_info()
|
||||
{
|
||||
echo "$$: $0" >"$1/owner"
|
||||
}
|
||||
|
||||
|
||||
log debug "$@" "XENBUS_PATH=$XENBUS_PATH"
|
||||
@@ -0,0 +1,98 @@
|
||||
#
|
||||
# Copyright (c) 2005 XenSource Ltd.
|
||||
#
|
||||
# This library is free software; you can redistribute it and/or
|
||||
# modify it under the terms of version 2.1 of the GNU Lesser General Public
|
||||
# License as published by the Free Software Foundation.
|
||||
#
|
||||
# This library is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public
|
||||
# License along with this library; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
|
||||
#
|
||||
# Serialisation
|
||||
#
|
||||
|
||||
LOCK_SLEEPTIME=1
|
||||
LOCK_SPINNING_RETRIES=5
|
||||
LOCK_RETRIES=10
|
||||
LOCK_BASEDIR=/var/run/xen-hotplug
|
||||
|
||||
|
||||
claim_lock()
|
||||
{
|
||||
local lockdir="$LOCK_BASEDIR/$1"
|
||||
mkdir -p "$LOCK_BASEDIR"
|
||||
_claim_lock "$lockdir"
|
||||
}
|
||||
|
||||
|
||||
release_lock()
|
||||
{
|
||||
_release_lock "$LOCK_BASEDIR/$1"
|
||||
}
|
||||
|
||||
|
||||
_claim_lock()
|
||||
{
|
||||
local lockdir="$1"
|
||||
local owner=$(_lock_owner "$lockdir")
|
||||
local retries=0
|
||||
|
||||
while [ $retries -lt $LOCK_RETRIES ]
|
||||
do
|
||||
mkdir "$lockdir" 2>/dev/null && trap "release_lock $1; sigerr" ERR &&
|
||||
_update_lock_info "$lockdir" && return
|
||||
|
||||
local new_owner=$(_lock_owner "$lockdir")
|
||||
if [ "$new_owner" != "$owner" ]
|
||||
then
|
||||
owner="$new_owner"
|
||||
retries=0
|
||||
fi
|
||||
|
||||
if [ $retries -gt $LOCK_SPINNING_RETRIES ]
|
||||
then
|
||||
sleep $LOCK_SLEEPTIME
|
||||
else
|
||||
sleep 0
|
||||
fi
|
||||
retries=$(($retries + 1))
|
||||
done
|
||||
_steal_lock "$lockdir"
|
||||
}
|
||||
|
||||
|
||||
_release_lock()
|
||||
{
|
||||
trap sigerr ERR
|
||||
rm -rf "$1" 2>/dev/null || true
|
||||
}
|
||||
|
||||
|
||||
_steal_lock()
|
||||
{
|
||||
local lockdir="$1"
|
||||
local owner=$(cat "$lockdir/owner" 2>/dev/null || echo "unknown")
|
||||
log err "Forced to steal lock on $lockdir from $owner!"
|
||||
_release_lock "$lockdir"
|
||||
_claim_lock "$lockdir"
|
||||
}
|
||||
|
||||
|
||||
_lock_owner()
|
||||
{
|
||||
cat "$1/owner" 2>/dev/null || echo "unknown"
|
||||
}
|
||||
|
||||
|
||||
_update_lock_info()
|
||||
{
|
||||
echo "$$: $0" >"$1/owner"
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
#
|
||||
# Copyright (c) 2005 XenSource Ltd.
|
||||
#
|
||||
# This library is free software; you can redistribute it and/or
|
||||
# modify it under the terms of version 2.1 of the GNU Lesser General Public
|
||||
# License as published by the Free Software Foundation.
|
||||
#
|
||||
# This library is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public
|
||||
# License along with this library; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
|
||||
log() {
|
||||
local level="$1"
|
||||
shift
|
||||
logger -p "daemon.$level" -- "$0:" "$@" || echo "$0 $@" >&2
|
||||
}
|
||||