/* SRVID to catch all messages */
#define CTDB_SRVID_ALL (~(uint64_t)0)
-/* SRVID prefix used by CTDB */
-#define CTDB_SRVID_PREFIX 0xF000000000000000LL
+/* SRVID prefix used during recovery for pulling and pushing databases */
+#define CTDB_SRVID_RECOVERY 0xF001000000000000LL
+
+/* SRVID to assign of banning credits */
+#define CTDB_SRVID_BANNING 0xF002000000000000LL
/* SRVID to inform of election data */
#define CTDB_SRVID_ELECTION 0xF100000000000000LL
/* SRVID to inform recovery daemon to disable the public ip checks */
#define CTDB_SRVID_DISABLE_IP_CHECK 0xFC00000000000000LL
-/* SRVID to inform recovery daemon of ipreallocate resposnes from ctdbd */
-#define CTDB_SRVID_TAKEOVER_RUN_RESPONSE 0xFD00000000000000LL
-
/* A range of ports reserved for registering a PID (top 8 bits)
* All ports matching the 8 top bits are reserved for exclusive use by
* registering a SRVID that matches the process-id of the requesting process
*/
#define CTDB_SRVID_ISCSID_RANGE 0xDE00000000000000LL
-/* A range of ports reserved for testing (top 8 bits)
+/* A range of ports reserved for CTDB tool (top 8 bits)
* All ports matching the 8 top bits are reserved for exclusive use by
- * test applications
+ * CTDB tool
+ */
+#define CTDB_SRVID_TOOL_RANGE 0xCE00000000000000LL
+
+/* A range of ports reserved by client (top 8 bits)
+ * All ports matching the 8 top bits are reserved for exclusive use by
+ * CTDB client code
*/
-#define CTDB_SRVID_TEST_RANGE 0xCE00000000000000LL
+#define CTDB_SRVID_CLIENT_RANGE 0xBE00000000000000LL
-/* Range of ports reserved for traversals */
-#define CTDB_SRVID_TRAVERSE_RANGE 0xBE00000000000000LL
+/* Range of ports reserved for test applications (top 8 bits)
+ * All ports matching the 8 top bits are reserved for exclusive use by
+ * test applications
+ */
+#define CTDB_SRVID_TEST_RANGE 0xAE00000000000000LL
enum ctdb_controls {CTDB_CONTROL_PROCESS_EXISTS = 0,
CTDB_CONTROL_GET_RECMASTER = 31,
CTDB_CONTROL_SET_RECMASTER = 32,
CTDB_CONTROL_FREEZE = 33,
- CTDB_CONTROL_THAW = 34,
+ CTDB_CONTROL_THAW = 34, /* obsolete */
CTDB_CONTROL_GET_PNN = 35,
CTDB_CONTROL_SHUTDOWN = 36,
- CTDB_CONTROL_GET_MONMODE = 37,
+ CTDB_CONTROL_GET_MONMODE = 37, /* obsolete */
/* #38 removed */
/* #39 removed */
/* #40 removed */
CTDB_CONTROL_GET_PUBLIC_IPSv4 = 51, /* obsolete */
CTDB_CONTROL_MODIFY_FLAGS = 52,
CTDB_CONTROL_GET_ALL_TUNABLES = 53,
- CTDB_CONTROL_KILL_TCP = 54,
+ CTDB_CONTROL_KILL_TCP = 54, /* obsolete */
CTDB_CONTROL_GET_TCP_TICKLE_LIST = 55,
CTDB_CONTROL_SET_TCP_TICKLE_LIST = 56,
- CTDB_CONTROL_REGISTER_SERVER_ID = 57,
- CTDB_CONTROL_UNREGISTER_SERVER_ID = 58,
- CTDB_CONTROL_CHECK_SERVER_ID = 59,
- CTDB_CONTROL_GET_SERVER_ID_LIST = 60,
+ CTDB_CONTROL_REGISTER_SERVER_ID = 57, /* obsolete */
+ CTDB_CONTROL_UNREGISTER_SERVER_ID = 58, /* obsolete */
+ CTDB_CONTROL_CHECK_SERVER_ID = 59, /* obsolete */
+ CTDB_CONTROL_GET_SERVER_ID_LIST = 60, /* obsolete */
CTDB_CONTROL_DB_ATTACH_PERSISTENT = 61,
CTDB_CONTROL_PERSISTENT_STORE = 62, /* obsolete */
CTDB_CONTROL_UPDATE_RECORD = 63,
CTDB_CONTROL_SEND_GRATUITOUS_ARP = 64,
- CTDB_CONTROL_TRANSACTION_START = 65,
- CTDB_CONTROL_TRANSACTION_COMMIT = 66,
+ CTDB_CONTROL_TRANSACTION_START = 65, /* obsolete */
+ CTDB_CONTROL_TRANSACTION_COMMIT = 66, /* obsolete */
CTDB_CONTROL_WIPE_DATABASE = 67,
/* #68 removed */
CTDB_CONTROL_UPTIME = 69,
CTDB_CONTROL_RELOAD_NODES_FILE = 72,
/* #73 removed */
CTDB_CONTROL_TRY_DELETE_RECORDS = 74,
- CTDB_CONTROL_ENABLE_MONITOR = 75,
- CTDB_CONTROL_DISABLE_MONITOR = 76,
+ CTDB_CONTROL_ENABLE_MONITOR = 75, /* obsolete */
+ CTDB_CONTROL_DISABLE_MONITOR = 76, /* obsolete */
CTDB_CONTROL_ADD_PUBLIC_IP = 77,
CTDB_CONTROL_DEL_PUBLIC_IP = 78,
- CTDB_CONTROL_RUN_EVENTSCRIPTS = 79,
+ CTDB_CONTROL_RUN_EVENTSCRIPTS = 79, /* obsolete */
CTDB_CONTROL_GET_CAPABILITIES = 80,
CTDB_CONTROL_START_PERSISTENT_UPDATE = 81, /* obsolete */
CTDB_CONTROL_CANCEL_PERSISTENT_UPDATE= 82, /* obsolete */
CTDB_CONTROL_GET_PUBLIC_IPS = 90,
CTDB_CONTROL_GET_NODEMAP = 91,
/* missing */
- CTDB_CONTROL_GET_EVENT_SCRIPT_STATUS = 96,
+ CTDB_CONTROL_GET_EVENT_SCRIPT_STATUS = 96, /* obsolete */
CTDB_CONTROL_TRAVERSE_KILL = 97,
CTDB_CONTROL_RECD_RECLOCK_LATENCY = 98,
CTDB_CONTROL_GET_RECLOCK_FILE = 99,
- CTDB_CONTROL_SET_RECLOCK_FILE = 100,
+ CTDB_CONTROL_SET_RECLOCK_FILE = 100, /* obsolete */
CTDB_CONTROL_STOP_NODE = 101,
CTDB_CONTROL_CONTINUE_NODE = 102,
CTDB_CONTROL_SET_NATGWSTATE = 103, /* obsolete */
CTDB_CONTROL_SET_LMASTERROLE = 104,
CTDB_CONTROL_SET_RECMASTERROLE = 105,
- CTDB_CONTROL_ENABLE_SCRIPT = 107,
- CTDB_CONTROL_DISABLE_SCRIPT = 108,
+ CTDB_CONTROL_ENABLE_SCRIPT = 107, /* obsolete */
+ CTDB_CONTROL_DISABLE_SCRIPT = 108, /* obsolete */
CTDB_CONTROL_SET_BAN_STATE = 109,
CTDB_CONTROL_GET_BAN_STATE = 110,
- CTDB_CONTROL_SET_DB_PRIORITY = 111,
- CTDB_CONTROL_GET_DB_PRIORITY = 112,
- CTDB_CONTROL_TRANSACTION_CANCEL = 113,
+ CTDB_CONTROL_SET_DB_PRIORITY = 111, /* obsolete */
+ CTDB_CONTROL_GET_DB_PRIORITY = 112, /* obsolete */
+ CTDB_CONTROL_TRANSACTION_CANCEL = 113, /* obsolete */
CTDB_CONTROL_REGISTER_NOTIFY = 114,
CTDB_CONTROL_DEREGISTER_NOTIFY = 115,
CTDB_CONTROL_TRANS2_ACTIVE = 116, /* obsolete */
CTDB_CONTROL_GET_STAT_HISTORY = 127,
CTDB_CONTROL_SCHEDULE_FOR_DELETION = 128,
CTDB_CONTROL_SET_DB_READONLY = 129,
- CTDB_CONTROL_CHECK_SRVIDS = 130,
+ CTDB_CONTROL_CHECK_SRVIDS = 130, /* obsolete */
CTDB_CONTROL_TRAVERSE_START_EXT = 131,
CTDB_CONTROL_GET_DB_STATISTICS = 132,
CTDB_CONTROL_SET_DB_STICKY = 133,
CTDB_CONTROL_DB_TRANSACTION_START = 143,
CTDB_CONTROL_DB_TRANSACTION_COMMIT = 144,
CTDB_CONTROL_DB_TRANSACTION_CANCEL = 145,
+ CTDB_CONTROL_DB_PULL = 146,
+ CTDB_CONTROL_DB_PUSH_START = 147,
+ CTDB_CONTROL_DB_PUSH_CONFIRM = 148,
+ CTDB_CONTROL_DB_OPEN_FLAGS = 149,
+ CTDB_CONTROL_DB_ATTACH_REPLICATED = 150,
};
-#define CTDB_MONITORING_ACTIVE 0
-#define CTDB_MONITORING_DISABLED 1
-
#define MAX_COUNT_BUCKETS 16
#define MAX_HOT_KEYS 10
#define CTDB_DB_FLAGS_PERSISTENT 0x01
#define CTDB_DB_FLAGS_READONLY 0x02
#define CTDB_DB_FLAGS_STICKY 0x04
+#define CTDB_DB_FLAGS_REPLICATED 0x08
uint8_t flags;
};
#define CTDB_RECOVERY_NORMAL 0
#define CTDB_RECOVERY_ACTIVE 1
-#define CTDB_NUM_DB_PRIORITIES 3
-
/*
the extended header for records in the ltdb
*/
} ctdb_sock_addr;
struct ctdb_connection {
- ctdb_sock_addr src;
- ctdb_sock_addr dst;
+ union {
+ ctdb_sock_addr src;
+ ctdb_sock_addr server;
+ };
+ union {
+ ctdb_sock_addr dst;
+ ctdb_sock_addr client;
+ };
};
struct ctdb_tunable {
uint32_t mutex_enabled;
uint32_t lock_processes_per_db;
uint32_t rec_buffer_size_limit;
+ uint32_t queue_buffer_size;
+ uint32_t ip_alloc_algorithm;
+ uint32_t allow_mixed_versions;
};
struct ctdb_tickle_list {
struct ctdb_connection *conn;
};
-enum ctdb_client_type {
- SERVER_TYPE_CTDB = 0,
- SERVER_TYPE_SAMBA = 1,
- SERVER_TYPE_NFSD = 2,
- SERVER_TYPE_ISCSID = 3
-};
-
-struct ctdb_client_id {
- enum ctdb_client_type type;
- uint32_t pnn;
- uint32_t server_id;
-};
-
-struct ctdb_client_id_list {
- uint32_t num;
- struct ctdb_client_id *cid;
-};
-
-struct ctdb_client_id_map {
- int count;
- struct ctdb_client_id_list *list;
-};
-
struct ctdb_addr_info {
ctdb_sock_addr addr;
uint32_t mask;
*/
#define CTDB_CAP_RECMASTER 0x00000001
#define CTDB_CAP_LMASTER 0x00000002
-/* This capability is set if CTDB_LVS_PUBLIC_IP is set */
-#define CTDB_CAP_LVS 0x00000004
+#define CTDB_CAP_LVS 0x00000004 /* obsolete */
#define CTDB_CAP_NATGW 0x00000008 /* obsolete */
/*
* Node features
*/
#define CTDB_CAP_PARALLEL_RECOVERY 0x00010000
+#define CTDB_CAP_FRAGMENTED_CONTROLS 0x00020000
-#define CTDB_CAP_FEATURES (CTDB_CAP_PARALLEL_RECOVERY)
+#define CTDB_CAP_FEATURES (CTDB_CAP_PARALLEL_RECOVERY | \
+ CTDB_CAP_FRAGMENTED_CONTROLS)
#define CTDB_CAP_DEFAULT (CTDB_CAP_RECMASTER | \
CTDB_CAP_LMASTER | \
uint32_t time;
};
-struct ctdb_db_priority {
- uint32_t db_id;
- uint32_t priority;
-};
-
struct ctdb_notify_data {
uint64_t srvid;
TDB_DATA data;
TDB_DATA key;
};
-struct ctdb_uint8_array {
- int num;
- uint8_t *val;
-};
-
-struct ctdb_uint64_array {
- int num;
- uint64_t *val;
-};
-
struct ctdb_db_statistics {
struct {
uint32_t num_calls;
struct ctdb_vnn_map *vnnmap;
uint32_t loglevel;
struct ctdb_pulldb *pulldb;
+ struct ctdb_pulldb_ext *pulldb_ext;
struct ctdb_rec_buffer *recbuf;
uint32_t recmode;
const char *db_name;
struct ctdb_tickle_list *tickles;
struct ctdb_client_id *cid;
struct ctdb_addr_info *addr_info;
- uint32_t tid;
struct ctdb_transdb *transdb;
- const char *event_str;
struct ctdb_public_ip *pubip;
enum ctdb_event event;
double reclock_latency;
- const char *reclock_file;
uint32_t role;
- const char *script;
struct ctdb_ban_state *ban_state;
- struct ctdb_db_priority *db_prio;
struct ctdb_notify_data *notify;
uint64_t srvid;
struct ctdb_iface *iface;
struct ctdb_key_data *key;
- struct ctdb_uint64_array *u64_array;
struct ctdb_traverse_start_ext *traverse_start_ext;
struct ctdb_traverse_all_ext *traverse_all_ext;
} data;
uint32_t caps;
struct ctdb_public_ip_list *pubip_list;
struct ctdb_node_map *nodemap;
- struct ctdb_script_list *script_list;
const char *reclock_file;
struct ctdb_ban_state *ban_state;
uint64_t seqnum;
struct ctdb_public_ip_info *ipinfo;
struct ctdb_iface_list *iface_list;
struct ctdb_statistics_list *stats_list;
- struct ctdb_uint8_array *u8_array;
struct ctdb_db_statistics *dbstats;
enum ctdb_runstate runstate;
+ uint32_t num_records;
+ int tdb_flags;
} data;
};
uint32_t client_id;
#define CTDB_CTRL_FLAG_NOREPLY 1
#define CTDB_CTRL_FLAG_OPCODE_SPECIFIC 0xFFFF0000
+/* Ugly overloading of this field... */
+#define CTDB_PUBLIC_IP_FLAGS_ONLY_AVAILABLE 0x00010000
uint32_t flags;
struct ctdb_req_control_data rdata;
};
uint32_t db_id;
/* SRVID_MEM_DUMP, SRVID_TAKEOVER_RUN */
struct ctdb_srvid_message *msg;
- /* SRVID_REBALANCE_NODE */
+ /* SRVID_BANNING, SRVID_REBALANCE_NODE */
uint32_t pnn;
/* SRVID_DISABLE_TAKEOVER_RUNS, SRVID_DISABLE_RECOVERIES */
struct ctdb_disable_message *disable;
TDB_DATA data;
};
+struct ctdb_req_keepalive {
+ uint32_t version;
+ uint32_t uptime;
+};
+
+
/* This is equivalent to server_id */
struct ctdb_server_id {
uint64_t pid;
struct ctdb_g_lock *lock;
};
+/*
+ * Generic packet header
+ */
+
+struct sock_packet_header {
+ uint32_t length;
+ uint32_t reqid;
+};
+
+/*
+ * Eventd protocol
+ */
+
+enum ctdb_event_command {
+ CTDB_EVENT_COMMAND_RUN = 1,
+ CTDB_EVENT_COMMAND_STATUS = 2,
+ CTDB_EVENT_COMMAND_SCRIPT_LIST = 3,
+ CTDB_EVENT_COMMAND_SCRIPT_ENABLE = 4,
+ CTDB_EVENT_COMMAND_SCRIPT_DISABLE = 5,
+};
+
+enum ctdb_event_status_state {
+ CTDB_EVENT_LAST_RUN = 1,
+ CTDB_EVENT_LAST_PASS = 2,
+ CTDB_EVENT_LAST_FAIL = 3,
+};
+
+struct ctdb_event_request_run {
+ enum ctdb_event event;
+ uint32_t timeout;
+ const char *arg_str;
+};
+
+struct ctdb_event_request_status {
+ enum ctdb_event event;
+ enum ctdb_event_status_state state;
+};
+
+struct ctdb_event_request_script_enable {
+ const char *script_name;
+};
+
+struct ctdb_event_request_script_disable {
+ const char *script_name;
+};
+
+struct ctdb_event_request_data {
+ enum ctdb_event_command command;
+ union {
+ struct ctdb_event_request_run *run;
+ struct ctdb_event_request_status *status;
+ struct ctdb_event_request_script_enable *script_enable;
+ struct ctdb_event_request_script_disable *script_disable;
+ } data;
+};
+
+struct ctdb_event_reply_status {
+ int status;
+ struct ctdb_script_list *script_list;
+};
+
+struct ctdb_event_reply_script_list {
+ struct ctdb_script_list *script_list;
+};
+
+struct ctdb_event_reply_data {
+ enum ctdb_event_command command;
+ int32_t result;
+ union {
+ struct ctdb_event_reply_status *status;
+ struct ctdb_event_reply_script_list *script_list;
+ } data;
+};
+
+struct ctdb_event_request {
+ struct sock_packet_header header;
+ struct ctdb_event_request_data rdata;
+};
+
+struct ctdb_event_reply {
+ struct sock_packet_header header;
+ struct ctdb_event_reply_data rdata;
+};
+
#endif /* __CTDB_PROTOCOL_H__ */