eventscript: marshall onto last_status immediately
authorRusty Russell <rusty@rustcorp.com.au>
Mon, 7 Dec 2009 12:39:40 +0000 (23:09 +1030)
committerRusty Russell <rusty@rustcorp.com.au>
Mon, 7 Dec 2009 12:39:40 +0000 (23:09 +1030)
This simplifies the code a little: last_status is now read to go
(it's only used by the scriptstatus command at the moment).

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
include/ctdb_private.h
server/eventscript.c

index c074afa15aa89c7ab7d19b00da42609b106a202c..06b469dd639baf86a3a747056c87c2fab465fa31 100644 (file)
@@ -456,7 +456,7 @@ struct ctdb_context {
        TALLOC_CTX *other_event_script_ctx;
 
        struct ctdb_monitor_script_status_ctx *current_monitor_status_ctx;
-       struct ctdb_monitor_script_status_ctx *last_monitor_status_ctx;
+       struct ctdb_monitoring_wire *last_status;
 
        TALLOC_CTX *banning_ctx;
 
index 77c5c34b0ee6fee92da5b778d8bcb3a536394430..7c48bd525e5cc876ca81355689b53cc7a3e5486c 100644 (file)
@@ -225,28 +225,6 @@ int32_t ctdb_control_event_script_disabled(struct ctdb_context *ctdb, TDB_DATA i
        return 0;
 }
 
-/* called from the event script child process when we have completed a
- * monitor event
- */
-int32_t ctdb_control_event_script_finished(struct ctdb_context *ctdb)
-{
-       DEBUG(DEBUG_INFO, ("event script finished called\n"));
-
-       if (ctdb->current_monitor_status_ctx == NULL) {
-               DEBUG(DEBUG_ERR,(__location__ " script_status is NULL when monitoring event finished\n"));
-               return -1;
-       }
-
-       if (ctdb->last_monitor_status_ctx) {
-               talloc_free(ctdb->last_monitor_status_ctx);
-               ctdb->last_monitor_status_ctx = NULL;
-       }
-       ctdb->last_monitor_status_ctx = ctdb->current_monitor_status_ctx;
-       ctdb->current_monitor_status_ctx = NULL;
-
-       return 0;
-}
-
 static struct ctdb_monitoring_wire *marshall_monitoring_scripts(TALLOC_CTX *mem_ctx, struct ctdb_monitoring_wire *monitoring_scripts, struct ctdb_monitor_script_status *script)
 {
        struct ctdb_monitoring_script_wire script_wire;
@@ -284,26 +262,39 @@ static struct ctdb_monitoring_wire *marshall_monitoring_scripts(TALLOC_CTX *mem_
        return monitoring_scripts;
 }
 
-int32_t ctdb_control_get_event_script_status(struct ctdb_context *ctdb, TDB_DATA *outdata)
+/* called from the event script child process when we have completed a
+ * monitor event
+ */
+int32_t ctdb_control_event_script_finished(struct ctdb_context *ctdb)
 {
-       struct ctdb_monitor_script_status_ctx *script_status = talloc_get_type(ctdb->last_monitor_status_ctx, struct ctdb_monitor_script_status_ctx);
-       struct ctdb_monitoring_wire *monitoring_scripts;
+       DEBUG(DEBUG_INFO, ("event script finished called\n"));
 
-       if (script_status == NULL) {
-               DEBUG(DEBUG_ERR,(__location__ " last_monitor_status_ctx is NULL when reading status\n"));
+       if (ctdb->current_monitor_status_ctx == NULL) {
+               DEBUG(DEBUG_ERR,(__location__ " script_status is NULL when monitoring event finished\n"));
                return -1;
        }
 
-       monitoring_scripts = talloc_size(outdata, offsetof(struct ctdb_monitoring_wire, scripts));
-       if (monitoring_scripts == NULL) {
-               DEBUG(DEBUG_ERR,(__location__ " failed to talloc monitoring_scripts structure\n"));
+       talloc_free(ctdb->last_status);
+       ctdb->last_status = talloc_size(ctdb, offsetof(struct ctdb_monitoring_wire, scripts));
+       if (ctdb->last_status == NULL) {
+               DEBUG(DEBUG_ERR,(__location__ " failed to talloc last_status\n"));
                return -1;
        }
-       
-       monitoring_scripts->num_scripts = 0;
-       monitoring_scripts = marshall_monitoring_scripts(outdata, monitoring_scripts, script_status->scripts);
+
+       ctdb->last_status->num_scripts = 0;
+       ctdb->last_status = marshall_monitoring_scripts(ctdb, ctdb->last_status, ctdb->current_monitor_status_ctx->scripts);
+       talloc_free(ctdb->current_monitor_status_ctx);
+       ctdb->current_monitor_status_ctx = NULL;
+
+       return 0;
+}
+
+int32_t ctdb_control_get_event_script_status(struct ctdb_context *ctdb, TDB_DATA *outdata)
+{
+       struct ctdb_monitoring_wire *monitoring_scripts = ctdb->last_status;
+
        if (monitoring_scripts == NULL) {
-               DEBUG(DEBUG_ERR,(__location__ " Monitoring scritps is NULL. can not return data to client\n"));
+               DEBUG(DEBUG_ERR,(__location__ " last_monitor_status_ctx is NULL when reading status\n"));
                return -1;
        }