ctdb-eventscripts: Ensure $GANRECDIR points to configured subdirectory
authorMartin Schwenke <martin@meltin.net>
Mon, 16 Jun 2014 00:59:20 +0000 (10:59 +1000)
committerAmitay Isaacs <amitay@samba.org>
Fri, 20 Jun 2014 03:40:16 +0000 (05:40 +0200)
Check that the $GANRECDIR symlink points to the location specified by
$CTDB_GANESHA_REC_SUBDIR and replace it if incorrect.  This handles
reconfiguration and filesystem changes.

While touching this code:

* Create the $GANRECDIR link as a separate step if it doesn't exist.
  This means there is only 1 place where the link is created.

* Change some variables names to the style used for local function
  variables.

* Remove some "ln failed" error messages.  ln failures will be logged
  anyway.

* Add -v to various mkdir/rm/ln commands so that these actions are
  logged when they actually do something.

Signed-off-by: Martin Schwenke <martin@meltin.net>
Reviewed-by: Amitay Isaacs <amitay@gmail.com>
Autobuild-User(master): Amitay Isaacs <amitay@samba.org>
Autobuild-Date(master): Fri Jun 20 05:40:16 CEST 2014 on sn-devel-104

ctdb/config/events.d/60.ganesha

index e085ed3bf83263777ba93cf0e6c2e17a70460a98..df0912d52677050ab30a05e3e78d3236e6649094 100755 (executable)
@@ -84,25 +84,29 @@ create_ganesha_recdirs ()
 {
     [ -n "$CTDB_GANESHA_REC_SUBDIR" ] || CTDB_GANESHA_REC_SUBDIR=".ganesha"
 
-    MOUNTS=$(mount -t $CTDB_CLUSTER_FILESYSTEM_TYPE)
-    if [ -z "$MOUNTS" ]; then
+    _mounts=$(mount -t $CTDB_CLUSTER_FILESYSTEM_TYPE)
+    if [ -z "$_mounts" ]; then
       echo "startup $CTDB_CLUSTER_FILESYSTEM_TYPE not ready"
       exit 0
     fi
-    MNTPT=$(echo "$MOUNTS" | sort | awk 'NR == 1 {print $3}')
-    mkdir -p $MNTPT/$CTDB_GANESHA_REC_SUBDIR
-    if [ -e $GANRECDIR ]; then
-        if [ ! -L $GANRECDIR ] ; then
-            rm -rf $GANRECDIR
-            if ! ln -s $MNTPT/$CTDB_GANESHA_REC_SUBDIR  $GANRECDIR ; then
-                echo "ln failed"
-            fi
-        fi
-    else
-        if ! ln -sf $MNTPT/$CTDB_GANESHA_REC_SUBDIR  $GANRECDIR ; then
-            echo "ln failed"
+    _mntpt=$(echo "$_mounts" | sort | awk 'NR == 1 {print $3}')
+    _link_dst="${_mntpt}/${CTDB_GANESHA_REC_SUBDIR}"
+    mkdir -vp "$_link_dst"
+    if [ -e "$GANRECDIR" ]; then
+        if [ ! -L "$GANRECDIR" ] ; then
+            rm -vrf "$GANRECDIR"
+       else
+           _t=$(readlink "$GANRECDIR")
+           if [ "$_t" != "$_link_dst" ] ; then
+               rm -v "$GANRECDIR"
+           fi
         fi
     fi
+    # This is not an "else".  It also re-creates the link if it was
+    # removed above!
+    if [ ! -e "$GANRECDIR" ]; then
+        ln -sv "$_link_dst" "$GANRECDIR"
+    fi
 
     mkdir -p $GANRECDIR2
     mkdir -p $GANRECDIR3