Rev 220: added reset status control in http://samba.org/~tridge/ctdb
tridge at samba.org
tridge at samba.org
Sat Apr 28 17:13:36 GMT 2007
------------------------------------------------------------
revno: 220
revision-id: tridge at samba.org-20070428171336-4yw1gh5qfslqan73
parent: tridge at samba.org-20070428165537-dq8tirclx8okd1ec
committer: Andrew Tridgell <tridge at samba.org>
branch nick: tridge
timestamp: Sat 2007-04-28 19:13:36 +0200
message:
added reset status control
modified:
common/ctdb_client.c ctdb_client.c-20070411010216-3kd8v37k61steeya-1
common/ctdb_control.c ctdb_control.c-20070426122724-j6gkpiofhbwdin63-1
include/ctdb.h ctdb.h-20061117234101-o3qt14umlg9en8z0-11
include/ctdb_private.h ctdb_private.h-20061117234101-o3qt14umlg9en8z0-13
tools/ctdb_control.c ctdb_control.c-20070426122705-9ehj1l5lu2gn9kuj-1
=== modified file 'common/ctdb_client.c'
--- a/common/ctdb_client.c 2007-04-28 15:42:40 +0000
+++ b/common/ctdb_client.c 2007-04-28 17:13:36 +0000
@@ -1054,3 +1054,24 @@
talloc_free(map);
return nodes;
}
+
+
+/*
+ reset remote status
+ */
+int ctdb_status_reset(struct ctdb_context *ctdb, uint32_t destnode)
+{
+ int ret;
+ TDB_DATA data;
+ int32_t res;
+
+ ZERO_STRUCT(data);
+ ret = ctdb_control(ctdb, destnode, 0,
+ CTDB_CONTROL_STATUS_RESET, data,
+ NULL, NULL, &res);
+ if (ret != 0 || res != 0) {
+ DEBUG(0,(__location__ " ctdb_control for reset status failed\n"));
+ return -1;
+ }
+ return 0;
+}
=== modified file 'common/ctdb_control.c'
--- a/common/ctdb_control.c 2007-04-28 13:15:21 +0000
+++ b/common/ctdb_control.c 2007-04-28 17:13:36 +0000
@@ -80,6 +80,12 @@
return 0;
}
+ case CTDB_CONTROL_STATUS_RESET: {
+ CHECK_CONTROL_DATA_SIZE(0);
+ ZERO_STRUCT(ctdb->status);
+ return 0;
+ }
+
case CTDB_CONTROL_GETVNNMAP: {
uint32_t i, len;
CHECK_CONTROL_DATA_SIZE(0);
=== modified file 'include/ctdb.h'
--- a/include/ctdb.h 2007-04-28 15:42:40 +0000
+++ b/include/ctdb.h 2007-04-28 17:13:36 +0000
@@ -256,4 +256,6 @@
uint32_t *ctdb_get_connected_nodes(struct ctdb_context *ctdb, TALLOC_CTX *mem_ctx,
uint32_t *num_nodes);
+int ctdb_status_reset(struct ctdb_context *ctdb, uint32_t destnode);
+
#endif
=== modified file 'include/ctdb_private.h'
--- a/include/ctdb_private.h 2007-04-28 16:55:37 +0000
+++ b/include/ctdb_private.h 2007-04-28 17:13:36 +0000
@@ -251,7 +251,8 @@
CTDB_CONTROL_GET_DEBUG,
CTDB_CONTROL_SET_DEBUG,
CTDB_CONTROL_GET_DBMAP,
- CTDB_CONTROL_GET_NODEMAP};
+ CTDB_CONTROL_GET_NODEMAP,
+ CTDB_CONTROL_STATUS_RESET};
enum call_state {CTDB_CALL_WAIT, CTDB_CALL_DONE, CTDB_CALL_ERROR};
=== modified file 'tools/ctdb_control.c'
--- a/tools/ctdb_control.c 2007-04-28 16:18:33 +0000
+++ b/tools/ctdb_control.c 2007-04-28 17:13:36 +0000
@@ -36,6 +36,7 @@
printf(" ping\n");
printf(" process-exists <vnn:pid> see if a process exists\n");
printf(" status <vnn|all> show ctdb status on a node\n");
+ printf(" statusreset <vnn|all> reset status on a node\n");
printf(" debug <vnn|all> <level> set ctdb debug level on a node\n");
printf(" debuglevel display ctdb debug levels\n");
printf(" getvnnmap <vnn> display ctdb vnnmap\n");
@@ -170,6 +171,56 @@
return 0;
}
+
+/*
+ reset status on all nodes
+ */
+static int control_status_reset_all(struct ctdb_context *ctdb)
+{
+ int ret, i;
+ uint32_t *nodes;
+ uint32_t num_nodes;
+
+ nodes = ctdb_get_connected_nodes(ctdb, ctdb, &num_nodes);
+ CTDB_NO_MEMORY(ctdb, nodes);
+
+ for (i=0;i<num_nodes;i++) {
+ ret = ctdb_status_reset(ctdb, nodes[i]);
+ if (ret != 0) {
+ printf("Unable to reset status on node %u\n", nodes[i]);
+ return ret;
+ }
+ }
+ talloc_free(nodes);
+ return 0;
+}
+
+
+/*
+ reset remote ctdb status
+ */
+static int control_status_reset(struct ctdb_context *ctdb, int argc, const char **argv)
+{
+ uint32_t vnn;
+ int ret;
+ if (argc < 1) {
+ usage();
+ }
+
+ if (strcmp(argv[0], "all") == 0) {
+ return control_status_reset_all(ctdb);
+ }
+
+ vnn = strtoul(argv[0], NULL, 0);
+
+ ret = ctdb_status_reset(ctdb, vnn);
+ if (ret != 0) {
+ printf("Unable to reset status on node %u\n", vnn);
+ return ret;
+ }
+ return 0;
+}
+
/*
display remote ctdb vnn map
*/
@@ -441,6 +492,8 @@
ret = control_process_exists(ctdb, extra_argc-1, extra_argv+1);
} else if (strcmp(control, "status") == 0) {
ret = control_status(ctdb, extra_argc-1, extra_argv+1);
+ } else if (strcmp(control, "statusreset") == 0) {
+ ret = control_status_reset(ctdb, extra_argc-1, extra_argv+1);
} else if (strcmp(control, "getvnnmap") == 0) {
ret = control_getvnnmap(ctdb, extra_argc-1, extra_argv+1);
} else if (strcmp(control, "getdbmap") == 0) {
More information about the samba-cvs
mailing list