# HG changeset patch
# User Marian Marinov <[email protected]>
# Date 1268266846 -7200
# Branch mysql-ms
# Node ID 31ea5ae9c8e773edb89648cf482907ff3028d456
# Parent 7d5becb0cbd1bf5b3558dd85dede99d7f3ef2a3c
Medium: RA: mysql: fixed the 'while read k v' problem
Fixed all places where I used while read k v for getting the values.
Now I simply change the IFS(input field separator) and get everything line by
line.
diff -r 7d5becb0cbd1 -r 31ea5ae9c8e7 heartbeat/mysql
--- a/heartbeat/mysql Tue Mar 02 14:43:57 2010 +0100
+++ b/heartbeat/mysql Thu Mar 11 02:20:46 2010 +0200
@@ -337,14 +337,12 @@
master_port=''
slave_sql=''
slave_io=''
- mysql \
- --socket=$OCF_RESKEY_socket -O connect_timeout=1 \
- -e 'SHOW SLAVE STATUS\G'|grep -P 'Running|Master_[UHP]'|while read k
v; do
- if [ "$k" = 'Master_Host:' ]; then master_host="$v"; fi
- if [ "$k" = 'Master_User:' ]; then master_user="$v"; fi
- if [ "$k" = 'Master_Port:' ]; then master_port="$v"; fi
- if [ "$k" = 'Slave_IO_Running:' ]; then slave_io="$v"; fi
- if [ "$k" = 'Slave_SQL_Running:' ]; then slave_sql="$v"; fi
+ for i in $(mysql -S $OCF_RESKEY_socket -O connect_timeout=1 -e 'SHOW SLAVE
STATUS\G'|grep -P 'Running|Master_[UHP]'); do
+ if ( echo $i | grep 'Master_Host:' > /dev/null ); then
master_host=$(echo $i|sed 's/^.*: //'); fi
+ if ( echo $i | grep 'Master_User:' > /dev/null ); then
master_user=$(echo $i|sed 's/^.*: //'); fi
+ if ( echo $i | grep 'Master_Port:' > /dev/null ); then
master_port=$(echo $i|sed 's/^.*: //'); fi
+ if ( echo $i | grep 'Slave_IO_Running:' > /dev/null ); then
slave_io=$(echo $i|sed 's/^.*: //'); fi
+ if ( echo $i | grep 'Slave_SQL_Running:' > /dev/null ); then
slave_sql=$(echo $i|sed 's/^.*: //'); fi
done
if [ -z "$master_host" ] || [ -z "$master_user" ] || [ -z "$master_port" ]
|| [ -z "$slave_io" ] || [ -z "$slave_sql" ]; then
@@ -607,14 +605,17 @@
master_file=''
master_pos=''
- mysql --password=$OCF_RESKEY_replication_passwd \
- --user=$OCF_RESKEY_replication_user \
- -h $master_host \
- -O connect_timeout=1 \
- -e 'SHOW MASTER STATUS\G'|while read k v; do
- if [ "$k" = 'File:' ]; then master_file="$v"; fi
- if [ "$k" = 'Position:' ]; then master_pos="$v"; fi
+ oldIFS="$IFS"
+ IFS=$'\n'
+ for i in $(mysql -u $OCF_RESKEY_replication_user \
+ --password=$OCF_RESKEY_replication_passwd \
+ -h $master_host \
+ -O connect_timeout=1 \
+ -e 'SHOW MASTER STATUS\G'); do
+ if ( echo $i | grep 'File:' > /dev/null ); then
master_file=$(echo $i|sed 's/^.*: //'); fi
+ if ( echo $i | grep 'Position:' > /dev/null ); then
master_pos=$(echo $i|sed 's/^.*: //'); fi
done
+ IFS="$oldIFS"
if [ -z "$master_file" ] || [ -z "$master_pos" ]; then
ocf_log err "unable to find master file or master position"
@@ -642,39 +643,44 @@
calculate_preference() {
master_file=''
master_pos=''
- mysql --password=$OCF_RESKEY_replication_passwd \
- --user=$OCF_RESKEY_replication_user \
+
+ oldIFS="$IFS"
+ IFS=$'\n'
+ for i in $(mysql --password=$OCF_RESKEY_replication_passwd \
+ -u $OCF_RESKEY_replication_user \
-h $master_host \
-O connect_timeout=1 \
- -e 'SHOW MASTER STATUS\G'|while read k v; do
- if [ "$k" = 'File:' ]; then master_file="$v"; fi
- if [ "$k" = 'Position:' ]; then master_pos="$v"; fi
+ -e 'SHOW MASTER STATUS\G'); do
+ if ( echo $i | grep 'File:' > /dev/null ); then master_file=$(echo
$i|sed 's/^.*: //'); fi
+ if ( echo $i | grep 'Position:' > /dev/null ); then master_pos=$(echo
$i|sed 's/^.*: //'); break; fi
done
+ IFS="$oldIFS"
if [ -z "$master_file" ] || [ -z "$master_pos" ]; then
- ocf_log err "unable to find master file or master position"
- return $OCF_ERR_GENERIC;
+ ocf_log warn "unable to find master file or master position"
+ return $OCF_SUCCESS;
fi
local_log=''
local_pos=''
exec_pos=''
- mysql --socket=$OCF_RESKEY_socket -O connect_timeout=1 \
- -e 'SHOW SLAVE STATUS\G'|grep Master_Log|while read k v; do
- if [ "$k" = 'Master_Log_File:' ]; then local_log="$v"; fi
- if [ "$k" = 'Read_Master_Log_Pos:' ]; then local_pos="$v"; fi
- if [ "$k" = 'Exec_Master_Log_Pos:' ]; then exec_pos="$v"; fi
+ IFS=$'\n'
+ for i in $(mysql -S $OCF_RESKEY_socket -O connect_timeout=1 -e 'SHOW
SLAVE STATUS\G'|grep Master_Log); do
+ if ( echo $i | grep 'Master_Log_File:' > /dev/null ); then
local_log=$(echo $i|sed 's/^.*: //'); fi
+ if ( echo $i | grep 'Read_Master_Log_Pos:' > /dev/null ); then
local_pos=$(echo $i|sed 's/^.*: //'); fi
+ if ( echo $i | grep 'Exec_Master_Log_Pos:' > /dev/null ); then
exec_pos=$(echo $i|sed 's/^.*: //'); break; fi
done
+ IFS="$oldIFS"
if [ -z "$local_log" ] || [ -z "$local_pos" ] || [ -z "$exec_pos" ];
then
- ocf_log err "unable to get slave status values"
- return $OCF_ERR_GENERIC
+ ocf_log warn "unable to get slave status values"
+ return $OCF_SUCCESS
fi
# no preference for very old slaves
if [ "$master_file" != "$local_log" ]; then
ocf_run $CRM_MASTER -v 0
- return 1;
+ return $OCF_SUCCESS;
fi
# calculate preference points depending on how far behind the master
are we
_______________________________________________________
Linux-HA-Dev: [email protected]
http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
Home Page: http://linux-ha.org/