${INSTALLCMD} -m 755 bin/ctdbd $(DESTDIR)$(sbindir)
${INSTALLCMD} -m 755 bin/smnotify $(DESTDIR)$(bindir)
$(INSTALLCMD) -m 755 bin/ping_pong $(DESTDIR)$(bindir)
- ${INSTALLCMD} -m 644 include/ctdb.h $(DESTDIR)$(includedir)
+ ${INSTALLCMD} -m 644 include/ctdb_client.h $(DESTDIR)$(includedir)
+ ${INSTALLCMD} -m 644 include/ctdb_protocol.h $(DESTDIR)$(includedir)
${INSTALLCMD} -m 644 include/ctdb_private.h $(DESTDIR)$(includedir) # for samba3
${INSTALLCMD} -m 644 config/functions $(DESTDIR)$(etcdir)/ctdb
${INSTALLCMD} -m 755 config/statd-callout $(DESTDIR)$(etcdir)/ctdb
#include "lib/events/events.h"
#include "system/filesys.h"
#include "popt.h"
-#include "../include/ctdb.h"
+#include "../include/ctdb_client.h"
#include "../include/ctdb_private.h"
#include "../common/rb_tree.h"
#include <ctype.h>
#include "system/network.h"
#include "system/filesys.h"
#include "../include/ctdb_private.h"
-#include "../include/ctdb.h"
+#include "../include/ctdb_client.h"
/* structures for packet queueing - see common/ctdb_io.c */
struct ctdb_partial {
#include "lib/tdb/include/tdb.h"
#include "system/time.h"
#include "../include/ctdb_private.h"
-#include "../include/ctdb.h"
+#include "../include/ctdb_client.h"
int log_ringbuf_size;
-/*
- ctdb database library
+/*
+ ctdb database library: old client interface
Copyright (C) Andrew Tridgell 2006
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
-
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
along with this program; if not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef _CTDB_H
-#define _CTDB_H
-
-#define CTDB_IMMEDIATE_MIGRATION 0x00000001
-struct ctdb_call {
- int call_id;
- TDB_DATA key;
- TDB_DATA call_data;
- TDB_DATA reply_data;
- uint32_t status;
- uint32_t flags;
-};
-
-/*
- structure passed to a ctdb call backend function
-*/
-struct ctdb_call_info {
- TDB_DATA key; /* record key */
- TDB_DATA record_data; /* current data in the record */
- TDB_DATA *new_data; /* optionally updated record data */
- TDB_DATA *call_data; /* optionally passed from caller */
- TDB_DATA *reply_data; /* optionally returned by function */
- uint32_t status; /* optional reply status - defaults to zero */
-};
-
-#define CTDB_ERR_INVALID 1
-#define CTDB_ERR_NOMEM 2
-
-/*
- ctdb flags
-*/
-#define CTDB_FLAG_TORTURE (1<<1)
-
-/*
- a message handler ID meaning "give me all messages"
- */
-#define CTDB_SRVID_ALL (~(uint64_t)0)
-
-/*
- srvid type : RECOVERY
-*/
-#define CTDB_SRVID_RECOVERY 0xF100000000000000LL
-
-/*
- a message handler ID meaning that the cluster has been reconfigured
- */
-#define CTDB_SRVID_RECONFIGURE 0xF200000000000000LL
-
-/*
- a message handler ID meaning that an IP address has been released
- */
-#define CTDB_SRVID_RELEASE_IP 0xF300000000000000LL
-
-/*
- a message ID to set the node flags in the recovery daemon
- */
-#define CTDB_SRVID_SET_NODE_FLAGS 0xF400000000000000LL
-
-/*
- a message ID to ask the recovery daemon to update the expected node
- assignment for a public ip
- */
-#define CTDB_SRVID_RECD_UPDATE_IP 0xF500000000000000LL
-
-/*
- a message to tell the recovery daemon to fetch a set of records
- */
-#define CTDB_SRVID_VACUUM_FETCH 0xF700000000000000LL
-
-/*
- a message to tell the recovery daemon to write a talloc memdump
- to the log
- */
-#define CTDB_SRVID_MEM_DUMP 0xF800000000000000LL
-
-/*
- a message ID to get the recovery daemon to push the node flags out
- */
-#define CTDB_SRVID_PUSH_NODE_FLAGS 0xF900000000000000LL
-
-/*
- a message ID to get the recovery daemon to reload the nodes file
- */
-#define CTDB_SRVID_RELOAD_NODES 0xFA00000000000000LL
-
-/*
- a message ID to get the recovery daemon to perform a takeover run
- */
-#define CTDB_SRVID_TAKEOVER_RUN 0xFB00000000000000LL
-
-/* A message id to ask the recovery daemon to temporarily disable the
- public ip checks
-*/
-#define CTDB_SRVID_DISABLE_IP_CHECK 0xFC00000000000000LL
-
-/* A dummy port used for sending back ipreallocate resposnes to the main
- daemon
-*/
-#define CTDB_SRVID_TAKEOVER_RUN_RESPONSE 0xFD00000000000000LL
-
-/* A port reserved for samba (top 32 bits)
- */
-#define CTDB_SRVID_SAMBA_NOTIFY 0xFE00000000000000LL
-
-/* used on the domain socket, send a pdu to the local daemon */
-#define CTDB_CURRENT_NODE 0xF0000001
-/* send a broadcast to all nodes in the cluster, active or not */
-#define CTDB_BROADCAST_ALL 0xF0000002
-/* send a broadcast to all nodes in the current vnn map */
-#define CTDB_BROADCAST_VNNMAP 0xF0000003
-/* send a broadcast to all connected nodes */
-#define CTDB_BROADCAST_CONNECTED 0xF0000004
-
-/* the key used for transaction locking on persistent databases */
-#define CTDB_TRANSACTION_LOCK_KEY "__transaction_lock__"
-
-/* the key used to store persistent db sequence number */
-#define CTDB_DB_SEQNUM_KEY "__db_sequence_number__"
+#ifndef _CTDB_CLIENT_H
+#define _CTDB_CLIENT_H
+#include <ctdb_protocol.h>
enum control_state {CTDB_CONTROL_WAIT, CTDB_CONTROL_DONE, CTDB_CONTROL_ERROR, CTDB_CONTROL_TIMEOUT};
struct {
void (*fn)(struct ctdb_client_control_state *);
void *private_data;
- } async;
+ } async;
};
struct ctdb_client_notify_register {
uint32_t ctdb_get_num_nodes(struct ctdb_context *ctdb);
/* setup a handler for ctdb messages */
-typedef void (*ctdb_message_fn_t)(struct ctdb_context *, uint64_t srvid,
+typedef void (*ctdb_message_fn_t)(struct ctdb_context *, uint64_t srvid,
TDB_DATA data, void *);
-int ctdb_set_message_handler(struct ctdb_context *ctdb, uint64_t srvid,
+int ctdb_set_message_handler(struct ctdb_context *ctdb, uint64_t srvid,
ctdb_message_fn_t handler,
void *private_data);
uint64_t srvid, TDB_DATA data);
-/*
+/*
Fetch a ctdb record from a remote node
. Underneath this will force the
- dmaster for the record to be moved to the local node.
+ dmaster for the record to be moved to the local node.
*/
-struct ctdb_record_handle *ctdb_fetch_lock(struct ctdb_db_context *ctdb_db, TALLOC_CTX *mem_ctx,
+struct ctdb_record_handle *ctdb_fetch_lock(struct ctdb_db_context *ctdb_db, TALLOC_CTX *mem_ctx,
TDB_DATA key, TDB_DATA *data);
int ctdb_record_store(struct ctdb_record_handle *h, TDB_DATA data);
-int ctdb_fetch(struct ctdb_db_context *ctdb_db, TALLOC_CTX *mem_ctx,
+int ctdb_fetch(struct ctdb_db_context *ctdb_db, TALLOC_CTX *mem_ctx,
TDB_DATA key, TDB_DATA *data);
-int ctdb_register_message_handler(struct ctdb_context *ctdb,
+int ctdb_register_message_handler(struct ctdb_context *ctdb,
TALLOC_CTX *mem_ctx,
uint64_t srvid,
ctdb_message_fn_t handler,
int ctdb_ctrl_shutdown(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode);
struct ctdb_vnn_map;
-int ctdb_ctrl_getvnnmap(struct ctdb_context *ctdb,
- struct timeval timeout, uint32_t destnode,
+int ctdb_ctrl_getvnnmap(struct ctdb_context *ctdb,
+ struct timeval timeout, uint32_t destnode,
TALLOC_CTX *mem_ctx, struct ctdb_vnn_map **vnnmap);
int ctdb_ctrl_setvnnmap(struct ctdb_context *ctdb,
- struct timeval timeout, uint32_t destnode,
+ struct timeval timeout, uint32_t destnode,
TALLOC_CTX *mem_ctx, struct ctdb_vnn_map *vnnmap);
/* table that contains a list of all dbids on a node
bool persistent;
} dbs[1];
};
-int ctdb_ctrl_getdbmap(struct ctdb_context *ctdb,
- struct timeval timeout, uint32_t destnode,
+int ctdb_ctrl_getdbmap(struct ctdb_context *ctdb,
+ struct timeval timeout, uint32_t destnode,
TALLOC_CTX *mem_ctx, struct ctdb_dbid_map **dbmap);
struct ctdb_node_map;
-int ctdb_ctrl_getnodemap(struct ctdb_context *ctdb,
- struct timeval timeout, uint32_t destnode,
+int ctdb_ctrl_getnodemap(struct ctdb_context *ctdb,
+ struct timeval timeout, uint32_t destnode,
TALLOC_CTX *mem_ctx, struct ctdb_node_map **nodemap);
-int ctdb_ctrl_getnodemapv4(struct ctdb_context *ctdb,
- struct timeval timeout, uint32_t destnode,
+int ctdb_ctrl_getnodemapv4(struct ctdb_context *ctdb,
+ struct timeval timeout, uint32_t destnode,
TALLOC_CTX *mem_ctx, struct ctdb_node_map **nodemap);
-int ctdb_ctrl_reload_nodes_file(struct ctdb_context *ctdb,
+int ctdb_ctrl_reload_nodes_file(struct ctdb_context *ctdb,
struct timeval timeout, uint32_t destnode);
struct ctdb_key_list {
struct ctdb_client_control_state *state);
-int ctdb_ctrl_copydb(struct ctdb_context *ctdb,
- struct timeval timeout, uint32_t sourcenode,
- uint32_t destnode, uint32_t dbid, uint32_t lmaster,
+int ctdb_ctrl_copydb(struct ctdb_context *ctdb,
+ struct timeval timeout, uint32_t sourcenode,
+ uint32_t destnode, uint32_t dbid, uint32_t lmaster,
TALLOC_CTX *mem_ctx);
int ctdb_ctrl_getdbpath(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode, uint32_t dbid, TALLOC_CTX *mem_ctx, const char **path);
/*
change dmaster for all keys in the database to the new value
*/
-int ctdb_ctrl_setdmaster(struct ctdb_context *ctdb,
- struct timeval timeout, uint32_t destnode,
+int ctdb_ctrl_setdmaster(struct ctdb_context *ctdb,
+ struct timeval timeout, uint32_t destnode,
TALLOC_CTX *mem_ctx, uint32_t dbid, uint32_t dmaster);
/*
*/
int ctdb_ctrl_setrecmaster(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode, uint32_t recmaster);
-uint32_t *ctdb_get_connected_nodes(struct ctdb_context *ctdb,
- struct timeval timeout,
+uint32_t *ctdb_get_connected_nodes(struct ctdb_context *ctdb,
+ struct timeval timeout,
TALLOC_CTX *mem_ctx,
uint32_t *num_nodes);
*/
int ctdb_ctrl_getpid(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode, uint32_t *pid);
-int ctdb_ctrl_freeze(struct ctdb_context *ctdb, struct timeval timeout,
+int ctdb_ctrl_freeze(struct ctdb_context *ctdb, struct timeval timeout,
uint32_t destnode);
-int ctdb_ctrl_freeze_priority(struct ctdb_context *ctdb, struct timeval timeout,
+int ctdb_ctrl_freeze_priority(struct ctdb_context *ctdb, struct timeval timeout,
uint32_t destnode, uint32_t priority);
struct ctdb_client_control_state *
-ctdb_ctrl_freeze_send(struct ctdb_context *ctdb, TALLOC_CTX *mem_ctx,
+ctdb_ctrl_freeze_send(struct ctdb_context *ctdb, TALLOC_CTX *mem_ctx,
struct timeval timeout, uint32_t destnode,
uint32_t priority);
-int ctdb_ctrl_freeze_recv(struct ctdb_context *ctdb, TALLOC_CTX *mem_ctx,
+int ctdb_ctrl_freeze_recv(struct ctdb_context *ctdb, TALLOC_CTX *mem_ctx,
struct ctdb_client_control_state *state);
int ctdb_ctrl_thaw_priority(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode, uint32_t priority);
int ctdb_ctrl_getpnn(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode);
-int ctdb_ctrl_get_tunable(struct ctdb_context *ctdb,
- struct timeval timeout,
+int ctdb_ctrl_get_tunable(struct ctdb_context *ctdb,
+ struct timeval timeout,
uint32_t destnode,
const char *name, uint32_t *value);
-int ctdb_ctrl_set_tunable(struct ctdb_context *ctdb,
- struct timeval timeout,
+int ctdb_ctrl_set_tunable(struct ctdb_context *ctdb,
+ struct timeval timeout,
uint32_t destnode,
const char *name, uint32_t value);
-int ctdb_ctrl_list_tunables(struct ctdb_context *ctdb,
- struct timeval timeout,
+int ctdb_ctrl_list_tunables(struct ctdb_context *ctdb,
+ struct timeval timeout,
uint32_t destnode,
TALLOC_CTX *mem_ctx,
const char ***list, uint32_t *count);
-int ctdb_ctrl_modflags(struct ctdb_context *ctdb,
- struct timeval timeout,
- uint32_t destnode,
+int ctdb_ctrl_modflags(struct ctdb_context *ctdb,
+ struct timeval timeout,
+ uint32_t destnode,
uint32_t set, uint32_t clear);
enum ctdb_server_id_type { SERVER_TYPE_SAMBA=1 };
int ctdb_ctrl_register_server_id(struct ctdb_context *ctdb,
struct timeval timeout,
struct ctdb_server_id *id);
-int ctdb_ctrl_unregister_server_id(struct ctdb_context *ctdb,
- struct timeval timeout,
+int ctdb_ctrl_unregister_server_id(struct ctdb_context *ctdb,
+ struct timeval timeout,
struct ctdb_server_id *id);
int ctdb_ctrl_check_server_id(struct ctdb_context *ctdb,
- struct timeval timeout, uint32_t destnode,
+ struct timeval timeout, uint32_t destnode,
struct ctdb_server_id *id, uint32_t *status);
int ctdb_ctrl_get_server_id_list(struct ctdb_context *ctdb,
TALLOC_CTX *mem_ctx,
- struct timeval timeout, uint32_t destnode,
+ struct timeval timeout, uint32_t destnode,
struct ctdb_server_id_list **svid_list);
struct ctdb_uptime {
/*
struct for tcp_client control
this is an ipv4 only version of this structure used by samba
- samba will later be migrated over to use the
+ samba will later be migrated over to use the
ctdb_control_tcp_addr structure instead
*/
struct ctdb_control_tcp {
int ctdb_ctrl_end_recovery(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode);
-int ctdb_ctrl_getreclock(struct ctdb_context *ctdb,
- struct timeval timeout, uint32_t destnode,
+int ctdb_ctrl_getreclock(struct ctdb_context *ctdb,
+ struct timeval timeout, uint32_t destnode,
TALLOC_CTX *mem_ctx, const char **reclock);
-int ctdb_ctrl_setreclock(struct ctdb_context *ctdb,
- struct timeval timeout, uint32_t destnode,
+int ctdb_ctrl_setreclock(struct ctdb_context *ctdb,
+ struct timeval timeout, uint32_t destnode,
const char *reclock);
uint32_t destnode,
uint32_t db_id);
-struct ctdb_marshall_buffer *ctdb_marshall_add(TALLOC_CTX *mem_ctx,
+struct ctdb_marshall_buffer *ctdb_marshall_add(TALLOC_CTX *mem_ctx,
struct ctdb_marshall_buffer *m,
uint64_t db_id,
uint32_t reqid,
struct ctdb_transaction_handle *ctdb_transaction_start(struct ctdb_db_context *ctdb_db,
TALLOC_CTX *mem_ctx);
-int ctdb_transaction_fetch(struct ctdb_transaction_handle *h,
- TALLOC_CTX *mem_ctx,
+int ctdb_transaction_fetch(struct ctdb_transaction_handle *h,
+ TALLOC_CTX *mem_ctx,
TDB_DATA key, TDB_DATA *data);
-int ctdb_transaction_store(struct ctdb_transaction_handle *h,
+int ctdb_transaction_store(struct ctdb_transaction_handle *h,
TDB_DATA key, TDB_DATA data);
int ctdb_transaction_commit(struct ctdb_transaction_handle *h);
int switch_from_server_to_client(struct ctdb_context *ctdb);
-#define MONITOR_SCRIPT_OK 0
-#define MONITOR_SCRIPT_TIMEOUT 1
-
-#define MAX_SCRIPT_NAME 31
-#define MAX_SCRIPT_OUTPUT 511
-struct ctdb_script_wire {
- char name[MAX_SCRIPT_NAME+1];
- struct timeval start;
- struct timeval finished;
- int32_t status;
- char output[MAX_SCRIPT_OUTPUT+1];
-};
-
-struct ctdb_scripts_wire {
- uint32_t num_scripts;
- struct ctdb_script_wire scripts[1];
-};
-
-/* different calls to event scripts. */
-enum ctdb_eventscript_call {
- CTDB_EVENT_INIT, /* CTDB starting up: no args */
- CTDB_EVENT_SETUP, /* CTDB starting up after transport is readdy: no args. */
- CTDB_EVENT_STARTUP, /* CTDB starting up after initial recovery: no args. */
- CTDB_EVENT_START_RECOVERY, /* CTDB recovery starting: no args. */
- CTDB_EVENT_RECOVERED, /* CTDB recovery finished: no args. */
- CTDB_EVENT_TAKE_IP, /* IP taken: interface, IP address, netmask bits. */
- CTDB_EVENT_RELEASE_IP, /* IP released: interface, IP address, netmask bits. */
- CTDB_EVENT_STOPPED, /* This node is stopped: no args. */
- CTDB_EVENT_MONITOR, /* Please check if service is healthy: no args. */
- CTDB_EVENT_STATUS, /* Report service status: no args. */
- CTDB_EVENT_SHUTDOWN, /* CTDB shutting down: no args. */
- CTDB_EVENT_RELOAD, /* magic */
- CTDB_EVENT_UPDATE_IP, /* IP updating: old interface, new interface, IP address, netmask bits. */
- CTDB_EVENT_MAX
-};
-
-/* Mapping from enum to names. */
-extern const char *ctdb_eventscript_call_names[];
-
-int ctdb_ctrl_getscriptstatus(struct ctdb_context *ctdb,
- struct timeval timeout, uint32_t destnode,
+int ctdb_ctrl_getscriptstatus(struct ctdb_context *ctdb,
+ struct timeval timeout, uint32_t destnode,
TALLOC_CTX *mem_ctx, enum ctdb_eventscript_call type,
struct ctdb_scripts_wire **script_status);
int ctdb_ctrl_set_db_priority(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode, struct ctdb_db_priority *db_prio);
int ctdb_ctrl_get_db_priority(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode, uint32_t db_id, uint32_t *priority);
-#endif
+#endif /* _CTDB_CLIENT_H */
#ifndef _CTDB_PRIVATE_H
#define _CTDB_PRIVATE_H
-#include "ctdb.h"
+#include "ctdb_client.h"
#include <sys/socket.h>
-/* location of daemon socket */
-#define CTDB_PATH "/tmp/ctdb.socket"
-
-/* default ctdb port number */
-#define CTDB_PORT 4379
-
-/* we must align packets to ensure ctdb works on all architectures (eg. sparc) */
-#define CTDB_DS_ALIGNMENT 8
-
-
-#define CTDB_NULL_FUNC 0xFF000001
-#define CTDB_FETCH_FUNC 0xFF000002
-
-
/*
recovery daemon memdump reply address
*/
ctdb_fatal(ctdb, "Out of memory in " __location__ ); \
}} while (0)
-/*
- the extended header for records in the ltdb
-*/
-struct ctdb_ltdb_header {
- uint64_t rsn;
- uint32_t dmaster;
- uint32_t laccessor;
- uint32_t lacount;
-};
-
-enum ctdb_controls {CTDB_CONTROL_PROCESS_EXISTS = 0,
- CTDB_CONTROL_STATISTICS = 1,
- /* #2 removed */
- CTDB_CONTROL_PING = 3,
- CTDB_CONTROL_GETDBPATH = 4,
- CTDB_CONTROL_GETVNNMAP = 5,
- CTDB_CONTROL_SETVNNMAP = 6,
- CTDB_CONTROL_GET_DEBUG = 7,
- CTDB_CONTROL_SET_DEBUG = 8,
- CTDB_CONTROL_GET_DBMAP = 9,
- CTDB_CONTROL_GET_NODEMAPv4 = 10, /* obsolete */
- CTDB_CONTROL_SET_DMASTER = 11,
- /* #12 removed */
- CTDB_CONTROL_PULL_DB = 13,
- CTDB_CONTROL_PUSH_DB = 14,
- CTDB_CONTROL_GET_RECMODE = 15,
- CTDB_CONTROL_SET_RECMODE = 16,
- CTDB_CONTROL_STATISTICS_RESET = 17,
- CTDB_CONTROL_DB_ATTACH = 18,
- CTDB_CONTROL_SET_CALL = 19,
- CTDB_CONTROL_TRAVERSE_START = 20,
- CTDB_CONTROL_TRAVERSE_ALL = 21,
- CTDB_CONTROL_TRAVERSE_DATA = 22,
- CTDB_CONTROL_REGISTER_SRVID = 23,
- CTDB_CONTROL_DEREGISTER_SRVID = 24,
- CTDB_CONTROL_GET_DBNAME = 25,
- CTDB_CONTROL_ENABLE_SEQNUM = 26,
- CTDB_CONTROL_UPDATE_SEQNUM = 27,
- /* #28 removed */
- CTDB_CONTROL_DUMP_MEMORY = 29,
- CTDB_CONTROL_GET_PID = 30,
- CTDB_CONTROL_GET_RECMASTER = 31,
- CTDB_CONTROL_SET_RECMASTER = 32,
- CTDB_CONTROL_FREEZE = 33,
- CTDB_CONTROL_THAW = 34,
- CTDB_CONTROL_GET_PNN = 35,
- CTDB_CONTROL_SHUTDOWN = 36,
- CTDB_CONTROL_GET_MONMODE = 37,
- /* #38 removed */
- /* #39 removed */
- /* #40 removed */
- /* #41 removed */
- CTDB_CONTROL_TAKEOVER_IPv4 = 42, /* obsolete */
- CTDB_CONTROL_RELEASE_IPv4 = 43, /* obsolete */
- CTDB_CONTROL_TCP_CLIENT = 44,
- CTDB_CONTROL_TCP_ADD = 45,
- CTDB_CONTROL_TCP_REMOVE = 46,
- CTDB_CONTROL_STARTUP = 47,
- CTDB_CONTROL_SET_TUNABLE = 48,
- CTDB_CONTROL_GET_TUNABLE = 49,
- CTDB_CONTROL_LIST_TUNABLES = 50,
- 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_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_DB_ATTACH_PERSISTENT = 61,
- CTDB_CONTROL_PERSISTENT_STORE = 62,
- CTDB_CONTROL_UPDATE_RECORD = 63,
- CTDB_CONTROL_SEND_GRATIOUS_ARP = 64,
- CTDB_CONTROL_TRANSACTION_START = 65,
- CTDB_CONTROL_TRANSACTION_COMMIT = 66,
- CTDB_CONTROL_WIPE_DATABASE = 67,
- /* #68 removed */
- CTDB_CONTROL_UPTIME = 69,
- CTDB_CONTROL_START_RECOVERY = 70,
- CTDB_CONTROL_END_RECOVERY = 71,
- 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_ADD_PUBLIC_IP = 77,
- CTDB_CONTROL_DEL_PUBLIC_IP = 78,
- CTDB_CONTROL_RUN_EVENTSCRIPTS = 79,
- CTDB_CONTROL_GET_CAPABILITIES = 80,
- CTDB_CONTROL_START_PERSISTENT_UPDATE = 81,
- CTDB_CONTROL_CANCEL_PERSISTENT_UPDATE= 82,
- CTDB_CONTROL_TRANS2_COMMIT = 83,
- CTDB_CONTROL_TRANS2_FINISHED = 84,
- CTDB_CONTROL_TRANS2_ERROR = 85,
- CTDB_CONTROL_TRANS2_COMMIT_RETRY = 86,
- CTDB_CONTROL_RECD_PING = 87,
- CTDB_CONTROL_RELEASE_IP = 88,
- CTDB_CONTROL_TAKEOVER_IP = 89,
- CTDB_CONTROL_GET_PUBLIC_IPS = 90,
- CTDB_CONTROL_GET_NODEMAP = 91,
- CTDB_CONTROL_GET_EVENT_SCRIPT_STATUS = 96,
- 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_STOP_NODE = 101,
- CTDB_CONTROL_CONTINUE_NODE = 102,
- CTDB_CONTROL_SET_NATGWSTATE = 103,
- CTDB_CONTROL_SET_LMASTERROLE = 104,
- CTDB_CONTROL_SET_RECMASTERROLE = 105,
- CTDB_CONTROL_ENABLE_SCRIPT = 107,
- CTDB_CONTROL_DISABLE_SCRIPT = 108,
- 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_REGISTER_NOTIFY = 114,
- CTDB_CONTROL_DEREGISTER_NOTIFY = 115,
- CTDB_CONTROL_TRANS2_ACTIVE = 116,
- CTDB_CONTROL_GET_LOG = 117,
- CTDB_CONTROL_CLEAR_LOG = 118,
- CTDB_CONTROL_TRANS3_COMMIT = 119,
- CTDB_CONTROL_GET_DB_SEQNUM = 120,
- CTDB_CONTROL_DB_SET_HEALTHY = 121,
- CTDB_CONTROL_DB_GET_HEALTH = 122,
- CTDB_CONTROL_GET_PUBLIC_IP_INFO = 123,
- CTDB_CONTROL_GET_IFACES = 124,
- CTDB_CONTROL_SET_IFACE_LINK_STATE = 125,
-};
-
/*
structure passed in set_call control
*/
struct ctdb_ltdb_header header;
};
-/*
- operation IDs
-*/
-enum ctdb_operation {
- CTDB_REQ_CALL = 0,
- CTDB_REPLY_CALL = 1,
- CTDB_REQ_DMASTER = 2,
- CTDB_REPLY_DMASTER = 3,
- CTDB_REPLY_ERROR = 4,
- CTDB_REQ_MESSAGE = 5,
- /* #6 removed */
- CTDB_REQ_CONTROL = 7,
- CTDB_REPLY_CONTROL = 8,
- CTDB_REQ_KEEPALIVE = 9,
-};
-
-#define CTDB_MAGIC 0x43544442 /* CTDB */
-#define CTDB_VERSION 1
-
-/*
- packet structures
-*/
-struct ctdb_req_header {
- uint32_t length;
- uint32_t ctdb_magic;
- uint32_t ctdb_version;
- uint32_t generation;
- uint32_t operation;
- uint32_t destnode;
- uint32_t srcnode;
- uint32_t reqid;
-};
-
-struct ctdb_req_call {
- struct ctdb_req_header hdr;
- uint32_t flags;
- uint32_t db_id;
- uint32_t callid;
- uint32_t hopcount;
- uint32_t keylen;
- uint32_t calldatalen;
- uint8_t data[1]; /* key[] followed by calldata[] */
-};
-
-struct ctdb_reply_call {
- struct ctdb_req_header hdr;
- uint32_t status;
- uint32_t datalen;
- uint8_t data[1];
-};
-
-struct ctdb_reply_error {
- struct ctdb_req_header hdr;
- uint32_t status;
- uint32_t msglen;
- uint8_t msg[1];
-};
-
-struct ctdb_req_dmaster {
- struct ctdb_req_header hdr;
- uint32_t db_id;
- uint64_t rsn;
- uint32_t dmaster;
- uint32_t keylen;
- uint32_t datalen;
- uint8_t data[1];
-};
-
-struct ctdb_reply_dmaster {
- struct ctdb_req_header hdr;
- uint32_t db_id;
- uint64_t rsn;
- uint32_t keylen;
- uint32_t datalen;
- uint8_t data[1];
-};
-
-struct ctdb_req_message {
- struct ctdb_req_header hdr;
- uint64_t srvid;
- uint32_t datalen;
- uint8_t data[1];
-};
-
-struct ctdb_req_getdbpath {
- struct ctdb_req_header hdr;
- uint32_t db_id;
-};
-
-struct ctdb_reply_getdbpath {
- struct ctdb_req_header hdr;
- uint32_t datalen;
- uint8_t data[1];
-};
-
-struct ctdb_req_control {
- struct ctdb_req_header hdr;
- uint32_t opcode;
- uint64_t srvid;
- uint32_t client_id;
-#define CTDB_CTRL_FLAG_NOREPLY 1
-#define CTDB_CTRL_FLAG_OPCODE_SPECIFIC 0xFFFF0000
- uint32_t flags;
- uint32_t datalen;
- uint8_t data[1];
-};
-
-struct ctdb_reply_control {
- struct ctdb_req_header hdr;
- int32_t status;
- uint32_t datalen;
- uint32_t errorlen;
- uint8_t data[1];
-};
-
-struct ctdb_req_keepalive {
- struct ctdb_req_header hdr;
-};
-
-
-/* types of failures possible from TRANS2_COMMIT */
-enum ctdb_trans2_commit_error {
- CTDB_TRANS2_COMMIT_SUCCESS=0, /* all nodes committed successfully */
- CTDB_TRANS2_COMMIT_TIMEOUT=1, /* at least one node timed out */
- CTDB_TRANS2_COMMIT_ALLFAIL=2, /* all nodes failed the commit */
- CTDB_TRANS2_COMMIT_SOMEFAIL=3 /* some nodes failed the commit, some allowed it */
-};
-
/* internal prototypes */
void ctdb_set_error(struct ctdb_context *ctdb, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3);
void ctdb_fatal(struct ctdb_context *ctdb, const char *msg);
--- /dev/null
+/*
+ ctdb database library
+
+ Copyright (C) Andrew Tridgell 2006
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef _CTDB_PROTOCOL_H
+#define _CTDB_PROTOCOL_H
+
+/* location of daemon socket */
+#define CTDB_PATH "/tmp/ctdb.socket"
+
+/* default ctdb port number */
+#define CTDB_PORT 4379
+
+/* we must align packets to ensure ctdb works on all architectures (eg. sparc) */
+#define CTDB_DS_ALIGNMENT 8
+
+
+#define CTDB_NULL_FUNC 0xFF000001
+#define CTDB_FETCH_FUNC 0xFF000002
+
+
+#define CTDB_IMMEDIATE_MIGRATION 0x00000001
+struct ctdb_call {
+ int call_id;
+ TDB_DATA key;
+ TDB_DATA call_data;
+ TDB_DATA reply_data;
+ uint32_t status;
+ uint32_t flags;
+};
+
+/*
+ structure passed to a ctdb call backend function
+*/
+struct ctdb_call_info {
+ TDB_DATA key; /* record key */
+ TDB_DATA record_data; /* current data in the record */
+ TDB_DATA *new_data; /* optionally updated record data */
+ TDB_DATA *call_data; /* optionally passed from caller */
+ TDB_DATA *reply_data; /* optionally returned by function */
+ uint32_t status; /* optional reply status - defaults to zero */
+};
+
+#define CTDB_ERR_INVALID 1
+#define CTDB_ERR_NOMEM 2
+
+/*
+ ctdb flags
+*/
+#define CTDB_FLAG_TORTURE (1<<1)
+
+/*
+ a message handler ID meaning "give me all messages"
+ */
+#define CTDB_SRVID_ALL (~(uint64_t)0)
+
+/*
+ srvid type : RECOVERY
+*/
+#define CTDB_SRVID_RECOVERY 0xF100000000000000LL
+
+/*
+ a message handler ID meaning that the cluster has been reconfigured
+ */
+#define CTDB_SRVID_RECONFIGURE 0xF200000000000000LL
+
+/*
+ a message handler ID meaning that an IP address has been released
+ */
+#define CTDB_SRVID_RELEASE_IP 0xF300000000000000LL
+
+/*
+ a message ID to set the node flags in the recovery daemon
+ */
+#define CTDB_SRVID_SET_NODE_FLAGS 0xF400000000000000LL
+
+/*
+ a message ID to ask the recovery daemon to update the expected node
+ assignment for a public ip
+ */
+#define CTDB_SRVID_RECD_UPDATE_IP 0xF500000000000000LL
+
+/*
+ a message to tell the recovery daemon to fetch a set of records
+ */
+#define CTDB_SRVID_VACUUM_FETCH 0xF700000000000000LL
+
+/*
+ a message to tell the recovery daemon to write a talloc memdump
+ to the log
+ */
+#define CTDB_SRVID_MEM_DUMP 0xF800000000000000LL
+
+/*
+ a message ID to get the recovery daemon to push the node flags out
+ */
+#define CTDB_SRVID_PUSH_NODE_FLAGS 0xF900000000000000LL
+
+/*
+ a message ID to get the recovery daemon to reload the nodes file
+ */
+#define CTDB_SRVID_RELOAD_NODES 0xFA00000000000000LL
+
+/*
+ a message ID to get the recovery daemon to perform a takeover run
+ */
+#define CTDB_SRVID_TAKEOVER_RUN 0xFB00000000000000LL
+
+/* A message id to ask the recovery daemon to temporarily disable the
+ public ip checks
+*/
+#define CTDB_SRVID_DISABLE_IP_CHECK 0xFC00000000000000LL
+
+/* A dummy port used for sending back ipreallocate resposnes to the main
+ daemon
+*/
+#define CTDB_SRVID_TAKEOVER_RUN_RESPONSE 0xFD00000000000000LL
+
+/* A port reserved for samba (top 32 bits)
+ */
+#define CTDB_SRVID_SAMBA_NOTIFY 0xFE00000000000000LL
+
+/* used on the domain socket, send a pdu to the local daemon */
+#define CTDB_CURRENT_NODE 0xF0000001
+/* send a broadcast to all nodes in the cluster, active or not */
+#define CTDB_BROADCAST_ALL 0xF0000002
+/* send a broadcast to all nodes in the current vnn map */
+#define CTDB_BROADCAST_VNNMAP 0xF0000003
+/* send a broadcast to all connected nodes */
+#define CTDB_BROADCAST_CONNECTED 0xF0000004
+
+/* the key used for transaction locking on persistent databases */
+#define CTDB_TRANSACTION_LOCK_KEY "__transaction_lock__"
+
+/* the key used to store persistent db sequence number */
+#define CTDB_DB_SEQNUM_KEY "__db_sequence_number__"
+
+#define MONITOR_SCRIPT_OK 0
+#define MONITOR_SCRIPT_TIMEOUT 1
+
+#define MAX_SCRIPT_NAME 31
+#define MAX_SCRIPT_OUTPUT 511
+struct ctdb_script_wire {
+ char name[MAX_SCRIPT_NAME+1];
+ struct timeval start;
+ struct timeval finished;
+ int32_t status;
+ char output[MAX_SCRIPT_OUTPUT+1];
+};
+
+struct ctdb_scripts_wire {
+ uint32_t num_scripts;
+ struct ctdb_script_wire scripts[1];
+};
+
+/* different calls to event scripts. */
+enum ctdb_eventscript_call {
+ CTDB_EVENT_INIT, /* CTDB starting up: no args */
+ CTDB_EVENT_SETUP, /* CTDB starting up after transport is readdy: no args. */
+ CTDB_EVENT_STARTUP, /* CTDB starting up after initial recovery: no args. */
+ CTDB_EVENT_START_RECOVERY, /* CTDB recovery starting: no args. */
+ CTDB_EVENT_RECOVERED, /* CTDB recovery finished: no args. */
+ CTDB_EVENT_TAKE_IP, /* IP taken: interface, IP address, netmask bits. */
+ CTDB_EVENT_RELEASE_IP, /* IP released: interface, IP address, netmask bits. */
+ CTDB_EVENT_STOPPED, /* This node is stopped: no args. */
+ CTDB_EVENT_MONITOR, /* Please check if service is healthy: no args. */
+ CTDB_EVENT_STATUS, /* Report service status: no args. */
+ CTDB_EVENT_SHUTDOWN, /* CTDB shutting down: no args. */
+ CTDB_EVENT_RELOAD, /* magic */
+ CTDB_EVENT_UPDATE_IP, /* IP updating: old interface, new interface, IP address, netmask bits. */
+ CTDB_EVENT_MAX
+};
+
+/* Mapping from enum to names. */
+extern const char *ctdb_eventscript_call_names[];
+
+/*
+ operation IDs
+*/
+enum ctdb_operation {
+ CTDB_REQ_CALL = 0,
+ CTDB_REPLY_CALL = 1,
+ CTDB_REQ_DMASTER = 2,
+ CTDB_REPLY_DMASTER = 3,
+ CTDB_REPLY_ERROR = 4,
+ CTDB_REQ_MESSAGE = 5,
+ /* #6 removed */
+ CTDB_REQ_CONTROL = 7,
+ CTDB_REPLY_CONTROL = 8,
+ CTDB_REQ_KEEPALIVE = 9,
+};
+
+#define CTDB_MAGIC 0x43544442 /* CTDB */
+#define CTDB_VERSION 1
+
+enum ctdb_controls {CTDB_CONTROL_PROCESS_EXISTS = 0,
+ CTDB_CONTROL_STATISTICS = 1,
+ /* #2 removed */
+ CTDB_CONTROL_PING = 3,
+ CTDB_CONTROL_GETDBPATH = 4,
+ CTDB_CONTROL_GETVNNMAP = 5,
+ CTDB_CONTROL_SETVNNMAP = 6,
+ CTDB_CONTROL_GET_DEBUG = 7,
+ CTDB_CONTROL_SET_DEBUG = 8,
+ CTDB_CONTROL_GET_DBMAP = 9,
+ CTDB_CONTROL_GET_NODEMAPv4 = 10, /* obsolete */
+ CTDB_CONTROL_SET_DMASTER = 11,
+ /* #12 removed */
+ CTDB_CONTROL_PULL_DB = 13,
+ CTDB_CONTROL_PUSH_DB = 14,
+ CTDB_CONTROL_GET_RECMODE = 15,
+ CTDB_CONTROL_SET_RECMODE = 16,
+ CTDB_CONTROL_STATISTICS_RESET = 17,
+ CTDB_CONTROL_DB_ATTACH = 18,
+ CTDB_CONTROL_SET_CALL = 19,
+ CTDB_CONTROL_TRAVERSE_START = 20,
+ CTDB_CONTROL_TRAVERSE_ALL = 21,
+ CTDB_CONTROL_TRAVERSE_DATA = 22,
+ CTDB_CONTROL_REGISTER_SRVID = 23,
+ CTDB_CONTROL_DEREGISTER_SRVID = 24,
+ CTDB_CONTROL_GET_DBNAME = 25,
+ CTDB_CONTROL_ENABLE_SEQNUM = 26,
+ CTDB_CONTROL_UPDATE_SEQNUM = 27,
+ /* #28 removed */
+ CTDB_CONTROL_DUMP_MEMORY = 29,
+ CTDB_CONTROL_GET_PID = 30,
+ CTDB_CONTROL_GET_RECMASTER = 31,
+ CTDB_CONTROL_SET_RECMASTER = 32,
+ CTDB_CONTROL_FREEZE = 33,
+ CTDB_CONTROL_THAW = 34,
+ CTDB_CONTROL_GET_PNN = 35,
+ CTDB_CONTROL_SHUTDOWN = 36,
+ CTDB_CONTROL_GET_MONMODE = 37,
+ /* #38 removed */
+ /* #39 removed */
+ /* #40 removed */
+ /* #41 removed */
+ CTDB_CONTROL_TAKEOVER_IPv4 = 42, /* obsolete */
+ CTDB_CONTROL_RELEASE_IPv4 = 43, /* obsolete */
+ CTDB_CONTROL_TCP_CLIENT = 44,
+ CTDB_CONTROL_TCP_ADD = 45,
+ CTDB_CONTROL_TCP_REMOVE = 46,
+ CTDB_CONTROL_STARTUP = 47,
+ CTDB_CONTROL_SET_TUNABLE = 48,
+ CTDB_CONTROL_GET_TUNABLE = 49,
+ CTDB_CONTROL_LIST_TUNABLES = 50,
+ 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_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_DB_ATTACH_PERSISTENT = 61,
+ CTDB_CONTROL_PERSISTENT_STORE = 62,
+ CTDB_CONTROL_UPDATE_RECORD = 63,
+ CTDB_CONTROL_SEND_GRATIOUS_ARP = 64,
+ CTDB_CONTROL_TRANSACTION_START = 65,
+ CTDB_CONTROL_TRANSACTION_COMMIT = 66,
+ CTDB_CONTROL_WIPE_DATABASE = 67,
+ /* #68 removed */
+ CTDB_CONTROL_UPTIME = 69,
+ CTDB_CONTROL_START_RECOVERY = 70,
+ CTDB_CONTROL_END_RECOVERY = 71,
+ 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_ADD_PUBLIC_IP = 77,
+ CTDB_CONTROL_DEL_PUBLIC_IP = 78,
+ CTDB_CONTROL_RUN_EVENTSCRIPTS = 79,
+ CTDB_CONTROL_GET_CAPABILITIES = 80,
+ CTDB_CONTROL_START_PERSISTENT_UPDATE = 81,
+ CTDB_CONTROL_CANCEL_PERSISTENT_UPDATE= 82,
+ CTDB_CONTROL_TRANS2_COMMIT = 83,
+ CTDB_CONTROL_TRANS2_FINISHED = 84,
+ CTDB_CONTROL_TRANS2_ERROR = 85,
+ CTDB_CONTROL_TRANS2_COMMIT_RETRY = 86,
+ CTDB_CONTROL_RECD_PING = 87,
+ CTDB_CONTROL_RELEASE_IP = 88,
+ CTDB_CONTROL_TAKEOVER_IP = 89,
+ CTDB_CONTROL_GET_PUBLIC_IPS = 90,
+ CTDB_CONTROL_GET_NODEMAP = 91,
+ CTDB_CONTROL_GET_EVENT_SCRIPT_STATUS = 96,
+ 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_STOP_NODE = 101,
+ CTDB_CONTROL_CONTINUE_NODE = 102,
+ CTDB_CONTROL_SET_NATGWSTATE = 103,
+ CTDB_CONTROL_SET_LMASTERROLE = 104,
+ CTDB_CONTROL_SET_RECMASTERROLE = 105,
+ CTDB_CONTROL_ENABLE_SCRIPT = 107,
+ CTDB_CONTROL_DISABLE_SCRIPT = 108,
+ 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_REGISTER_NOTIFY = 114,
+ CTDB_CONTROL_DEREGISTER_NOTIFY = 115,
+ CTDB_CONTROL_TRANS2_ACTIVE = 116,
+ CTDB_CONTROL_GET_LOG = 117,
+ CTDB_CONTROL_CLEAR_LOG = 118,
+ CTDB_CONTROL_TRANS3_COMMIT = 119,
+ CTDB_CONTROL_GET_DB_SEQNUM = 120,
+ CTDB_CONTROL_DB_SET_HEALTHY = 121,
+ CTDB_CONTROL_DB_GET_HEALTH = 122,
+ CTDB_CONTROL_GET_PUBLIC_IP_INFO = 123,
+ CTDB_CONTROL_GET_IFACES = 124,
+ CTDB_CONTROL_SET_IFACE_LINK_STATE = 125,
+};
+
+/*
+ packet structures
+*/
+struct ctdb_req_header {
+ uint32_t length;
+ uint32_t ctdb_magic;
+ uint32_t ctdb_version;
+ uint32_t generation;
+ uint32_t operation;
+ uint32_t destnode;
+ uint32_t srcnode;
+ uint32_t reqid;
+};
+
+struct ctdb_req_call {
+ struct ctdb_req_header hdr;
+ uint32_t flags;
+ uint32_t db_id;
+ uint32_t callid;
+ uint32_t hopcount;
+ uint32_t keylen;
+ uint32_t calldatalen;
+ uint8_t data[1]; /* key[] followed by calldata[] */
+};
+
+struct ctdb_reply_call {
+ struct ctdb_req_header hdr;
+ uint32_t status;
+ uint32_t datalen;
+ uint8_t data[1];
+};
+
+struct ctdb_reply_error {
+ struct ctdb_req_header hdr;
+ uint32_t status;
+ uint32_t msglen;
+ uint8_t msg[1];
+};
+
+struct ctdb_req_dmaster {
+ struct ctdb_req_header hdr;
+ uint32_t db_id;
+ uint64_t rsn;
+ uint32_t dmaster;
+ uint32_t keylen;
+ uint32_t datalen;
+ uint8_t data[1];
+};
+
+struct ctdb_reply_dmaster {
+ struct ctdb_req_header hdr;
+ uint32_t db_id;
+ uint64_t rsn;
+ uint32_t keylen;
+ uint32_t datalen;
+ uint8_t data[1];
+};
+
+struct ctdb_req_message {
+ struct ctdb_req_header hdr;
+ uint64_t srvid;
+ uint32_t datalen;
+ uint8_t data[1];
+};
+
+struct ctdb_req_getdbpath {
+ struct ctdb_req_header hdr;
+ uint32_t db_id;
+};
+
+struct ctdb_reply_getdbpath {
+ struct ctdb_req_header hdr;
+ uint32_t datalen;
+ uint8_t data[1];
+};
+
+struct ctdb_req_control {
+ struct ctdb_req_header hdr;
+ uint32_t opcode;
+ uint64_t srvid;
+ uint32_t client_id;
+#define CTDB_CTRL_FLAG_NOREPLY 1
+#define CTDB_CTRL_FLAG_OPCODE_SPECIFIC 0xFFFF0000
+ uint32_t flags;
+ uint32_t datalen;
+ uint8_t data[1];
+};
+
+struct ctdb_reply_control {
+ struct ctdb_req_header hdr;
+ int32_t status;
+ uint32_t datalen;
+ uint32_t errorlen;
+ uint8_t data[1];
+};
+
+struct ctdb_req_keepalive {
+ struct ctdb_req_header hdr;
+};
+
+
+/* types of failures possible from TRANS2_COMMIT */
+enum ctdb_trans2_commit_error {
+ CTDB_TRANS2_COMMIT_SUCCESS=0, /* all nodes committed successfully */
+ CTDB_TRANS2_COMMIT_TIMEOUT=1, /* at least one node timed out */
+ CTDB_TRANS2_COMMIT_ALLFAIL=2, /* all nodes failed the commit */
+ CTDB_TRANS2_COMMIT_SOMEFAIL=3 /* some nodes failed the commit, some allowed it */
+};
+
+/*
+ the extended header for records in the ltdb
+*/
+struct ctdb_ltdb_header {
+ uint64_t rsn;
+ uint32_t dmaster;
+ uint32_t laccessor;
+ uint32_t lacount;
+};
+#endif
#include "system/network.h"
#include "tdb.h"
#include "idtree.h"
-#include "ctdb.h"
+#include "ctdb_client.h"
typedef bool BOOL;
%{_mandir}/man1/ctdb.1.gz
%{_mandir}/man1/ctdbd.1.gz
%{_mandir}/man1/onnode.1.gz
-%{_includedir}/ctdb.h
+%{_includedir}/ctdb_client.h
+%{_includedir}/ctdb_protocol.h
%{_includedir}/ctdb_private.h
%{_libdir}/pkgconfig/ctdb.pc
#include "system/network.h"
#include "system/filesys.h"
#include "system/wait.h"
-#include "../include/ctdb.h"
+#include "../include/ctdb_client.h"
#include "../include/ctdb_private.h"
#include "system/network.h"
#include "system/filesys.h"
#include "system/wait.h"
-#include "../include/ctdb.h"
+#include "../include/ctdb_client.h"
#include "../include/ctdb_private.h"
#include <sys/socket.h>
#include "includes.h"
#include "lib/events/events.h"
-#include "../include/ctdb.h"
+#include "../include/ctdb_client.h"
#include "../include/ctdb_private.h"
#include "system/syslog.h"
#include "system/time.h"
#include "system/wait.h"
#include "popt.h"
#include "cmdline.h"
-#include "../include/ctdb.h"
+#include "../include/ctdb_client.h"
#include "../include/ctdb_private.h"
#include "db_wrap.h"
#include "dlinklist.h"
#include "system/filesys.h"
#include "popt.h"
#include "cmdline.h"
-#include "ctdb.h"
+#include "ctdb_client.h"
#include "ctdb_private.h"
#include <sys/time.h>
#include "system/locale.h"
#include "popt.h"
#include "cmdline.h"
-#include "../include/ctdb.h"
+#include "../include/ctdb_client.h"
#include "../include/ctdb_private.h"
#include "../common/rb_tree.h"
#include "db_wrap.h"
#include "lib/events/events.h"
#include "system/filesys.h"
#include "system/network.h"
-#include "../include/ctdb.h"
+#include "../include/ctdb_client.h"
#include "../include/ctdb_private.h"
#include "../common/rb_tree.h"
#include "db_wrap.h"