------------------------------------------------------------
revno: 220
revision-id: [EMAIL PROTECTED]
parent: [EMAIL PROTECTED]
committer: Andrew Tridgell <[EMAIL PROTECTED]>
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) {

Reply via email to