Dont set next_interval to 0.
[metze/ctdb/wip.git] / server / ctdb_control.c
index f7af371753aebb7e9d4728cfad09263ee4cc23ac..bfb7bd1c29e6c7620b7b8b096d203b8f93256d97 100644 (file)
@@ -17,7 +17,7 @@
    along with this program; if not, see <http://www.gnu.org/licenses/>.
 */
 #include "includes.h"
-#include "lib/events/events.h"
+#include "lib/tevent/tevent.h"
 #include "lib/tdb/include/tdb.h"
 #include "system/network.h"
 #include "system/filesys.h"
@@ -108,6 +108,8 @@ static int32_t ctdb_control_dispatch(struct ctdb_context *ctdb,
                        }
                }
                ctdb->statistics.recovering = (ctdb->recovery_mode == CTDB_RECOVERY_ACTIVE);
+               ctdb->statistics.statistics_current_time = timeval_current();
+
                outdata->dptr = (uint8_t *)&ctdb->statistics;
                outdata->dsize = sizeof(ctdb->statistics);
                return 0;
@@ -128,6 +130,7 @@ static int32_t ctdb_control_dispatch(struct ctdb_context *ctdb,
        case CTDB_CONTROL_STATISTICS_RESET: {
                CHECK_CONTROL_DATA_SIZE(0);
                ZERO_STRUCT(ctdb->statistics);
+               ctdb->statistics.statistics_start_time = timeval_current();
                return 0;
        }
 
@@ -162,7 +165,16 @@ static int32_t ctdb_control_dispatch(struct ctdb_context *ctdb,
                return ctdb_control_push_db(ctdb, indata);
 
        case CTDB_CONTROL_GET_RECMODE: {
-               return ctdb->recovery_mode;
+               int i;
+               if (ctdb->recovery_mode == CTDB_RECOVERY_ACTIVE) {
+                       return CTDB_RECOVERY_ACTIVE;
+               }                 
+               for (i=1; i<=NUM_DB_PRIORITIES; i++) {
+                       if (ctdb->freeze_mode[i] == CTDB_FREEZE_FROZEN) {
+                               return CTDB_RECOVERY_ACTIVE;
+                       }
+               }
+               return CTDB_RECOVERY_NORMAL;
        }
 
        case CTDB_CONTROL_SET_RECMASTER: {
@@ -322,8 +334,16 @@ static int32_t ctdb_control_dispatch(struct ctdb_context *ctdb,
                return ctdb_control_startup(ctdb, srcnode);
 
        case CTDB_CONTROL_TCP_ADD: 
-               CHECK_CONTROL_DATA_SIZE(sizeof(struct ctdb_control_tcp_vnn));
-               return ctdb_control_tcp_add(ctdb, indata);
+               CHECK_CONTROL_DATA_SIZE(sizeof(struct ctdb_tcp_connection));
+               return ctdb_control_tcp_add(ctdb, indata, false);
+
+       case CTDB_CONTROL_TCP_ADD_DELAYED_UPDATE: 
+               CHECK_CONTROL_DATA_SIZE(sizeof(struct ctdb_tcp_connection));
+               return ctdb_control_tcp_add(ctdb, indata, true);
+
+       case CTDB_CONTROL_TCP_REMOVE: 
+               CHECK_CONTROL_DATA_SIZE(sizeof(struct ctdb_tcp_connection));
+               return ctdb_control_tcp_remove(ctdb, indata);
 
        case CTDB_CONTROL_SET_TUNABLE:
                return ctdb_control_set_tunable(ctdb, indata);
@@ -428,28 +448,16 @@ static int32_t ctdb_control_dispatch(struct ctdb_context *ctdb,
                CHECK_CONTROL_DATA_SIZE(sizeof(uint32_t));
                return ctdb_control_trans2_active(ctdb, c, *(uint32_t *)indata.dptr);
 
+       case CTDB_CONTROL_TRANS3_COMMIT:
+               return ctdb_control_trans3_commit(ctdb, c, indata, async_reply);
+
        case CTDB_CONTROL_RECD_PING:
                CHECK_CONTROL_DATA_SIZE(0);
                return ctdb_control_recd_ping(ctdb);
 
-       case CTDB_CONTROL_EVENT_SCRIPT_INIT:
-               CHECK_CONTROL_DATA_SIZE(0);
-               return ctdb_control_event_script_init(ctdb);
-
-       case CTDB_CONTROL_EVENT_SCRIPT_START:
-               return ctdb_control_event_script_start(ctdb, indata);
-       
-       case CTDB_CONTROL_EVENT_SCRIPT_STOP:
-               CHECK_CONTROL_DATA_SIZE(sizeof(int32_t));
-               return ctdb_control_event_script_stop(ctdb, indata);
-
-       case CTDB_CONTROL_EVENT_SCRIPT_FINISHED:
-               CHECK_CONTROL_DATA_SIZE(0);
-               return ctdb_control_event_script_finished(ctdb);
-
        case CTDB_CONTROL_GET_EVENT_SCRIPT_STATUS:
-               CHECK_CONTROL_DATA_SIZE(0);
-               return ctdb_control_get_event_script_status(ctdb, outdata);
+               CHECK_CONTROL_DATA_SIZE(sizeof(uint32_t));
+               return ctdb_control_get_event_script_status(ctdb, *(uint32_t *)indata.dptr, outdata);
 
        case CTDB_CONTROL_RECD_RECLOCK_LATENCY:
                CHECK_CONTROL_DATA_SIZE(sizeof(double));
@@ -568,6 +576,30 @@ static int32_t ctdb_control_dispatch(struct ctdb_context *ctdb,
        case CTDB_CONTROL_CLEAR_LOG:
                return ctdb_control_clear_log(ctdb);
 
+       case CTDB_CONTROL_GET_DB_SEQNUM:
+               CHECK_CONTROL_DATA_SIZE(sizeof(uint64_t));
+               return ctdb_control_get_db_seqnum(ctdb, indata, outdata);
+
+       case CTDB_CONTROL_DB_SET_HEALTHY:
+               CHECK_CONTROL_DATA_SIZE(sizeof(uint32_t));
+               return ctdb_control_db_set_healthy(ctdb, indata);
+
+       case CTDB_CONTROL_DB_GET_HEALTH:
+               CHECK_CONTROL_DATA_SIZE(sizeof(uint32_t));
+               return ctdb_control_db_get_health(ctdb, indata, outdata);
+
+       case CTDB_CONTROL_GET_PUBLIC_IP_INFO:
+               CHECK_CONTROL_DATA_SIZE(sizeof(ctdb_sock_addr));
+               return ctdb_control_get_public_ip_info(ctdb, c, indata, outdata);
+
+       case CTDB_CONTROL_GET_IFACES:
+               CHECK_CONTROL_DATA_SIZE(0);
+               return ctdb_control_get_ifaces(ctdb, c, outdata);
+
+       case CTDB_CONTROL_SET_IFACE_LINK_STATE:
+               CHECK_CONTROL_DATA_SIZE(sizeof(struct ctdb_control_iface_info));
+               return ctdb_control_set_iface_link(ctdb, c, indata);
+
        default:
                DEBUG(DEBUG_CRIT,(__location__ " Unknown CTDB control opcode %u\n", opcode));
                return -1;