ctdb-daemon: Add extra logging of hot keys
[amitay/samba.git] / ctdb / include / ctdb_private.h
index 3c46ef025c99b6034209fc6d26a7decb0cac6049..9ca87332d6102b7dc01fbbc4900f315fdaad6c60 100644 (file)
@@ -36,6 +36,8 @@ struct ctdb_tcp_array {
 /*
   an installed ctdb remote call
 */
+typedef int (*ctdb_fn_t)(struct ctdb_call_info *);
+
 struct ctdb_registered_call {
        struct ctdb_registered_call *next, *prev;
        uint32_t id;
@@ -74,7 +76,7 @@ struct ctdb_node {
        struct ctdb_context *ctdb;
        ctdb_sock_addr address;
        const char *name; /* for debug messages */
-       void *private_data; /* private to transport */
+       void *transport_data; /* private to transport */
        uint32_t pnn;
        uint32_t flags;
 
@@ -87,7 +89,7 @@ struct ctdb_node {
           if the node becomes disconnected */
        struct daemon_control_state *pending_controls;
 
-       /* used by the recovery dameon to track when a node should be banned */
+       /* used by the recovery daemon to track when a node should be banned */
        struct ctdb_banning_state *ban_state; 
 };
 
@@ -286,7 +288,7 @@ struct ctdb_context {
        char *err_msg;
        const struct ctdb_methods *methods; /* transport methods */
        const struct ctdb_upcalls *upcalls; /* transport upcalls */
-       void *private_data; /* private to transport */
+       void *transport_data; /* private to transport */
        struct ctdb_db_context *db_list;
        struct srvid_context *srv;
        struct srvid_context *tunnels;
@@ -303,7 +305,6 @@ struct ctdb_context {
        bool do_setsched;
        const char *event_script_dir;
        const char *notification_script;
-       const char *default_public_interface;
        pid_t ctdbd_pid;
        pid_t recoverd_pid;
        enum ctdb_runstate runstate;
@@ -319,7 +320,7 @@ struct ctdb_context {
 
        TALLOC_CTX *banning_ctx;
 
-       struct ctdb_vacuum_child_context *vacuumers;
+       struct ctdb_vacuum_child_context *vacuumer;
 
        /* mapping from pid to ctdb_client * */
        struct ctdb_client_pid_list *client_pids;
@@ -341,6 +342,12 @@ struct ctdb_context {
        struct lock_context *lock_pending;
 };
 
+struct ctdb_db_hot_key {
+       uint32_t count;
+       TDB_DATA key;
+       uint32_t last_logged_count;
+};
+
 struct ctdb_db_context {
        struct ctdb_db_context *next, *prev;
        struct ctdb_context *ctdb;
@@ -360,6 +367,7 @@ struct ctdb_db_context {
        struct revokechild_handle *revokechild_active;
        struct ctdb_persistent_state *persistent_state;
        struct trbt_tree *delete_queue;
+       struct trbt_tree *fetch_queue;
        struct trbt_tree *sticky_records; 
        int (*ctdb_ltdb_store_fn)(struct ctdb_db_context *ctdb_db,
                                  TDB_DATA key,
@@ -373,10 +381,11 @@ struct ctdb_db_context {
        struct trbt_tree *defer_dmaster;
 
        struct ctdb_db_statistics_old statistics;
+       struct ctdb_db_hot_key hot_keys[MAX_HOT_KEYS];
 
        struct lock_context *lock_current;
        struct lock_context *lock_pending;
-       int lock_num_current;
+       unsigned int lock_num_current;
        struct db_hash_context *lock_log;
 
        struct ctdb_call_state *pending_calls;
@@ -387,6 +396,7 @@ struct ctdb_db_context {
        uint32_t freeze_transaction_id;
        uint32_t generation;
 
+       bool invalid_records;
        bool push_started;
        void *push_state;
 
@@ -481,7 +491,6 @@ int ctdb_ibw_init(struct ctdb_context *ctdb);
 
 /* from ctdb_banning.c */
 
-void ctdb_local_node_got_banned(struct ctdb_context *ctdb);
 int32_t ctdb_control_set_ban_state(struct ctdb_context *ctdb, TDB_DATA indata);
 int32_t ctdb_control_get_ban_state(struct ctdb_context *ctdb, TDB_DATA *outdata);
 void ctdb_ban_self(struct ctdb_context *ctdb);
@@ -556,7 +565,9 @@ int daemon_deregister_message_handler(struct ctdb_context *ctdb,
 void daemon_tunnel_handler(uint64_t tunnel_id, TDB_DATA data,
                           void *private_data);
 
-int ctdb_start_daemon(struct ctdb_context *ctdb, bool do_fork);
+int ctdb_start_daemon(struct ctdb_context *ctdb,
+                     bool interactive,
+                     bool test_mode_enabled);
 
 struct ctdb_req_header *_ctdb_transport_allocate(struct ctdb_context *ctdb,
                                                 TALLOC_CTX *mem_ctx,
@@ -675,16 +686,6 @@ struct lock_request *ctdb_lock_db(TALLOC_CTX *mem_ctx,
 bool ctdb_logging_init(TALLOC_CTX *mem_ctx, const char *logging,
                       const char *debug_level);
 
-struct ctdb_log_state *ctdb_vfork_with_logging(TALLOC_CTX *mem_ctx,
-                                              struct ctdb_context *ctdb,
-                                              const char *log_prefix,
-                                              const char *helper,
-                                              int helper_argc,
-                                              const char **helper_argv,
-                                              void (*logfn)(const char *,
-                                                            uint16_t, void *),
-                                              void *logfn_private, pid_t *pid);
-
 int ctdb_set_child_logging(struct ctdb_context *ctdb);
 
 /* from ctdb_logging_file.c */
@@ -713,7 +714,7 @@ int ctdb_load_persistent_health(struct ctdb_context *ctdb,
 int ctdb_update_persistent_health(struct ctdb_context *ctdb,
                                  struct ctdb_db_context *ctdb_db,
                                  const char *reason,/* NULL means healthy */
-                                 int num_healthy_nodes);
+                                 unsigned int num_healthy_nodes);
 int ctdb_recheck_persistent_health(struct ctdb_context *ctdb);
 
 int32_t ctdb_control_db_set_healthy(struct ctdb_context *ctdb,
@@ -726,9 +727,12 @@ int ctdb_set_db_readonly(struct ctdb_context *ctdb,
 
 int ctdb_process_deferred_attach(struct ctdb_context *ctdb);
 
-int32_t ctdb_control_db_attach(struct ctdb_context *ctdb, TDB_DATA indata,
+int32_t ctdb_control_db_attach(struct ctdb_context *ctdb,
+                              TDB_DATA indata,
                               TDB_DATA *outdata,
-                              uint8_t db_flags, uint32_t client_id,
+                              uint8_t db_flags,
+                              uint32_t srcnode,
+                              uint32_t client_id,
                               struct ctdb_req_control_old *c,
                               bool *async_reply);
 int32_t ctdb_control_db_detach(struct ctdb_context *ctdb, TDB_DATA indata,
@@ -750,7 +754,6 @@ int32_t ctdb_control_get_db_statistics(struct ctdb_context *ctdb,
 
 /* from ctdb_monitor.c */
 
-int ctdb_set_notification_script(struct ctdb_context *ctdb, const char *script);
 void ctdb_run_notification_script(struct ctdb_context *ctdb, const char *event);
 
 void ctdb_stop_monitoring(struct ctdb_context *ctdb);
@@ -819,8 +822,6 @@ int32_t ctdb_control_start_recovery(struct ctdb_context *ctdb,
 
 int32_t ctdb_control_try_delete_records(struct ctdb_context *ctdb,
                                        TDB_DATA indata, TDB_DATA *outdata);
-int32_t ctdb_control_receive_records(struct ctdb_context *ctdb,
-                                    TDB_DATA indata, TDB_DATA *outdata);
 
 int32_t ctdb_control_get_capabilities(struct ctdb_context *ctdb,
                                      TDB_DATA *outdata);
@@ -829,6 +830,8 @@ int32_t ctdb_control_recd_ping(struct ctdb_context *ctdb);
 int32_t ctdb_control_set_recmaster(struct ctdb_context *ctdb,
                                   uint32_t opcode, TDB_DATA indata);
 
+void ctdb_node_become_inactive(struct ctdb_context *ctdb);
+
 int32_t ctdb_control_stop_node(struct ctdb_context *ctdb);
 int32_t ctdb_control_continue_node(struct ctdb_context *ctdb);
 
@@ -841,7 +844,10 @@ void ctdb_stop_recoverd(struct ctdb_context *ctdb);
 
 int ctdb_set_transport(struct ctdb_context *ctdb, const char *transport);
 
-int ctdb_ip_to_nodeid(struct ctdb_context *ctdb, const ctdb_sock_addr *nodeip);
+struct ctdb_node *ctdb_ip_to_node(struct ctdb_context *ctdb,
+                                 const ctdb_sock_addr *nodeip);
+uint32_t ctdb_ip_to_pnn(struct ctdb_context *ctdb,
+                       const ctdb_sock_addr *nodeip);
 
 void ctdb_load_nodes_file(struct ctdb_context *ctdb);
 
@@ -972,6 +978,13 @@ int32_t ctdb_control_tunnel_register(struct ctdb_context *ctdb,
 int32_t ctdb_control_tunnel_deregister(struct ctdb_context *ctdb,
                                       uint32_t client_id, uint64_t tunnel_id);
 
+int ctdb_daemon_send_tunnel(struct ctdb_context *ctdb, uint32_t destnode,
+                           uint64_t tunnel_id, uint32_t client_id,
+                           TDB_DATA data);
+
+void ctdb_request_tunnel(struct ctdb_context *ctdb,
+                        struct ctdb_req_header *hdr);
+
 /* from ctdb_update_record.c */
 
 int32_t ctdb_control_update_record(struct ctdb_context *ctdb,
@@ -984,6 +997,11 @@ int32_t ctdb_control_uptime(struct ctdb_context *ctdb, TDB_DATA *outdata);
 
 /* from ctdb_vacuum.c */
 
+int32_t ctdb_control_db_vacuum(struct ctdb_context *ctdb,
+                              struct ctdb_req_control_old *c,
+                              TDB_DATA indata,
+                              bool *async_reply);
+
 void ctdb_stop_vacuuming(struct ctdb_context *ctdb);
 int ctdb_vacuum_init(struct ctdb_db_context *ctdb_db);
 
@@ -997,6 +1015,8 @@ void ctdb_local_remove_from_delete_queue(struct ctdb_db_context *ctdb_db,
                                         const struct ctdb_ltdb_header *hdr,
                                         const TDB_DATA key);
 
+int32_t ctdb_control_vacuum_fetch(struct ctdb_context *ctdb, TDB_DATA indata);
+
 /* from eventscript.c */
 
 int ctdb_start_eventd(struct ctdb_context *ctdb);