[Cluster-devel] [PATCH] dlm_stonith_{off, reboot} aliases for fence helper

Jacek Konieczny <[email protected]>
Newsgroups com.redhat.cluster-devel
Message-ID <[email protected]>
Not so pretty hack to allow rebooting instead of halting
the node fenced by dlm_stonith.

'dlm_stonith_reboot' can be now used instead of 'dlm_stonith'
in the dlm.conf file to request node reboot.

'dlm_stonith_off' alias is also provided to explicitly request
power-off.

Signed-off-by: Jacek Konieczny <[email protected]>
---
 fence/Makefile         |   10 +++++++++-
 fence/stonith_helper.c |    8 +++++++-
 2 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/fence/Makefile b/fence/Makefile
index b4c59dd..2f24677 100644
--- a/fence/Makefile
+++ b/fence/Makefile
@@ -6,6 +6,8 @@ BINDIR=$(PREFIX)/sbin
 BIN_TARGET = dlm_stonith
 #MAN_TARGET = dlm_stonith.8
 
+SYMLINKS = dlm_stonith_off dlm_stonith_reboot
+
 BIN_SOURCE = stonith_helper.c
 
 BIN_CFLAGS += -D_GNU_SOURCE -O2 -ggdb \
@@ -37,11 +39,14 @@ BIN_LDFLAGS += -Wl,-z,now -Wl,-z,relro -pie
 BIN_LDFLAGS += `xml2-config --libs`
 BIN_LDFLAGS += -ldl
 
-all: $(BIN_TARGET)
+all: $(BIN_TARGET) $(SYMLINKS)
 
 $(BIN_TARGET): $(BIN_SOURCE)
 	$(CC) $(BIN_SOURCE) $(BIN_CFLAGS) $(BIN_LDFLAGS) -o $@ -L.
 
+$(SYMLINKS): $(BIN_TARGET)
+	for link in $(SYMLINKS) ; do ln -sf $(BIN_TARGET) $$link ; done
+
 clean:
 	rm -f *.o *.so *.so.* $(BIN_TARGET)
 
@@ -53,5 +58,8 @@ install: all
 	$(INSTALL) -d $(DESTDIR)/$(BINDIR)
 	$(INSTALL) -d $(DESTDIR)/$(MANDIR)/man8
 	$(INSTALL) -c -m 755 $(BIN_TARGET) $(DESTDIR)/$(BINDIR)
+	for link in $(SYMLINKS) ; do \
+		ln -sf $(BIN_TARGET) $(DESTDIR)/$(BINDIR)/$$link ; \
+	done
 #	$(INSTALL) -m 644 $(MAN_TARGET) $(DESTDIR)/$(MANDIR)/man8/
 
diff --git a/fence/stonith_helper.c b/fence/stonith_helper.c
index 5b384c1..73a2245 100644
--- a/fence/stonith_helper.c
+++ b/fence/stonith_helper.c
@@ -16,6 +16,7 @@
 
 int nodeid;
 uint64_t fail_time;
+int turn_off = 1;
 
 #define MAX_ARG_LEN 1024
 
@@ -26,6 +27,11 @@ static int get_options(int argc, char *argv[])
 	char val[MAX_ARG_LEN];
 	char c;
 	int rv;
+	int arg0_l;
+
+	arg0_l = strlen(argv[0]);
+	if (arg0_l>7 && !strcmp(argv[0] + arg0_l - 7, "_reboot")) turn_off = 0;
+	else if (arg0_l>4 && !strcmp(argv[0] + arg0_l - 4, "_off")) turn_off = 1;
 
 	if (argc > 1) {
 		while ((c = getopt(argc, argv, "n:t:")) != -1) {
@@ -77,7 +83,7 @@ int main(int argc, char *argv[])
 	if (t >= fail_time)
 		return 0;
 
-	rv = stonith_api_kick_helper(nodeid, 300, 1);
+	rv = stonith_api_kick_helper(nodeid, 300, turn_off);
 	if (rv) {
 		fprintf(stderr, "kick_helper error %d nodeid %d\n", rv, nodeid);
 		openlog("stonith_helper", LOG_CONS | LOG_PID, LOG_DAEMON);
-- 
1.7.7.4
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.