[prev in list] [next in list] [prev in thread] [next in thread] 

List:       sanlock-devel
Subject:    reset/sanlk_reset.c reset/sanlk_resetd.c
From:       David Teigland <teigland () fedoraproject ! org>
Date:       2014-08-11 17:11:56
Message-ID: 20140811171156.B8FA560279 () fedorahosted ! org
[Download RAW message or body]

 reset/sanlk_reset.c  |    5 ++++-
 reset/sanlk_resetd.c |   39 ++++++++++++++++++++++++++++++++++++---
 2 files changed, 40 insertions(+), 4 deletions(-)

New commits:
commit 111109e3e74584ec7cbccfbdeb85dcbe1d81dcab
Author: David Teigland <teigland@redhat.com>
Date:   Mon Aug 11 12:10:21 2014 -0500

    reset: add ability to clear all
    
    "sanlk-reset clear all" will unregister all names.
    
    Also, register for an ls name that already exists
    will result in sanlk-resetd doing end, then reg.
    
    Signed-off-by: David Teigland <teigland@redhat.com>

diff --git a/reset/sanlk_reset.c b/reset/sanlk_reset.c
index ddd7af2..a69d1e3 100644
--- a/reset/sanlk_reset.c
+++ b/reset/sanlk_reset.c
@@ -463,6 +463,9 @@ static void usage(void)
 	printf("Update the local sanlk-resetd to not watch lockspaces for reset events:\n");
 	printf("%s end lockspace_name ...\n", prog_name);
 	printf("\n");
+	printf("Update the local sanlk-resetd to clear all lockspaces being watched:\n");
+	printf("%s clear all\n", prog_name);
+	printf("\n");
 	printf("Reset another host through a lockspace it is watching:\n");
 	printf("%s reset lockspace_name:host_id ...\n", prog_name);
 	printf("  --host-id | -i <num>\n");
@@ -562,7 +565,7 @@ int main(int argc, char *argv[])
 	 * Update local sanlk-resetd.
 	 */
 
-	if (!strcmp(cmd, "reg") || !strcmp(cmd, "end")) {
+	if (!strcmp(cmd, "reg") || !strcmp(cmd, "end") || !strcmp(cmd, "clear")) {
 		return update_local_daemon(cmd);
 	}
 
diff --git a/reset/sanlk_resetd.c b/reset/sanlk_resetd.c
index 0c0c0f8..c9deedb 100644
--- a/reset/sanlk_resetd.c
+++ b/reset/sanlk_resetd.c
@@ -251,6 +251,21 @@ static void set_event_out(char *ls_name, uint64_t event_out, uint64_t from_host,
 		log_error("set_event error %d ls %s", rv, ls_name);
 }
 
+static int find_ls(char *name)
+{
+	int i;
+
+	for (i = 0; i < MAX_LS; i++) {
+		if (!ls_names[i])
+			continue;
+
+		if (!strcmp(name, ls_names[i]))
+			return i;
+	}
+
+	return -1;
+}
+
 static int register_ls(int i)
 {
 	int fd;
@@ -260,12 +275,12 @@ static int register_ls(int i)
 
 	fd = sanlock_reg_event(ls_names[i], NULL, 0);
 	if (fd < 0) {
-		log_error("reg_event error %d ls %s", fd, ls_names[i]);
+		log_error("reg_event %d error %d ls %s", i, fd, ls_names[i]);
 		free(ls_names[i]);
 		ls_names[i] = NULL;
 		return fd;
 	} else {
-		log_debug("reg_event fd %d ls %s", fd, ls_names[i]);
+		log_debug("reg_event %d fd %d ls %s", i, fd, ls_names[i]);
 		ls_fd[i] = fd;
 		pollfd[i].fd = fd;
 		pollfd[i].events = POLLIN;
@@ -276,6 +291,7 @@ static int register_ls(int i)
 
 static void unregister_ls(int i)
 {
+	log_debug("end_event %d fd %d ls %s", i, ls_fd[i], ls_names[i]);
 	sanlock_end_event(ls_fd[i], ls_names[i], 0);
 	free(ls_names[i]);
 	ls_names[i] = NULL;
@@ -458,7 +474,7 @@ static void process_update(int fd)
 		return;
 	}
 
-	buf[UPDATE_SIZE] = '\0';
+	buf[UPDATE_SIZE-1] = '\0';
 
 	rv = sscanf(buf, "%s %s", cmd, name);
 	if (rv != 2) {
@@ -469,6 +485,15 @@ static void process_update(int fd)
 	if (!strcmp(cmd, "reg")) {
 		log_debug("process_update reg %s", name);
 
+		/* if the name exists, end then reg */
+		i = find_ls(name);
+		if (i > -1) {
+			unregister_ls(i);
+			ls_names[i] = strdup(name);
+			register_ls(i);
+			return;
+		}
+
 		for (i = 0; i < MAX_LS; i++) {
 			if (ls_names[i])
 				continue;
@@ -487,6 +512,14 @@ static void process_update(int fd)
 			unregister_ls(i);
 			return;
 		}
+	} else if (!strcmp(cmd, "clear")) {
+		log_debug("process_update clear %s", name);
+
+		for (i = 0; i < MAX_LS; i++) {
+			if (!ls_names[i])
+				continue;
+			unregister_ls(i);
+		}
 	} else {
 		log_debug("process_update cmd unknown");
 	}


_______________________________________________
sanlock-devel mailing list
sanlock-devel@lists.fedorahosted.org
https://lists.fedorahosted.org/mailman/listinfo/sanlock-devel

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic