summaryrefslogtreecommitdiffstats
path: root/extras
diff options
context:
space:
mode:
authorSoumya Koduri <skoduri@redhat.com>2016-03-14 16:36:33 +0530
committerKaleb KEITHLEY <kkeithle@redhat.com>2016-03-21 03:51:28 -0700
commit3e5445ae7d1dbbcc138374b6d2e5f95ffc556f4b (patch)
tree45557aa07c03a65537a33dd369035519c98e2ef2 /extras
parent46920e3bd38d9ae7c1910d0bd83eff309ab20c66 (diff)
ganesha: Include a script to generate epoch value
In a NFS-Ganesha HA cluster setup, for NFS clients to recover state succesfully post failover, the NFS-servers should start with a unique epoch value. With NFS-Ganesha 2.3, the service accepts an option "EPOCH_EXEC" which takes path of the script, generating epoch value. This script is executed before starting nfs-ganesha service so that the generated epoch value is used while bringing up the service. This patch includes the script to be used by nfs-ganesha+gluster setup. The epoch value is computed as follows - - first 32-bit contains the now() time - rest 32-bit value contains the local glusterd node uuid Change-Id: I876ea5a3730d7c6b40503e0fec16a4a142c54a36 BUG: 1317482 Signed-off-by: Soumya Koduri <skoduri@redhat.com> Reviewed-on: http://review.gluster.org/13716 Smoke: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: jiffin tony Thottan <jthottan@redhat.com> Reviewed-by: Kaleb KEITHLEY <kkeithle@redhat.com> CentOS-regression: Gluster Build System <jenkins@build.gluster.com> NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
Diffstat (limited to 'extras')
-rw-r--r--extras/ganesha/scripts/Makefile.am6
-rwxr-xr-xextras/ganesha/scripts/generate-epoch.py48
2 files changed, 52 insertions, 2 deletions
diff --git a/extras/ganesha/scripts/Makefile.am b/extras/ganesha/scripts/Makefile.am
index e71e2f6456b..224ed26e75b 100644
--- a/extras/ganesha/scripts/Makefile.am
+++ b/extras/ganesha/scripts/Makefile.am
@@ -1,4 +1,6 @@
-EXTRA_DIST= ganesha-ha.sh dbus-send.sh create-export-ganesha.sh
+EXTRA_DIST= ganesha-ha.sh dbus-send.sh create-export-ganesha.sh \
+ generate-epoch.py
scriptsdir = $(libexecdir)/ganesha
-scripts_SCRIPTS = create-export-ganesha.sh dbus-send.sh ganesha-ha.sh
+scripts_SCRIPTS = create-export-ganesha.sh dbus-send.sh ganesha-ha.sh \
+ generate-epoch.py
diff --git a/extras/ganesha/scripts/generate-epoch.py b/extras/ganesha/scripts/generate-epoch.py
new file mode 100755
index 00000000000..5db5e56b480
--- /dev/null
+++ b/extras/ganesha/scripts/generate-epoch.py
@@ -0,0 +1,48 @@
+#!/usr/bin/python
+#
+# Copyright (c) 2016 Red Hat, Inc. <http://www.redhat.com>
+# This file is part of GlusterFS.
+#
+# This file is licensed to you under your choice of the GNU Lesser
+# General Public License, version 3 or any later version (LGPLv3 or
+# later), or the GNU General Public License, version 2 (GPLv2), in all
+# cases as published by the Free Software Foundation.
+#
+# Generates unique epoch value on each gluster node to be used by
+# nfs-ganesha service on that node.
+#
+# Configure 'EPOCH_EXEC' option to this script path in
+# '/etc/sysconfig/ganesha' file used by nfs-ganesha service.
+#
+# Construct epoch as follows -
+# first 32-bit contains the now() time
+# rest 32-bit value contains the local glusterd node uuid
+
+import time
+import binascii
+
+# Calculate the now() time into a 64-bit integer value
+def epoch_now():
+ epoch_time = int(time.mktime(time.localtime())) << 32
+ return epoch_time
+
+# Read glusterd UUID and extract first 32-bit of it
+def epoch_uuid():
+ file_name = '/var/lib/glusterd/glusterd.info'
+
+ for line in open(file_name):
+ if "UUID" in line:
+ glusterd_uuid = line.split('=')[1].strip()
+
+ uuid_bin = binascii.unhexlify(glusterd_uuid.replace("-",""))
+
+ epoch_uuid = int(uuid_bin.encode('hex'), 32) & 0xFFFF0000
+ return epoch_uuid
+
+# Construct epoch as follows -
+# first 32-bit contains the now() time
+# rest 32-bit value contains the local glusterd node uuid
+epoch = (epoch_now() | epoch_uuid())
+print str(epoch)
+
+exit(0)