Sophie

Sophie

distrib > Mageia > 4 > x86_64 > by-pkgid > 3e3c8f05d5b01d5f541fb1751a3395b8 > files > 20

ctdb-1.2.46-4.mga4.x86_64.rpm

# Shared init functions used by SysV and systemd init systems

build_ctdb_options () {

    maybe_set () {
        # If the 2nd arg is null then return - don't set anything.
        # Else if the 3rd arg is set and it doesn't match the 2nd arg
        # then return
        [ -z "$2" -o \( -n "$3" -a "$3" != "$2" \) ] && return

        val="'$2'"
        case "$1" in
            --*) sep="=" ;;
            -*)  sep=" " ;;
        esac
        # For these options we're only passing a value-less flag.
        [ -n "$3" ] && {
            val=""
            sep=""
        }

        CTDB_OPTIONS="${CTDB_OPTIONS}${CTDB_OPTIONS:+ }${1}${sep}${val}"
    }

    [ -z "$CTDB_RECOVERY_LOCK" ] && {
        echo "No recovery lock specified. Starting CTDB without split brain prevention"
    }
    maybe_set "--reclock"                "$CTDB_RECOVERY_LOCK"

    # build up CTDB_OPTIONS variable from optional parameters
    maybe_set "--logfile"                "$CTDB_LOGFILE"
    maybe_set "--nlist"                  "$CTDB_NODES"
    maybe_set "--socket"                 "$CTDB_SOCKET"
    maybe_set "--public-addresses"       "$CTDB_PUBLIC_ADDRESSES"
    maybe_set "--public-interface"       "$CTDB_PUBLIC_INTERFACE"
    maybe_set "--dbdir"                  "$CTDB_DBDIR"
    maybe_set "--dbdir-persistent"       "$CTDB_DBDIR_PERSISTENT"
    maybe_set "--event-script-dir"       "$CTDB_EVENT_SCRIPT_DIR"
    maybe_set "--transport"              "$CTDB_TRANSPORT"
    maybe_set "-d"                       "$CTDB_DEBUGLEVEL"
    maybe_set "--notification-script"    "$CTDB_NOTIFY_SCRIPT"
    maybe_set "--start-as-disabled"      "$CTDB_START_AS_DISABLED"    "yes"
    maybe_set "--start-as-stopped "      "$CTDB_START_AS_STOPPED"     "yes"
    maybe_set "--no-recmaster"           "$CTDB_CAPABILITY_RECMASTER" "no"
    maybe_set "--no-lmaster"             "$CTDB_CAPABILITY_LMASTER"   "no"
    maybe_set "--lvs --single-public-ip" "$CTDB_LVS_PUBLIC_IP"
    maybe_set "--script-log-level"       "$CTDB_SCRIPT_LOG_LEVEL"
    maybe_set "--log-ringbuf-size"       "$CTDB_LOG_RINGBUF_SIZE"
    maybe_set "--syslog"                 "$CTDB_SYSLOG"               "yes"
    maybe_set "--max-persistent-check-errors" "$CTDB_MAX_PERSISTENT_CHECK_ERRORS"
}

check_tdb () {
    local PDBASE=$1

    test x"$TDBTOOL_HAS_CHECK" = x"1" && {
        #
        # Note tdbtool always exits with 0
        #
        local OK=`/usr/bin/tdbtool $PDBASE check | grep "Database integrity is OK" | wc -l`
        test x"$OK" = x"1" || {
            return 1;
        }

        return 0;
    }

    /usr/bin/tdbdump $PDBASE >/dev/null 2>/dev/null || {
        return $?;
    }

    return 0;
}

check_persistent_databases () {
    PERSISTENT_DB_DIR="${CTDB_DBDIR:-/var/lib/ctdb}/persistent"
    mkdir -p $PERSISTENT_DB_DIR 2>/dev/null
    local ERRCOUNT=$CTDB_MAX_PERSISTENT_CHECK_ERRORS

    test -z "$ERRCOUNT" && {
        ERRCOUNT="0"
    }
    test x"$ERRCOUNT" != x"0" && {
        return 0;
    }

    if test -x /usr/bin/tdbtool ; then
        HAVE_TDBTOOL=1
    else
        HAVE_TDBTOOL=0
    fi

    if test x"$HAVE_TDBTOOL" = x"1" ; then
        TDBTOOL_HAS_CHECK=`echo "help" | /usr/bin/tdbtool | grep check | wc -l`
    else
        TDBTOOL_HAS_CHECK=0
    fi

    if test -x /usr/bin/tdbdump ; then
        HAVE_TDBDUMP=1
    else
        HAVE_TDBDUMP=0
    fi

    if test x"$HAVE_TDBDUMP" = x"0" -a x"$TDBTOOL_HAS_CHECK" = x"0" ; then
        echo "WARNING: Cannot check persistent databases since"
        echo "neither 'tdbdump' nor 'tdbtool check' is available."
        echo "Consider installing tdbtool or at least tdbdump!"
        return 0
    fi

    if test x"$HAVE_TDBDUMP" = x"1" -a x"$TDBTOOL_HAS_CHECK" = x"0" ; then
        if test x"$HAVE_TDBTOOL" = x"0"; then
            echo "WARNING: 'tdbtool' is not available. Using 'tdbdump' to"
            echo "check the persistent databases."
            echo "Consider installing a recent 'tdbtool' for better checks!"
        else
            echo "WARNING: The installed 'tdbtool' does not offer the 'check'"
            echo "subcommand. Using 'tdbdump' for persistent database checks."
            echo "Consider updating 'tdbtool' for better checks!"
        fi
    fi

    for PDBASE in `ls $PERSISTENT_DB_DIR/*.tdb.[0-9] 2>/dev/null`; do
        check_tdb $PDBASE || {
            echo "Persistent database $PDBASE is corrupted! CTDB will not start."
            return 1
        }
    done
}

set_ctdb_variables () {
    # set any tunables from the config file
    set | grep ^CTDB_SET_ | cut -d_ -f3- |
    while read v; do
        varname=`echo $v | cut -d= -f1`
        value=`echo $v | cut -d= -f2`
        ctdb setvar $varname $value || RETVAL=1
    done || exit 1
}

wait_until_ready () {
    _timeout="${1:-10}" # default is 10 seconds

    _count=0
    while ! ctdb ping >/dev/null 2>&1 ; do
        if [ $_count -ge $_timeout ] ; then
            return 1
        fi
        sleep 1
        _count=$(($_count + 1))
    done
}

drop_all_public_ips() {
    [ -z "$CTDB_PUBLIC_ADDRESSES" ] && {
        return
    }

    cat $CTDB_PUBLIC_ADDRESSES | while read IP IFACE REST; do
        ip addr del $IP dev $IFACE >/dev/null 2>/dev/null
    done
}