+++ /dev/null
----
- scripts/drbd | 1
- scripts/drbd.ocf | 259 ++++++++++++++++++++++---------------------------------
- 2 files changed, 109 insertions(+), 151 deletions(-)
-
---- a/scripts/drbd.ocf
-+++ b/scripts/drbd.ocf
-@@ -5,6 +5,8 @@
- #
- # Copyright (c) 2009 LINBIT HA-Solutions GmbH,
- # Copyright (c) 2009 Florian Haas, Lars Ellenberg
-+# Copyright (c) 2014 Wind River Systems, Inc. All rights reserved.
-+#
- # Based on the Heartbeat drbd OCF Resource Agent by Lars Marowsky-Bree
- # (though it turned out to be an almost complete rewrite)
- #
-@@ -216,20 +218,6 @@ do_drbdadm() {
- return $ret
- }
-
--set_master_score() {
-- if [ -x ${HA_SBIN_DIR}/crm_master ]; then
-- # Use quiet mode (-Q) to quench logging. Actual score updates
-- # will get logged by attrd anyway
-- do_cmd ${HA_SBIN_DIR}/crm_master -Q -l reboot -v $1
-- fi
--}
--
--remove_master_score() {
-- if [ -x ${HA_SBIN_DIR}/crm_master ]; then
-- do_cmd ${HA_SBIN_DIR}/crm_master -l reboot -D
-- fi
--}
--
- _sh_status_process() {
- # _volume not present should not happen,
- # but may help make this agent work even if it talks to drbd 8.3.
-@@ -242,6 +230,7 @@ _sh_status_process() {
- DRBD_DSTATE_LOCAL[$_volume]=${_disk:-Unconfigured}
- DRBD_DSTATE_REMOTE[$_volume]=${_pdsk:-DUnknown}
- }
-+
- drbd_set_status_variables() {
- # drbdsetup sh-status prints these values to stdout,
- # and then prints _sh_status_process.
-@@ -322,119 +311,9 @@ maybe_outdate_self()
- ocf_log notice "outdating $DRBD_RESOURCE: according to OCF_RESKEY_CRM_meta_notify_master_uname, '$host' is still master"
- do_drbdadm outdate $DRBD_RESOURCE
-
-- # on some pacemaker versions, -INFINITY may cause resource instance stop/start.
-- # But in this case that is ok, it may even clear the replication link
-- # problem.
-- set_master_score -INFINITY
--
- return 0
- }
-
--drbd_update_master_score() {
-- # NOTE
-- # there may be constraint scores from rules on role=Master,
-- # that in some ways can add to the node attribute based master score we
-- # specify below. If you think you want to add personal preferences,
-- # in case the scores given by this RA do not suffice, this is the
-- # value space you can work with:
-- # -INFINITY: Do not promote. Really. Won't work anyways.
-- # Too bad, at least with current (Oktober 2009) Pacemaker,
-- # negative master scores cause instance stop; restart cycle :(
-- # missing, zero: Do not promote.
-- # I think my data is not good enough.
-- # Though, of course, you may try, and it might even work.
-- # 5: please, do not promote, unless this is your only option.
-- # 10: promotion is probably a bad idea, our local data is no good,
-- # you'd probably run into severe performance problems, and risk
-- # application crashes or blocking IO in case you lose the
-- # replication connection.
-- # 1000: Ok to be promoted, we have good data locally (though we don't
-- # know about the peer, so possibly it has even better data?).
-- # You sould use the crm-fence-peer.sh handler or similar
-- # mechanism to avoid data divergence.
-- # 10000: Please promote me/keep me Primary.
-- # I'm confident that my data is as good as it gets.
-- #
-- # For multi volume, we need to compare who is "better" a bit more sophisticated.
-- # The ${XXX[*]//UpToDate}, without being in double quotes, results in a single space,
-- # if all are UpToDate.
-- : == DEBUG == ${DRBD_ROLE_LOCAL[*]}/${DRBD_DSTATE_LOCAL[*]//UpToDate/ }/${DRBD_DSTATE_REMOTE[*]//UpToDate/ }/ ==
-- case ${DRBD_ROLE_LOCAL[*]}/${DRBD_DSTATE_LOCAL[*]//UpToDate/ }/${DRBD_DSTATE_REMOTE[*]//UpToDate/ }/ in
-- *Primary*/\ /*/)
-- # I am Primary, all local disks are UpToDate
-- set_master_score 10000
-- ;;
-- */\ /*DUnknown*/)
-- # all local disks are UpToDate,
-- # but I'm not Primary,
-- # and I'm not sure about the peer's disk state(s).
-- # We may need to outdate ourselves?
-- # But if we outdate in a MONITOR, and are disconnected
-- # secondary because of a hard primary crash, before CRM noticed
-- # that there is no more master, we'd make us utterly useless!
-- # Trust that the primary will also notice the disconnect,
-- # and will place an appropriate fencing constraint via
-- # its fence-peer handler callback.
-- set_master_score 1000
-- ;;
-- */\ /*/)
-- # We know something about our peer, which means that either the
-- # replication link is established, or it was not even
-- # consistent last time we talked to each other.
-- # Also all our local disks are UpToDate, which means even if we are
-- # currently synchronizing, we do so as SyncSource.
-- set_master_score 10000
-- ;;
--
-- */*/\ /)
-- # At least one of our local disks is not up to date.
-- # But our peer is ALL OK.
-- # We can expect to have access to useful
-- # data, but must expect degraded performance.
-- set_master_score 10
-- ;;
-- */*Attaching*/*/|\
-- */*Negotiating*/*/)
-- # some transitional state.
-- # just don't do anything
-- : ;;
--
-- Unconfigured*|\
-- */*Diskless*/*/|\
-- */*Failed*/*/|\
-- */*Inconsistent*/*/|\
-- */*Outdated*/*/)
-- # ALWAYS put the cluster in MAINTENANCE MODE
-- # if you add a volume to a live replication group,
-- # because the new volume will typically come up as Inconsistent
-- # the first time, which would cause a monitor to revoke the
-- # master score!
-- #
-- # At least some of our local disks are not really useable.
-- # Our peer is not all good either (or some previous case block
-- # would have matched). We have no access to useful data.
-- # DRBD would refuse to be promoted, anyways.
-- #
-- # set_master_score -INFINITY
-- # Too bad, at least with current (Oktober 2009) Pacemaker,
-- # negative master scores cause instance stop; restart cycle :(
-- # Hope that this will suffice.
-- remove_master_score
-- ;;
-- *)
-- # All local disks seem to be Consistent.
-- # They _may_ be up to date, or not.
-- # We hope that fencing mechanisms have put constraints in
-- # place, so we won't be promoted with stale data.
-- # But in case this was a cluster crash,
-- # at least allow _someone_ to be promoted.
-- set_master_score 5
-- ;;
-- esac
--
-- return $OCF_SUCCESS
--}
--
- is_drbd_enabled() {
- test -f /proc/drbd
- }
-@@ -488,7 +367,103 @@ drbd_status() {
- return $rc
- }
-
--# I'm sorry, but there is no $OCF_DEGRADED_MASTER or similar yet.
-+drbd_condition() {
-+ local status
-+ local rc
-+
-+ status=$1
-+ rc=$status
-+
-+ if [ $status -ne $OCF_SUCCESS -a $status -ne $OCF_RUNNING_MASTER ]
-+ then
-+ return $rc
-+ fi
-+
-+ drbd_set_status_variables
-+
-+ ocf_log info "${OCF_RESKEY_drbd_resource} ${DRBD_ROLE_LOCAL}/${DRBD_DSTATE_LOCAL}/${DRBD_DSTATE_REMOTE} ${DRBD_CSTATE}"
-+
-+ case "${DRBD_DSTATE_LOCAL}" in
-+ UpToDate)
-+ case "${DRBD_CSTATE}" in
-+ StandAlone)
-+ rc=$OCF_DATA_STANDALONE
-+ ocf_log info "${OCF_RESKEY_drbd_resource} standalone, attempting to reconnect."
-+ do_drbdadm connect ${OCF_RESKEY_drbd_resource}
-+ ;;
-+ StartingSyncT | WFBitMapT | WFSyncUUID | SyncTarget | \
-+ PausedSyncT)
-+ rc=$OCF_DATA_SYNC
-+ #drbd-overview | grep -A 1 drbd-cgcs | grep sync\'ed | cut -f2,3 -d' '
-+ ocf_log info "${OCF_RESKEY_drbd_resource} syncing"
-+ ;;
-+ *)
-+ ;;
-+ esac
-+ ;;
-+ Consistent)
-+ case "${DRBD_CSTATE}" in
-+ StandAlone)
-+ rc=$OCF_DATA_STANDALONE
-+ ocf_log info "${OCF_RESKEY_drbd_resource} standalone, attempting to reconnect"
-+ do_drbdadm connect ${OCF_RESKEY_drbd_resource}
-+ ;;
-+ *)
-+ rc=$OCF_DATA_CONSISTENT
-+ ocf_log info "${OCF_RESKEY_drbd_resource} consistent"
-+ ;;
-+ esac
-+ ;;
-+ Outdated)
-+ rc=$OCF_DATA_OUTDATED
-+ ocf_log info "${OCF_RESKEY_drbd_resource} outdated"
-+ ;;
-+ *)
-+ case "${DRBD_CSTATE}" in
-+ StandAlone)
-+ rc=$OCF_DATA_STANDALONE
-+ ocf_log info "${OCF_RESKEY_drbd_resource} standalone"
-+ ;;
-+ StartingSyncT | WFBitMapT | WFSyncUUID | SyncTarget | \
-+ PausedSyncT)
-+ rc=$OCF_DATA_SYNC
-+ ocf_log info "${OCF_RESKEY_drbd_resource} sync"
-+ ;;
-+ *)
-+ rc=$OCF_DATA_INCONSISTENT
-+ ocf_log info "${OCF_RESKEY_drbd_resource} inconsistent"
-+ ;;
-+ esac
-+ ;;
-+ esac
-+
-+ if [ $status -eq $OCF_RUNNING_MASTER ]
-+ then
-+ if [ $rc -eq $OCF_DATA_INCONSISTENT ]
-+ then
-+ rc=$OCF_RUNNING_MASTER_DATA_INCONSISTENT
-+
-+ elif [ $rc -eq $OCF_DATA_OUTDATED ]
-+ then
-+ rc=$OCF_RUNNING_MASTER_DATA_OUTDATED
-+
-+ elif [ $rc -eq $OCF_DATA_CONSISTENT ]
-+ then
-+ rc=$OCF_RUNNING_MASTER_DATA_CONSISTENT
-+
-+ elif [ $rc -eq $OCF_DATA_SYNC ]
-+ then
-+ rc=$OCF_RUNNING_MASTER_DATA_SYNC
-+
-+ elif [ $rc -eq $OCF_DATA_STANDALONE ]
-+ then
-+ rc=$OCF_RUNNING_MASTER_DATA_STANDALONE
-+ fi
-+ fi
-+
-+ return $rc
-+}
-+
- drbd_monitor() {
- local status
-
-@@ -501,7 +476,8 @@ drbd_monitor() {
- drbd_status
- status=$?
-
-- drbd_update_master_score
-+ drbd_condition $status
-+ status=$?
-
- return $status
- }
-@@ -578,7 +554,8 @@ drbd_start() {
- # "running" already, anyways, right?
- figure_out_drbd_peer_uname
- do_drbdadm $DRBD_TO_PEER adjust $DRBD_RESOURCE
-- rc=$OCF_SUCCESS
-+ drbd_condition $OCF_SUCCESS
-+ rc=$?
- break
- ;;
- $OCF_NOT_RUNNING)
-@@ -606,9 +583,6 @@ drbd_start() {
- $first_try || sleep 1
- first_try=false
- done
-- # in case someone does not configure monitor,
-- # we must at least call it once after start.
-- drbd_update_master_score
-
- return $rc
- }
-@@ -642,7 +616,8 @@ drbd_promote() {
- break
- ;;
- $OCF_RUNNING_MASTER)
-- rc=$OCF_SUCCESS
-+ drbd_condition $OCF_SUCCESS
-+ rc=$?
- break
- esac
- $first_try || sleep 1
-@@ -666,7 +641,8 @@ drbd_demote() {
- status=$?
- case "$status" in
- $OCF_SUCCESS)
-- rc=$OCF_SUCCESS
-+ drbd_condition $OCF_SUCCESS
-+ rc=$?
- break
- ;;
- $OCF_NOT_RUNNING)
-@@ -718,14 +694,9 @@ drbd_stop() {
- # outdate myself in drbd on-disk meta data.
- maybe_outdate_self
-
-- # do not let old master scores laying around.
-- # they may confuse crm if this node was set to standby.
-- remove_master_score
--
- return $rc
- }
-
--
- drbd_notify() {
- local n_type=$OCF_RESKEY_CRM_meta_notify_type
- local n_op=$OCF_RESKEY_CRM_meta_notify_operation
-@@ -760,7 +731,6 @@ drbd_notify() {
- # After something has been done is a good time to
- # recheck our status:
- drbd_set_status_variables
-- drbd_update_master_score
-
- : == DEBUG == ${DRBD_DSTATE_REMOTE[*]} ==
- case ${DRBD_DSTATE_REMOTE[*]} in
-@@ -793,17 +763,6 @@ ls_stat_is_block_maj_147() {
- [[ $1 = b* ]] && [[ $5 == 147,* ]]
- }
-
--check_crm_feature_set()
--{
-- set -- ${OCF_RESKEY_crm_feature_set//[!0-9]/ }
-- local a=${1:-0} b=${2:-0} c=${3:-0}
--
-- (( a > 3 )) ||
-- (( a == 3 && b > 0 )) ||
-- (( a == 3 && b == 0 && c > 0 )) ||
-- ocf_log warn "You may be disappointed: This RA is intended for pacemaker 1.0 or better!"
--}
--
- drbd_validate_all () {
- DRBDADM="drbdadm"
- DRBDSETUP="drbdsetup"
-@@ -821,7 +780,6 @@ drbd_validate_all () {
- if (( $DRBDADM_VERSION_CODE >= 0x080400 )); then
- DRBD_HAS_MULTI_VOLUME=true
- fi
-- check_crm_feature_set
-
- # Check clone and M/S options.
- meta_expect clone-max -le 2
-@@ -890,7 +848,6 @@ drbd_validate_all () {
- # hm. probably misconfigured constraint somewhere.
- # sorry. don't retry anywhere.
- ocf_log err "DRBD resource ${DRBD_RESOURCE} not found in configuration file ${OCF_RESKEY_drbdconf}."
-- remove_master_score
- return $OCF_ERR_INSTALLED
- fi
- fi
---- a/scripts/drbd
-+++ b/scripts/drbd
-@@ -4,6 +4,7 @@
- # description: Loads and unloads the drbd module
- #
- # Copyright 2001-2010 LINBIT
-+# Copyright (c) 2014 Wind River Systems, Inc. All rights reserved.
- #
- # Philipp Reisner, Lars Ellenberg
- #