[Ocfs2-tools-devel] [PATCH 17/32] o2cb.init: Make it use the new cluster config tool, o2cb

Sunil Mushran sunil.mushran at oracle.com
Tue Sep 14 15:54:47 PDT 2010


The init script uses the new o2cb utility (as opposed to o2cb_ctl) to
online/offline the cluster. It also is now aware of global heartbeat
and calls {start|stop}-heartbeat as part of online|offline cluster.

Signed-off-by: Sunil Mushran <sunil.mushran at oracle.com>
Signed-off-by: Joel Becker <joel.becker at oracle.com>
---
 vendor/common/o2cb.init.sh |  272 +++++++++++++++++++++++++++++++++++---------
 1 files changed, 219 insertions(+), 53 deletions(-)

diff --git a/vendor/common/o2cb.init.sh b/vendor/common/o2cb.init.sh
index 5cb606f..f9e31c9 100644
--- a/vendor/common/o2cb.init.sh
+++ b/vendor/common/o2cb.init.sh
@@ -204,7 +204,7 @@ read_timeout()
     done
 }
 
-set_timeouts()
+set_timeouts_o2cb()
 {
     O2CB_HEARTBEAT_THRESHOLD_FILE_OLD=/proc/fs/ocfs2_nodemanager/hb_dead_threshold
     O2CB_HEARTBEAT_THRESHOLD_FILE=$(configfs_path)/cluster/${CLUSTER}/heartbeat/dead_threshold
@@ -238,14 +238,14 @@ set_timeouts()
     fi
 }
 
-show_timeouts()
+show_timeouts_o2cb()
 {
 
     O2CB_HEARTBEAT_THRESHOLD_FILE_OLD=/proc/fs/ocfs2_nodemanager/hb_dead_threshold
     O2CB_HEARTBEAT_THRESHOLD_FILE=$(configfs_path)/cluster/${CLUSTER}/heartbeat/dead_threshold
     if [ -f "$O2CB_HEARTBEAT_THRESHOLD_FILE" ]; then
         VAL=`cat "$O2CB_HEARTBEAT_THRESHOLD_FILE"`
-        echo "Heartbeat dead threshold = ${VAL}"
+        echo "  Heartbeat dead threshold: ${VAL}"
     elif [ -f "$O2CB_HEARTBEAT_THRESHOLD_FILE_OLD" ]; then
         VAL=`cat "$O2CB_HEARTBEAT_THRESHOLD_FILE_OLD"`
         echo "  Heartbeat dead threshold: ${VAL}"
@@ -271,6 +271,22 @@ show_timeouts()
 }
 
 #
+# return 1 if global heartbeat enabled
+#
+global_heartbeat_enabled_o2cb()
+{
+    O2CB_HEARTBEAT_MODE_FILE=$(configfs_path)/cluster/${CLUSTER}/heartbeat/mode
+    VAL=$(echo "local")
+    if [ -f "$O2CB_HEARTBEAT_MODE_FILE" ]; then
+        VAL=$(cat "$O2CB_HEARTBEAT_MODE_FILE")
+    fi
+    if [ "${VAL}" = "global" ]; then
+        return 1;
+    fi
+    return 0;
+}
+
+#
 # configure_ask()
 #
 # Ask configuration questions, setting the shell vars.
@@ -721,15 +737,15 @@ kill_daemon()
 }
 
 #
-# check_heartbeat()
+# check_heartbeat_o2cb()
 #
 # 0 is hb not active, 1 is error, 2 is hb active
 #
-check_heartbeat()
+check_heartbeat_o2cb()
 {
     if [ "$#" -lt "1" -o -z "$1" ]
     then
-        echo "check_heartbeat(): Requires an argument" >&2
+        echo "check_heartbeat_o2cb(): Requires an argument" >&2
         return 1
     fi
     CLUSTER="$1"
@@ -754,14 +770,14 @@ check_heartbeat()
 }
 
 #
-# clean_heartbeat()
+# clean_heartbeat_o2cb()
 # Removes the inactive heartbeat regions
 #
-clean_heartbeat()
+clean_heartbeat_o2cb()
 {
     if [ "$#" -lt "1" -o -z "$1" ]
     then
-        echo "clean_heartbeat(): Requires an argument" >&2
+        echo "clean_heartbeat_o2cb(): Requires an argument" >&2
         return 1
     fi
     CLUSTER="$1"
@@ -771,7 +787,7 @@ clean_heartbeat()
         return
     fi
 
-    echo -n "Cleaning heartbeat on ${CLUSTER}: "
+    echo -n "Cleaning heartbeat on cluster \"${CLUSTER}\": "
 
     ls -1 "$(configfs_path)/cluster/${CLUSTER}/heartbeat/" | while read HBUUID
     do
@@ -806,16 +822,16 @@ clean_heartbeat()
 }
 
 #
-# clean_cluster()
+# clean_cluster_o2cb()
 # Force cleans configured cluster
 #
 # 0 is clean, 1 is error, 2 is not clean
 #
-clean_cluster()
+clean_cluster_o2cb()
 {
     if [ "$#" -lt "1" -o -z "$1" ]
     then
-        echo "clean_cluster(): Requires an argument" >&2
+        echo "clean_cluster_o2cb(): Requires an argument" >&2
         return 1
     fi
     CLUSTER="$1"
@@ -1183,11 +1199,11 @@ load_status()
     return 0
 }
 
-online_o2cb()
+register_cluster_o2cb()
 {
     if [ "$#" -lt "1" -o -z "$1" ]
     then
-        echo "online_o2cb(): Requires an argument" >&2
+        echo "register_cluster_o2cb(): Requires an argument" >&2
         return 1
     fi
     CLUSTER="$1"
@@ -1198,21 +1214,168 @@ online_o2cb()
         if_fail 1
     fi
 
-    echo -n "Starting O2CB cluster ${CLUSTER}: "
-    OUTPUT="`o2cb_ctl -H -n "${CLUSTER}" -t cluster -a online=yes 2>&1`"
+    echo -n "Registering O2CB cluster \"${CLUSTER}\": "
+    OUTPUT=$(o2cb register-cluster "${CLUSTER}" 2>&1)
     if [ $? = 0 ]
     then
-        set_timeouts
         echo "OK"
-        return
+        return 0
     else
         echo "Failed"
         echo "$OUTPUT"
     fi
 
-    echo -n "Stopping O2CB cluster ${CLUSTER}: "
-    OUTPUT="`o2cb_ctl -H -n "${CLUSTER}" -t cluster -a online=no 2>&1`"
-    if_fail "$?" "$OUTPUT"
+    return 1
+}
+
+unregister_cluster_o2cb()
+{
+    if [ "$#" -lt "1" -o -z "$1" ]
+    then
+        echo "unregister_cluster_o2cb(): Requires an argument" >&2
+        return 1
+    fi
+    CLUSTER="$1"
+
+    echo -n "Unregistering O2CB cluster \"${CLUSTER}\": "
+    OUTPUT=$(o2cb unregister-cluster "${CLUSTER}" 2>&1)
+    if [ $? = 0 ]
+    then
+        echo "OK"
+        return 0
+    else
+        echo "Failed"
+        echo "$OUTPUT"
+    fi
+
+    return 1
+}
+
+#
+# check_register_o2cb()
+#
+# 0 is not registered, 1 is error, 2 is registered
+#
+check_register_o2cb()
+{
+    if [ "$#" -lt "1" -o -z "$1" ]
+    then
+        echo "check_register_o2cb(): Requires an argument" >&2
+        return 1
+    fi
+    CLUSTER="$1"
+
+    RC=0
+    if [ -d "$(configfs_path)/cluster/${CLUSTER}/node/" ]
+    then
+        ls -1 "$(configfs_path)/cluster/${CLUSTER}/node/" | while read NODE
+        do
+            LOCAL="`cat \"$(configfs_path)/cluster/${CLUSTER}/node/${NODE}/local\"`"
+            if [ $LOCAL = 1 ]
+            then
+                return 2
+            fi
+        done
+        if [ $? = 2 ]
+        then
+            RC=2
+        fi
+    fi
+    return $RC
+}
+
+start_global_heartbeat_o2cb()
+{
+    if [ "$#" -lt "1" -o -z "$1" ]
+    then
+        echo "start_global_heartbeat_o2cb(): Requires an argument" >&2
+        return 1
+    fi
+    CLUSTER="$1"
+
+    if ! [ -f ${CLUSTERCONF} ]
+    then
+        echo -n "Checking O2CB cluster configuration : "
+        if_fail 1
+    fi
+
+    global_heartbeat_enabled_o2cb
+    if [ $? -ne 1 ]
+    then
+        return 0;
+    fi
+
+    echo -n "Starting global heartbeat for cluster \"${CLUSTER}\": "
+    OUTPUT=$(o2cb start-heartbeat "${CLUSTER}" 2>&1)
+    if [ $? = 0 ]
+    then
+        echo "OK"
+        return 0
+    else
+        echo "Failed"
+        echo "$OUTPUT"
+    fi
+
+    return 1
+}
+
+stop_global_heartbeat_o2cb()
+{
+    if [ "$#" -lt "1" -o -z "$1" ]
+    then
+        echo "stop_global_heartbeat_o2cb(): Requires an argument" >&2
+        return 1
+    fi
+    CLUSTER="$1"
+
+    global_heartbeat_enabled_o2cb
+    if [ $? -ne 1 ]
+    then
+        return 0;
+    fi
+
+    echo -n "Stopping global heartbeat on cluster \"${CLUSTER}\": "
+    OUTPUT=$(o2cb stop-heartbeat "${CLUSTER}" 2>&1)
+    if [ $? = 0 ]
+    then
+        echo "OK"
+        return 0
+    else
+        echo "Failed"
+        echo "$OUTPUT"
+    fi
+
+    return 1
+}
+
+online_o2cb()
+{
+    if [ "$#" -lt "1" -o -z "$1" ]
+    then
+        echo "online_o2cb(): Requires an argument" >&2
+        return 1
+    fi
+    CLUSTER="$1"
+
+    register_cluster_o2cb "${CLUSTER}"
+    if [ $? -eq 1 ]
+    then
+        unregister_cluster_o2cb "${CLUSTER}"
+        return 1
+    fi
+
+    echo -n "Setting O2CB cluster timeouts : "
+    set_timeouts_o2cb
+    echo "OK"
+
+    start_global_heartbeat_o2cb "${CLUSTER}"
+    if [ $? -eq 1 ]
+    then
+        stop_global_heartbeat_o2cb "${CLUSTER}"
+        return 1
+    fi
+
+    return 0
 }
 
 online_user()
@@ -1271,28 +1434,25 @@ check_online_o2cb()
 {
     if [ "$#" -lt "1" -o -z "$1" ]
     then
-        echo "check_online(): Requires an argument" >&2
+        echo "check_online_o2cb(): Requires an argument" >&2
         return 1
     fi
     CLUSTER="$1"
 
-    RC=0
-    if [ -d "$(configfs_path)/cluster/${CLUSTER}/node/" ]
+    check_register_o2cb "$CLUSTER"
+    if [ $? -ne 2 ]
     then
-        ls -1 "$(configfs_path)/cluster/${CLUSTER}/node/" | while read NODE
-        do
-            LOCAL="`cat \"$(configfs_path)/cluster/${CLUSTER}/node/${NODE}/local\"`"
-            if [ $LOCAL = 1 ]
-            then
-                return 2
-            fi
-        done
-        if [ $? = 2 ]
-        then
-            RC=2
-        fi
+         return $RC
     fi
-    return $RC
+
+    global_heartbeat_enabled_o2cb "$CLUSTER"
+    if [ $? -eq 0 ]
+    then
+        return 2
+    fi
+
+    check_heartbeat_o2cb "$CLUSTER"
+    return $?
 }
 
 #
@@ -1337,10 +1497,12 @@ offline_o2cb()
         return
     fi
 
-    clean_heartbeat $CLUSTER
+    stop_global_heartbeat_o2cb "$CLUSTER"
+
+    clean_heartbeat_o2cb $CLUSTER
 
     echo -n "Stopping O2CB cluster ${CLUSTER}: "
-    check_heartbeat $CLUSTER
+    check_heartbeat_o2cb $CLUSTER
     if [ $? != 0 ]
     then
         echo "Failed"
@@ -1348,14 +1510,10 @@ offline_o2cb()
         exit 1
     fi
 
-    if [ "$FORCE" -eq 1 ]
-    then
-        clean_cluster $CLUSTER
-        if_fail "$?" "Unable to force-offline cluster $CLUSTER" >&2
-    else
-        OUTPUT="`o2cb_ctl -H -n "${CLUSTER}" -t cluster -a online=no 2>&1`"
-        if_fail "$?" "$OUTPUT - Try to force-offline the O2CB cluster"
-    fi
+    # ignoring force-offline as this should be enough
+
+    unregister_cluster_o2cb "${CLUSTER}"
+    return $?
 }
 
 offline_user()
@@ -1412,7 +1570,7 @@ unload()
     unload_stack_$PLUGIN
 
     # Only unmount configfs if there are no other users
-    if [ -z "$(ls -1 "$(configfs_path)")" ]
+    if [ -z "$(ls -1 "$(configfs_path)" 2>/dev/null)" ]
     then
         unmount_filesystem "configfs" "$(configfs_path)"
         if_fail $?
@@ -1453,18 +1611,26 @@ online_status_o2cb()
        return 0;
     fi
 
-    show_timeouts
+    show_timeouts_o2cb
+
+    HBMODE="Local"
+    global_heartbeat_enabled_o2cb "$CLUSTER"
+    if [ $? -eq 1 ]
+    then
+	HBMODE="Global"
+    fi
+
+    echo "  Heartbeat Mode: ${HBMODE}"
 
     echo -n "Checking O2CB heartbeat: "
-    check_heartbeat $CLUSTER
-    if [ $? = 2 ]
+    check_heartbeat_o2cb $CLUSTER
+    if [ $? -eq 2 ]
     then
         echo "Active"
     else
         echo "Not active"
         return 0;
     fi
-
 }
 
 online_status_user()
-- 
1.7.0.4




More information about the Ocfs2-tools-devel mailing list