summaryrefslogtreecommitdiffstats
path: root/ctdb/include
diff options
context:
space:
mode:
authorroot <root@rcn1.VSOFS1.COM>2009-05-06 07:32:25 +1000
committerroot <root@rcn1.VSOFS1.COM>2009-05-06 07:32:25 +1000
commitaf25fa38f317fdbc425bfd139ea9b3a33d47f5d4 (patch)
treeac3580d9a84f3431aaf40ddb5cfe2b5c5508829c /ctdb/include
parent4cef9994a53bf117f3c7c58021522256962a5f28 (diff)
fixed a problem with clients disconnecting during a traverse
When a client (such as smbstatus) is killed, it may have outstanding traverse children on remote nodes. We need to catch the client disconnect in ctdbd and send a control to all nodes telling them to kill those outstanding traverse children. (This used to be ctdb commit f2fb2df4619a14f7f6c11f9132ee7d793028042c)
Diffstat (limited to 'ctdb/include')
-rw-r--r--ctdb/include/ctdb_private.h6
1 files changed, 5 insertions, 1 deletions
diff --git a/ctdb/include/ctdb_private.h b/ctdb/include/ctdb_private.h
index eac27f7ed5..f37560abe0 100644
--- a/ctdb/include/ctdb_private.h
+++ b/ctdb/include/ctdb_private.h
@@ -430,6 +430,7 @@ struct ctdb_db_context {
struct ctdb_registered_call *calls; /* list of registered calls */
uint32_t seqnum;
struct timed_event *te;
+ struct ctdb_traverse_local_handle *traverse;
};
@@ -560,6 +561,7 @@ enum ctdb_controls {CTDB_CONTROL_PROCESS_EXISTS = 0,
CTDB_CONTROL_EVENT_SCRIPT_STOP = 94,
CTDB_CONTROL_EVENT_SCRIPT_FINISHED = 95,
CTDB_CONTROL_GET_EVENT_SCRIPT_STATUS = 96,
+ CTDB_CONTROL_TRAVERSE_KILL = 97,
};
/*
@@ -1118,9 +1120,11 @@ struct ctdb_client_call_state {
int32_t ctdb_control_traverse_start(struct ctdb_context *ctdb, TDB_DATA indata,
- TDB_DATA *outdata, uint32_t srcnode);
+ TDB_DATA *outdata, uint32_t srcnode, uint32_t client_id);
int32_t ctdb_control_traverse_all(struct ctdb_context *ctdb, TDB_DATA data, TDB_DATA *outdata);
int32_t ctdb_control_traverse_data(struct ctdb_context *ctdb, TDB_DATA data, TDB_DATA *outdata);
+int32_t ctdb_control_traverse_kill(struct ctdb_context *ctdb, TDB_DATA indata,
+ TDB_DATA *outdata, uint32_t srcnode);
int ctdb_dispatch_message(struct ctdb_context *ctdb, uint64_t srvid, TDB_DATA data);