# 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/

Reply via email to