From c954c6470fe61c73396b45ca75310d146997f81b Mon Sep 17 00:00:00 2001
From: David Vossel <dvossel@redhat.com>
Date: Wed, 29 Apr 2015 11:16:18 -0500
Subject: [PATCH 5/6] db2 support
---
heartbeat/db2 | 60 +++++++++++++++++++++++++++++++++++++++++++++--------------
1 file changed, 46 insertions(+), 14 deletions(-)
diff --git a/heartbeat/db2 b/heartbeat/db2
index f9db2f8..fed2d86 100755
--- a/heartbeat/db2
+++ b/heartbeat/db2
@@ -132,6 +132,9 @@ END
db2_validate() {
local db2home db2sql db2instance
+ # db2 uses korn shell
+ check_binary "ksh"
+
# check required instance vars
if [ -z "$OCF_RESKEY_instance" ]
then
@@ -208,6 +211,14 @@ db2_validate() {
return $OCF_SUCCESS
}
+master_score()
+{
+ if ! have_binary "crm_master"; then
+ return
+ fi
+
+ crm_master $*
+}
#
# Run the given command as db2 instance user
@@ -380,8 +391,17 @@ db2_check_config_compatibility() {
#
db2_start() {
local output start_cmd db
+ local start_opts="dbpartitionnum $db2node"
+
+ # If we detect that db partitions are not in use, and no
+ # partition is explicitly specified, activate without
+ # partition information. This allows db2 instances without
+ # partition support to be managed.
+ if [ -z "$OCF_RESKEY_dbpartitionnum" ] && ! [ -a "$db2sql/db2nodes.cfg" ]; then
+ start_opts=""
+ fi
- if output=$(runasdb2 db2start dbpartitionnum $db2node)
+ if output=$(runasdb2 db2start $start_opts)
then
ocf_log info "DB2 instance $instance($db2node) started: $output"
else
@@ -473,10 +493,15 @@ db2_start() {
#
db2_stop_bg() {
local rc output
+ local stop_opts="dbpartitionnum $db2node"
rc=$OCF_SUCCESS
- if output=$(runasdb2 db2stop force dbpartitionnum $db2node)
+ if [ -z "$OCF_RESKEY_dbpartitionnum" ] && ! [ -a "$db2sql/db2nodes.cfg" ]; then
+ stop_opts=""
+ fi
+
+ if output=$(runasdb2 db2stop force $stop_opts)
then
ocf_log info "DB2 instance $instance($db2node) stopped: $output"
else
@@ -502,13 +527,13 @@ db2_stop() {
local stop_timeout grace_timeout stop_bg_pid i must_kill
# remove master score
- crm_master -D -l reboot
+ master_score -D -l reboot
# be very early here in order to avoid stale data
rm -f $STATE_FILE
- if ! db2_instance_status
- then
+ db2_instance_status
+ if [ $? -eq $OCF_NOT_RUNNING ]; then
ocf_log info "DB2 instance $instance already stopped"
return $OCF_SUCCESS
fi
@@ -585,7 +610,12 @@ db2_instance_status() {
local pscount
pscount=$(runasdb2 $db2bin/db2nps $db2node | cut -c9- | grep ' db2[^ ]' | wc -l)
- test $pscount -ge 4
+ if [ $pscount -ge 4 ]; then
+ return $OCF_SUCCESS;
+ elif [ $pscount -ge 1 ]; then
+ return $OCF_GENERIC_ERR
+ fi
+ return $OCF_NOT_RUNNING
}
#
@@ -626,12 +656,14 @@ db2_hadr_status() {
#
db2_monitor() {
local CMD output hadr db
+ local rc
- if ! db2_instance_status
- then
+ db2_instance_status
+ rc=$?
+ if [ $rc -ne $OCF_SUCCESS ]; then
# instance is dead remove master score
- crm_master -D -l reboot
- exit $OCF_NOT_RUNNING
+ master_score -D -l reboot
+ exit $rc
fi
[ $db2node = 0 ] || return 0
@@ -667,22 +699,22 @@ db2_monitor() {
ocf_log err "DB2 message: $output"
# dead primary, remove master score
- crm_master -D -l reboot
+ master_score -D -l reboot
return $OCF_ERR_GENERIC
esac
fi
ocf_log debug "DB2 database $instance($db2node)/$db appears to be working"
- ocf_is_ms && crm_master -v 10000 -l reboot
+ ocf_is_ms && master_score -v 10000 -l reboot
;;
Standby/*Peer)
- crm_master -v 8000 -l reboot
+ master_score -v 8000 -l reboot
;;
Standby/*)
ocf_log warn "DB2 database $instance($db2node)/$db in status $hadr can never be promoted"
- crm_master -D -l reboot
+ master_score -D -l reboot
;;
*)
--
1.8.4.2