# utility functions for ctdb event scripts
-[ -z "$CTDB_VARDIR" ] && {
- if [ -d "/var/lib/ctdb" ] ; then
- export CTDB_VARDIR="/var/lib/ctdb"
- else
- export CTDB_VARDIR="/var/ctdb"
- fi
-}
-[ -z "$CTDB_ETCDIR" ] && {
- export CTDB_ETCDIR="/etc"
-}
+if [ -z "$CTDB_BASE" ] ; then
+ echo 'CTDB_BASE unset in CTDB functions file'
+ exit 1
+fi
+
+CTDB_VARDIR="/usr/local/var/lib/ctdb"
+ctdb_rundir="/usr/local/var/run/ctdb"
+
+# Only (and always) override these variables in test code
+
+if [ -z "$CTDB_SCRIPT_VARDIR" ] ; then
+ CTDB_SCRIPT_VARDIR="/usr/local/var/lib/ctdb/state"
+fi
+
+if [ -z "$CTDB_SYS_ETCDIR" ] ; then
+ CTDB_SYS_ETCDIR="/etc"
+fi
#######################################
# pull in a system config file, if any
+
+rewrite_ctdb_options ()
+{
+ case "$CTDB_DBDIR" in
+ tmpfs|tmpfs:*)
+ _opts_defaults="mode=700"
+ # Get any extra options specified after colon
+ if [ "$CTDB_DBDIR" = "tmpfs" ] ; then
+ _opts=""
+ else
+ _opts="${CTDB_DBDIR#tmpfs:}"
+ fi
+ # This is an internal variable, only used by ctdbd_wrapper.
+ # It is OK to repeat mount options - last value wins
+ CTDB_DBDIR_TMPFS_OPTIONS="${_opts_defaults}${_opts:+,}${_opts}"
+
+ CTDB_DBDIR="${ctdb_rundir}/CTDB_DBDIR"
+ ;;
+ *)
+ CTDB_DBDIR_TMPFS_OPTIONS=""
+ esac
+}
+
_loadconfig() {
if [ -z "$1" ] ; then
return
fi
- if [ -f $CTDB_ETCDIR/sysconfig/$1 ]; then
- . $CTDB_ETCDIR/sysconfig/$1
- elif [ -f $CTDB_ETCDIR/default/$1 ]; then
- . $CTDB_ETCDIR/default/$1
+ if [ -f $CTDB_SYS_ETCDIR/sysconfig/$1 ]; then
+ . $CTDB_SYS_ETCDIR/sysconfig/$1
+ elif [ -f $CTDB_SYS_ETCDIR/default/$1 ]; then
+ . $CTDB_SYS_ETCDIR/default/$1
elif [ -f $CTDB_BASE/sysconfig/$1 ]; then
. $CTDB_BASE/sysconfig/$1
fi
if [ -r "$_config" ] ; then
. "$_config"
fi
+ rewrite_ctdb_options
fi
}
if [ -n "$CTDB_LOGGING" ] ; then
_file="${CTDB_LOGGING#file:}"
else
- _file="/var/log/log.ctdb"
+ _file="/usr/local/var/log/log.ctdb"
fi
{
if [ -n "$*" ] ; then
$_nice /sbin/service "$_service_name" "$_op"
elif [ -x /usr/sbin/service ]; then
$_nice /usr/sbin/service "$_service_name" "$_op"
- elif [ -x $CTDB_ETCDIR/init.d/$_service_name ]; then
- $_nice $CTDB_ETCDIR/init.d/$_service_name "$_op"
- elif [ -x $CTDB_ETCDIR/rc.d/init.d/$_service_name ]; then
- $_nice $CTDB_ETCDIR/rc.d/init.d/$_service_name "$_op"
+ elif [ -x $CTDB_SYS_ETCDIR/init.d/$_service_name ]; then
+ $_nice $CTDB_SYS_ETCDIR/init.d/$_service_name "$_op"
+ elif [ -x $CTDB_SYS_ETCDIR/rc.d/init.d/$_service_name ]; then
+ $_nice $CTDB_SYS_ETCDIR/rc.d/init.d/$_service_name "$_op"
fi
}
# This sets $pnn - this avoid an unnecessary subprocess.
ctdb_get_pnn ()
{
- _pnn_file="$CTDB_VARDIR/state/my-pnn"
+ _pnn_file="${CTDB_SCRIPT_VARDIR}/my-pnn"
if [ ! -f "$_pnn_file" ] ; then
ctdb pnn | sed -e 's@.*:@@' >"$_pnn_file"
fi
_ctdb_check_tcp_common ()
{
assert_service_name
- _ctdb_service_started_file="$ctdb_fail_dir/$service_name.started"
+ _d="${CTDB_SCRIPT_VARDIR}/failcount"
+ _ctdb_service_started_file="${_d}/${service_name}.started"
}
ctdb_check_tcp_init ()
# Simple counters
_ctdb_counter_common () {
_service_name="${1:-${service_name:-${script_name}}}"
- _counter_file="$ctdb_fail_dir/$_service_name"
+ _counter_file="${CTDB_SCRIPT_VARDIR}/failcount/${_service_name}"
mkdir -p "${_counter_file%/*}" # dirname
}
ctdb_counter_init () {
########################################################
-ctdb_status_dir="$CTDB_VARDIR/state/service_status"
-ctdb_fail_dir="$CTDB_VARDIR/state/failcount"
-
ctdb_setup_service_state_dir ()
{
- service_state_dir="$CTDB_VARDIR/state/service_state/${1:-${service_name}}"
+ service_state_dir="${CTDB_SCRIPT_VARDIR}/service_state/${1:-${service_name}}"
mkdir -p "$service_state_dir" || {
echo "Error creating state dir \"$service_state_dir\""
exit 1
########################################################
# Managed status history, for auto-start/stop
-ctdb_managed_dir="$CTDB_VARDIR/state/managed_history"
-
_ctdb_managed_common ()
{
- _ctdb_managed_file="$ctdb_managed_dir/$service_name"
+ _ctdb_managed_file="${CTDB_SCRIPT_VARDIR}/managed_history/${service_name}"
}
ctdb_service_managed ()
{
_ctdb_managed_common
- mkdir -p "$ctdb_managed_dir"
+ mkdir -p "${_ctdb_managed_file%/*}" # dirname
touch "$_ctdb_managed_file"
}
_ctdb_service_reconfigure_common ()
{
- _d="$ctdb_status_dir/${service_name}"
+ _d="${CTDB_SCRIPT_VARDIR}/service_status/${service_name}"
mkdir -p "$_d"
_ctdb_service_reconfigure_flag="$_d/reconfigure"
}
fi
# iptables doesn't like being re-entered, so flock-wrap it.
- flock -w 30 "${CTDB_VARDIR}/iptables-ctdb.flock" "$_iptables_cmd" "$@"
+ flock -w 30 "${CTDB_SCRIPT_VARDIR}/iptables.flock" "$_iptables_cmd" "$@"
}
# AIX (and perhaps others?) doesn't have mktemp
{
_port="$1"
- tickledir="$CTDB_VARDIR/state/tickles"
+ tickledir="${CTDB_SCRIPT_VARDIR}/tickles"
mkdir -p "$tickledir"
ctdb_get_pnn
# Record connections to our public IPs in a temporary file
_my_connections="${tickledir}/${_port}.connections"
- rm -f "$_my_connections"
netstat -tn |
awk -v destpat="^${_ipschoice}:${_port}\$" \
'$1 == "tcp" && $6 == "ESTABLISHED" && $4 ~ destpat {print $5, $4}' |
# Record our current tickles in a temporary file
_my_tickles="${tickledir}/${_port}.tickles"
- rm -f "$_my_tickles"
for _i in $_ips ; do
ctdb -X gettickles $_i $_port |
awk -F'|' 'NR > 1 { printf "%s:%s %s:%s\n", $2, $3, $4, $5 }'