[SCM] Samba Shared Repository - branch master updated
Amitay Isaacs
amitay at samba.org
Sun Dec 18 17:11:04 UTC 2016
The branch, master has been updated
via fc28a74 ctdb-daemon: Remove ctdb_event_helper
via 69b1ae3 ctdb-daemon: Switch to using event daemon
via bcd7444 ctdb-daemon: Add functions to talk to event daemon
via 21cac65 ctdb-daemon: Refactor check for valid events during recovery
via c9a0f30 ctdb-protocol: Deprecate eventscript controls
via 9272cd4 ctdb-protocol: Drop marshaling for eventscript controls
via 3c74c05 ctdb-client: Drop client code for eventscript controls
via def5f4b ctdb-daemon: Drop implementation of eventscript controls
via b2d1cea ctdb-tool: Drop disablescript, enablescript and eventscript commands
via a652b5c ctdb-tool: Add new command "event" to ctdb tool
via ca0894e ctdb-tests: Add tests for event daemon
via 9cbdb40 ctdb-tool: Add helper for talking to event daemon
via b678dfb ctdb-client: Add client api for eventd communication
via 950110f ctdb-eventd: Add event script handling daemon
via 7e8ccef ctdb-protocol: Add marshalling for eventd protocol
via c0c3433 ctdb-protocol: Add data types for eventd communication
via 7ae530c ctdb-common: Add sock_daemon abstraction
via 75a25d1 ctdb-common: Add generic socket I/O
via f0ba41e ctdb-common: Add run_proc abstraction
via 4d3c19d ctdb-protocol: Add marshalling for int32_t
via a6ee085 ctdb-protocol: Fix marshalling of string with length
via b2b8f1e ctdb-tool: Improve error reporting if helper execution fails
via 590acdc ctdb-tool: Allow passing multiple command-line arguments to helper
from f09f5ae selftest: make sure we always export KRB5CCNAME
https://git.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit fc28a74254d0263f02d008dcd2e2e6c9d03ccea3
Author: Amitay Isaacs <amitay at gmail.com>
Date: Sun Sep 18 00:24:47 2016 +1000
ctdb-daemon: Remove ctdb_event_helper
Signed-off-by: Amitay Isaacs <amitay at gmail.com>
Reviewed-by: Martin Schwenke <martin at meltin.net>
Autobuild-User(master): Amitay Isaacs <amitay at samba.org>
Autobuild-Date(master): Sun Dec 18 18:10:50 CET 2016 on sn-devel-144
commit 69b1ae34231f20d45bff5bdd50c0a2adfc87f90b
Author: Amitay Isaacs <amitay at gmail.com>
Date: Fri Sep 16 20:06:07 2016 +1000
ctdb-daemon: Switch to using event daemon
Signed-off-by: Amitay Isaacs <amitay at gmail.com>
Reviewed-by: Martin Schwenke <martin at meltin.net>
commit bcd7444c57447983f571cbbe3ceed7d5558040e9
Author: Amitay Isaacs <amitay at gmail.com>
Date: Sat Aug 27 17:26:28 2016 +1000
ctdb-daemon: Add functions to talk to event daemon
Signed-off-by: Amitay Isaacs <amitay at gmail.com>
Reviewed-by: Martin Schwenke <martin at meltin.net>
commit 21cac65b67b2f9880586404f6492260541f05e30
Author: Amitay Isaacs <amitay at gmail.com>
Date: Fri Sep 16 18:44:37 2016 +1000
ctdb-daemon: Refactor check for valid events during recovery
Signed-off-by: Amitay Isaacs <amitay at gmail.com>
Reviewed-by: Martin Schwenke <martin at meltin.net>
commit c9a0f3015d095946fc91223e5838f3d6c3d4d1cb
Author: Amitay Isaacs <amitay at gmail.com>
Date: Mon Sep 12 11:33:02 2016 +1000
ctdb-protocol: Deprecate eventscript controls
Signed-off-by: Amitay Isaacs <amitay at gmail.com>
Reviewed-by: Martin Schwenke <martin at meltin.net>
commit 9272cd42aac96f69b574319ffbe5a2acb13abd2e
Author: Amitay Isaacs <amitay at gmail.com>
Date: Wed Nov 23 12:28:24 2016 +1100
ctdb-protocol: Drop marshaling for eventscript controls
Signed-off-by: Amitay Isaacs <amitay at gmail.com>
Reviewed-by: Martin Schwenke <martin at meltin.net>
commit 3c74c05c7519ebc19f55316b7a89da86e28f6906
Author: Amitay Isaacs <amitay at gmail.com>
Date: Mon Sep 12 11:32:20 2016 +1000
ctdb-client: Drop client code for eventscript controls
Signed-off-by: Amitay Isaacs <amitay at gmail.com>
Reviewed-by: Martin Schwenke <martin at meltin.net>
commit def5f4b1bfeeddba97141a3d3c08ac5a1187ce32
Author: Amitay Isaacs <amitay at gmail.com>
Date: Mon Sep 12 11:25:11 2016 +1000
ctdb-daemon: Drop implementation of eventscript controls
Following controls are now implemented by event daemon
- RUN_EVENTSCRIPTS
- GET_EVENT_SCRIPT_STATUS
- ENABLE_SCRIPT
- DISABLE_SCRIPT
Signed-off-by: Amitay Isaacs <amitay at gmail.com>
Reviewed-by: Martin Schwenke <martin at meltin.net>
commit b2d1cea1f3b5b833c4c25b18e4d94e66d2950cbd
Author: Amitay Isaacs <amitay at gmail.com>
Date: Mon Sep 12 11:31:35 2016 +1000
ctdb-tool: Drop disablescript, enablescript and eventscript commands
These commands are now replaced with ctdb event ...
ctdb scriptstatus is maintained for backward compatibility.
Signed-off-by: Amitay Isaacs <amitay at gmail.com>
Reviewed-by: Martin Schwenke <martin at meltin.net>
commit a652b5c3515c8cf611f633b95ac894f60e6f4977
Author: Amitay Isaacs <amitay at gmail.com>
Date: Mon Nov 21 14:52:41 2016 +1100
ctdb-tool: Add new command "event" to ctdb tool
This command covers all the commands to event daemon.
ctdb event run <event>
ctdb event status [<event>] [lastrun|lastfail|lastpass]
ctdb event script list
ctdb event script enable <script>
ctdb event script disable <script>
Signed-off-by: Amitay Isaacs <amitay at gmail.com>
Reviewed-by: Martin Schwenke <martin at meltin.net>
commit ca0894e9325e1687a843bc0a79e100a8adc986d4
Author: Amitay Isaacs <amitay at gmail.com>
Date: Tue Sep 6 18:53:02 2016 +1000
ctdb-tests: Add tests for event daemon
Signed-off-by: Amitay Isaacs <amitay at gmail.com>
Reviewed-by: Martin Schwenke <martin at meltin.net>
commit 9cbdb406129343dac30883f43bfe1e8e046d6041
Author: Amitay Isaacs <amitay at gmail.com>
Date: Mon Nov 21 17:39:02 2016 +1100
ctdb-tool: Add helper for talking to event daemon
Signed-off-by: Amitay Isaacs <amitay at gmail.com>
Reviewed-by: Martin Schwenke <martin at meltin.net>
commit b678dfb3a4b2f68c613946217b67598560280a95
Author: Amitay Isaacs <amitay at gmail.com>
Date: Thu Sep 1 01:07:47 2016 +1000
ctdb-client: Add client api for eventd communication
Signed-off-by: Amitay Isaacs <amitay at gmail.com>
Reviewed-by: Martin Schwenke <martin at meltin.net>
commit 950110f3c19342def662f19f76c1ac8353943341
Author: Amitay Isaacs <amitay at gmail.com>
Date: Sat Aug 27 17:26:52 2016 +1000
ctdb-eventd: Add event script handling daemon
Signed-off-by: Amitay Isaacs <amitay at gmail.com>
Reviewed-by: Martin Schwenke <martin at meltin.net>
commit 7e8ccef49b8cbc23a3b7317dd60e0f9de288b359
Author: Amitay Isaacs <amitay at gmail.com>
Date: Wed Aug 31 17:02:55 2016 +1000
ctdb-protocol: Add marshalling for eventd protocol
Signed-off-by: Amitay Isaacs <amitay at gmail.com>
Reviewed-by: Martin Schwenke <martin at meltin.net>
commit c0c34337d93aca4d683bbe273c67a2303419312d
Author: Amitay Isaacs <amitay at gmail.com>
Date: Wed Aug 31 15:49:27 2016 +1000
ctdb-protocol: Add data types for eventd communication
Signed-off-by: Amitay Isaacs <amitay at gmail.com>
Reviewed-by: Martin Schwenke <martin at meltin.net>
commit 7ae530c2ab4cf37a51f32bcc6c94628f62493305
Author: Amitay Isaacs <amitay at gmail.com>
Date: Sat Sep 3 23:27:23 2016 +1000
ctdb-common: Add sock_daemon abstraction
Signed-off-by: Amitay Isaacs <amitay at gmail.com>
Reviewed-by: Martin Schwenke <martin at meltin.net>
commit 75a25d13310c53328f2b99f856abc8c5d023bc52
Author: Amitay Isaacs <amitay at gmail.com>
Date: Fri Sep 16 16:13:18 2016 +1000
ctdb-common: Add generic socket I/O
This is a generic socket read/write to be used in the ctdb daemon.
It is based on ctdb_io.c and comm.c.
Signed-off-by: Amitay Isaacs <amitay at gmail.com>
Reviewed-by: Martin Schwenke <martin at meltin.net>
commit f0ba41e1c5a9b4000b918211fc16c3545d2133ab
Author: Amitay Isaacs <amitay at gmail.com>
Date: Tue Aug 30 17:33:42 2016 +1000
ctdb-common: Add run_proc abstraction
Signed-off-by: Amitay Isaacs <amitay at gmail.com>
Reviewed-by: Martin Schwenke <martin at meltin.net>
commit 4d3c19d14e938672ca403e1546b131a5e5032aac
Author: Amitay Isaacs <amitay at gmail.com>
Date: Wed Aug 31 15:46:45 2016 +1000
ctdb-protocol: Add marshalling for int32_t
Signed-off-by: Amitay Isaacs <amitay at gmail.com>
Reviewed-by: Martin Schwenke <martin at meltin.net>
commit a6ee085845c92d4b8fe26ee4dd75836212930922
Author: Amitay Isaacs <amitay at gmail.com>
Date: Wed Aug 31 01:33:38 2016 +1000
ctdb-protocol: Fix marshalling of string with length
Signed-off-by: Amitay Isaacs <amitay at gmail.com>
Reviewed-by: Martin Schwenke <martin at meltin.net>
commit b2b8f1eaed4a50ad2bcd391fef3b66a1ff6e9bfa
Author: Amitay Isaacs <amitay at gmail.com>
Date: Mon Nov 21 17:38:18 2016 +1100
ctdb-tool: Improve error reporting if helper execution fails
Signed-off-by: Amitay Isaacs <amitay at gmail.com>
Reviewed-by: Martin Schwenke <martin at meltin.net>
commit 590acdc5294eb12259b0112b230418faab575edb
Author: Amitay Isaacs <amitay at gmail.com>
Date: Mon Nov 21 14:36:04 2016 +1100
ctdb-tool: Allow passing multiple command-line arguments to helper
Signed-off-by: Amitay Isaacs <amitay at gmail.com>
Reviewed-by: Martin Schwenke <martin at meltin.net>
-----------------------------------------------------------------------
Summary of changes:
ctdb/client/client.h | 88 +-
ctdb/client/client_control_sync.c | 118 --
ctdb/client/client_event.c | 597 ++++++++
ctdb/client/ctdb_client.c | 80 --
ctdb/common/run_proc.c | 527 ++++++++
ctdb/common/run_proc.h | 99 ++
ctdb/common/sock_daemon.c | 831 ++++++++++++
ctdb/common/sock_daemon.h | 204 +++
ctdb/common/sock_io.c | 309 +++++
ctdb/common/sock_io.h | 38 +
ctdb/doc/ctdb.1.xml | 194 ++-
ctdb/include/ctdb_client.h | 11 -
ctdb/include/ctdb_private.h | 22 +-
ctdb/packaging/RPM/ctdb.spec.in | 3 +-
ctdb/protocol/protocol.h | 91 +-
ctdb/protocol/protocol_api.h | 40 +-
ctdb/protocol/protocol_client.c | 90 --
ctdb/protocol/protocol_control.c | 74 -
ctdb/protocol/protocol_event.c | 848 ++++++++++++
ctdb/protocol/protocol_private.h | 5 +
ctdb/protocol/protocol_types.c | 36 +-
ctdb/server/ctdb_control.c | 13 +-
ctdb/server/ctdb_daemon.c | 6 +
ctdb/server/ctdb_event_helper.c | 159 ---
ctdb/server/ctdb_eventd.c | 1802 +++++++++++++++++++++++++
ctdb/server/eventscript.c | 1396 +++++++------------
ctdb/tests/complex/35_cifs_external_tickle.sh | 8 +-
ctdb/tests/complex/90_debug_hung_script.sh | 11 +-
ctdb/tests/cunit/protocol_test_002.sh | 18 +
ctdb/tests/cunit/run_proc_001.sh | 140 ++
ctdb/tests/cunit/sock_daemon_test_001.sh | 44 +
ctdb/tests/eventd/README | 1 +
ctdb/tests/eventd/eventd_001.sh | 31 +
ctdb/tests/eventd/eventd_002.sh | 54 +
ctdb/tests/eventd/eventd_003.sh | 54 +
ctdb/tests/eventd/eventd_004.sh | 45 +
ctdb/tests/eventd/eventd_005.sh | 36 +
ctdb/tests/eventd/eventd_006.sh | 37 +
ctdb/tests/eventd/eventd_007.sh | 37 +
ctdb/tests/eventd/eventd_011.sh | 64 +
ctdb/tests/eventd/eventd_012.sh | 53 +
ctdb/tests/eventd/eventd_013.sh | 53 +
ctdb/tests/eventd/eventd_014.sh | 52 +
ctdb/tests/eventd/eventd_021.sh | 40 +
ctdb/tests/eventd/eventd_022.sh | 41 +
ctdb/tests/eventd/eventd_023.sh | 38 +
ctdb/tests/eventd/eventd_024.sh | 47 +
ctdb/tests/eventd/eventd_031.sh | 65 +
ctdb/tests/eventd/eventd_032.sh | 124 ++
ctdb/tests/eventd/eventd_033.sh | 124 ++
ctdb/tests/eventd/eventd_041.sh | 48 +
ctdb/tests/eventd/eventd_042.sh | 48 +
ctdb/tests/eventd/eventd_043.sh | 48 +
ctdb/tests/eventd/eventd_051.sh | 23 +
ctdb/tests/eventd/scripts/local.sh | 137 ++
ctdb/tests/run_tests.sh | 2 +-
ctdb/tests/simple/60_recoverd_missing_ip.sh | 4 +-
ctdb/tests/simple/scripts/local_daemons.bash | 3 +-
ctdb/tests/src/protocol_client_test.c | 414 +++++-
ctdb/tests/src/protocol_types_test.c | 138 ++
ctdb/tests/src/run_proc_test.c | 105 ++
ctdb/tests/src/sock_daemon_test.c | 632 +++++++++
ctdb/tools/ctdb.c | 334 ++---
ctdb/tools/ctdb_event.c | 532 ++++++++
ctdb/wscript | 37 +-
65 files changed, 9500 insertions(+), 1903 deletions(-)
create mode 100644 ctdb/client/client_event.c
create mode 100644 ctdb/common/run_proc.c
create mode 100644 ctdb/common/run_proc.h
create mode 100644 ctdb/common/sock_daemon.c
create mode 100644 ctdb/common/sock_daemon.h
create mode 100644 ctdb/common/sock_io.c
create mode 100644 ctdb/common/sock_io.h
create mode 100644 ctdb/protocol/protocol_event.c
delete mode 100644 ctdb/server/ctdb_event_helper.c
create mode 100644 ctdb/server/ctdb_eventd.c
create mode 100755 ctdb/tests/cunit/run_proc_001.sh
create mode 100755 ctdb/tests/cunit/sock_daemon_test_001.sh
create mode 100644 ctdb/tests/eventd/README
create mode 100755 ctdb/tests/eventd/eventd_001.sh
create mode 100755 ctdb/tests/eventd/eventd_002.sh
create mode 100755 ctdb/tests/eventd/eventd_003.sh
create mode 100755 ctdb/tests/eventd/eventd_004.sh
create mode 100755 ctdb/tests/eventd/eventd_005.sh
create mode 100755 ctdb/tests/eventd/eventd_006.sh
create mode 100755 ctdb/tests/eventd/eventd_007.sh
create mode 100755 ctdb/tests/eventd/eventd_011.sh
create mode 100755 ctdb/tests/eventd/eventd_012.sh
create mode 100755 ctdb/tests/eventd/eventd_013.sh
create mode 100755 ctdb/tests/eventd/eventd_014.sh
create mode 100755 ctdb/tests/eventd/eventd_021.sh
create mode 100755 ctdb/tests/eventd/eventd_022.sh
create mode 100755 ctdb/tests/eventd/eventd_023.sh
create mode 100755 ctdb/tests/eventd/eventd_024.sh
create mode 100755 ctdb/tests/eventd/eventd_031.sh
create mode 100755 ctdb/tests/eventd/eventd_032.sh
create mode 100755 ctdb/tests/eventd/eventd_033.sh
create mode 100755 ctdb/tests/eventd/eventd_041.sh
create mode 100755 ctdb/tests/eventd/eventd_042.sh
create mode 100755 ctdb/tests/eventd/eventd_043.sh
create mode 100755 ctdb/tests/eventd/eventd_051.sh
create mode 100644 ctdb/tests/eventd/scripts/local.sh
create mode 100644 ctdb/tests/src/run_proc_test.c
create mode 100644 ctdb/tests/src/sock_daemon_test.c
create mode 100644 ctdb/tools/ctdb_event.c
Changeset truncated at 500 lines:
diff --git a/ctdb/client/client.h b/ctdb/client/client.h
index ea41cbe..f6d3fd3 100644
--- a/ctdb/client/client.h
+++ b/ctdb/client/client.h
@@ -452,11 +452,6 @@ int ctdb_ctrl_del_public_ip(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
int destnode, struct timeval timeout,
struct ctdb_addr_info *addr_info);
-int ctdb_ctrl_run_eventscripts(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
- struct ctdb_client_context *client,
- int destnode, struct timeval timeout,
- const char *event);
-
int ctdb_ctrl_get_capabilities(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
struct ctdb_client_context *client,
int destnode, struct timeval timeout,
@@ -482,13 +477,6 @@ int ctdb_ctrl_get_nodemap(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
int destnode, struct timeval timeout,
struct ctdb_node_map **nodemap);
-int ctdb_ctrl_get_event_script_status(TALLOC_CTX *mem_ctx,
- struct tevent_context *ev,
- struct ctdb_client_context *client,
- int destnode, struct timeval timeout,
- enum ctdb_event event,
- struct ctdb_script_list **slist);
-
int ctdb_ctrl_traverse_kill(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
struct ctdb_client_context *client,
int destnode, struct timeval timeout,
@@ -517,16 +505,6 @@ int ctdb_ctrl_set_recmasterrole(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
int destnode, struct timeval timeout,
uint32_t recmaster_role);
-int ctdb_ctrl_enable_script(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
- struct ctdb_client_context *client,
- int destnode, struct timeval timeout,
- const char *script);
-
-int ctdb_ctrl_disable_script(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
- struct ctdb_client_context *client,
- int destnode, struct timeval timeout,
- const char *script);
-
int ctdb_ctrl_set_ban_state(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
struct ctdb_client_context *client,
int destnode, struct timeval timeout,
@@ -846,4 +824,70 @@ int ctdb_server_id_exists(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
struct ctdb_client_context *client,
struct ctdb_server_id *sid, bool *exists);
+/* from client/client_event.c */
+
+struct ctdb_event_context;
+
+int ctdb_event_init(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+ const char *sockpath, struct ctdb_event_context **out);
+
+void ctdb_event_set_disconnect_callback(struct ctdb_event_context *eclient,
+ ctdb_client_callback_func_t callback,
+ void *private_data);
+
+struct tevent_req *ctdb_event_msg_send(TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ struct ctdb_event_context *eclient,
+ struct ctdb_event_request *request);
+
+bool ctdb_event_msg_recv(struct tevent_req *req, int *perr,
+ TALLOC_CTX *mem_ctx,
+ struct ctdb_event_reply **reply);
+
+struct tevent_req *ctdb_event_run_send(TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ struct ctdb_event_context *eclient,
+ enum ctdb_event event,
+ uint32_t timeout, const char *arg_str);
+
+bool ctdb_event_run_recv(struct tevent_req *req, int *perr, int32_t *result);
+
+struct tevent_req *ctdb_event_status_send(TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ struct ctdb_event_context *eclient,
+ enum ctdb_event event,
+ enum ctdb_event_status_state state);
+
+bool ctdb_event_status_recv(struct tevent_req *req, int *perr,
+ int32_t *result, int *event_result,
+ TALLOC_CTX *mem_ctx,
+ struct ctdb_script_list **script_list);
+
+struct tevent_req *ctdb_event_script_list_send(
+ TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ struct ctdb_event_context *eclient);
+
+bool ctdb_event_script_list_recv(struct tevent_req *req, int *perr,
+ int32_t *result, TALLOC_CTX *mem_ctx,
+ struct ctdb_script_list **script_list);
+
+struct tevent_req *ctdb_event_script_enable_send(
+ TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ struct ctdb_event_context *eclient,
+ const char *script_name);
+
+bool ctdb_event_script_enable_recv(struct tevent_req *req, int *perr,
+ int32_t *result);
+
+struct tevent_req *ctdb_event_script_disable_send(
+ TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ struct ctdb_event_context *eclient,
+ const char *script_name);
+
+bool ctdb_event_script_disable_recv(struct tevent_req *req, int *perr,
+ int32_t *result);
+
#endif /* __CTDB_CLIENT_H__ */
diff --git a/ctdb/client/client_control_sync.c b/ctdb/client/client_control_sync.c
index ac453b0..d59767b 100644
--- a/ctdb/client/client_control_sync.c
+++ b/ctdb/client/client_control_sync.c
@@ -1437,35 +1437,6 @@ int ctdb_ctrl_del_public_ip(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
return 0;
}
-int ctdb_ctrl_run_eventscripts(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
- struct ctdb_client_context *client,
- int destnode, struct timeval timeout,
- const char *event)
-{
- struct ctdb_req_control request;
- struct ctdb_reply_control *reply;
- int ret;
-
- ctdb_req_control_run_eventscripts(&request, event);
- ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
- &request, &reply);
- if (ret != 0) {
- DEBUG(DEBUG_ERR,
- ("Control RUN_EVENTSCRIPTS failed to node %u, ret=%d\n",
- destnode, ret));
- return ret;
- }
-
- ret = ctdb_reply_control_run_eventscripts(reply);
- if (ret != 0) {
- DEBUG(DEBUG_ERR,
- ("Control RUN_EVENTSCRIPTS failed, ret=%d\n", ret));
- return ret;
- }
-
- return 0;
-}
-
int ctdb_ctrl_get_capabilities(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
struct ctdb_client_context *client,
int destnode, struct timeval timeout,
@@ -1611,37 +1582,6 @@ int ctdb_ctrl_get_nodemap(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
return 0;
}
-int ctdb_ctrl_get_event_script_status(TALLOC_CTX *mem_ctx,
- struct tevent_context *ev,
- struct ctdb_client_context *client,
- int destnode, struct timeval timeout,
- enum ctdb_event event,
- struct ctdb_script_list **slist)
-{
- struct ctdb_req_control request;
- struct ctdb_reply_control *reply;
- int ret;
-
- ctdb_req_control_get_event_script_status(&request, event);
- ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
- &request, &reply);
- if (ret != 0) {
- DEBUG(DEBUG_ERR,
- ("Control GET_EVENT_SCRIPT_STATUS failed to node %u, ret=%d\n",
- destnode, ret));
- return ret;
- }
-
- ret = ctdb_reply_control_get_event_script_status(reply, mem_ctx, slist);
- if (ret != 0) {
- DEBUG(DEBUG_ERR,
- ("Control GET_EVENT_SCRIPT_STATUS failed, ret=%d\n", ret));
- return ret;
- }
-
- return 0;
-}
-
int ctdb_ctrl_traverse_kill(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
struct ctdb_client_context *client,
int destnode, struct timeval timeout,
@@ -1814,64 +1754,6 @@ int ctdb_ctrl_set_recmasterrole(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
return 0;
}
-int ctdb_ctrl_enable_script(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
- struct ctdb_client_context *client,
- int destnode, struct timeval timeout,
- const char *script)
-{
- struct ctdb_req_control request;
- struct ctdb_reply_control *reply;
- int ret;
-
- ctdb_req_control_enable_script(&request, script);
- ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
- &request, &reply);
- if (ret != 0) {
- DEBUG(DEBUG_ERR,
- ("Control ENABLE_SCRIPT failed to node %u, ret=%d\n",
- destnode, ret));
- return ret;
- }
-
- ret = ctdb_reply_control_enable_script(reply);
- if (ret != 0) {
- DEBUG(DEBUG_ERR,
- ("Control ENABLE_SCRIPT failed, ret=%d\n", ret));
- return ret;
- }
-
- return 0;
-}
-
-int ctdb_ctrl_disable_script(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
- struct ctdb_client_context *client,
- int destnode, struct timeval timeout,
- const char *script)
-{
- struct ctdb_req_control request;
- struct ctdb_reply_control *reply;
- int ret;
-
- ctdb_req_control_disable_script(&request, script);
- ret = ctdb_client_control(mem_ctx, ev, client, destnode, timeout,
- &request, &reply);
- if (ret != 0) {
- DEBUG(DEBUG_ERR,
- ("Control DISABLE_SCRIPT failed to node %u, ret=%d\n",
- destnode, ret));
- return ret;
- }
-
- ret = ctdb_reply_control_disable_script(reply);
- if (ret != 0) {
- DEBUG(DEBUG_ERR,
- ("Control DISABLE_SCRIPT failed, ret=%d\n", ret));
- return ret;
- }
-
- return 0;
-}
-
int ctdb_ctrl_set_ban_state(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
struct ctdb_client_context *client,
int destnode, struct timeval timeout,
diff --git a/ctdb/client/client_event.c b/ctdb/client/client_event.c
new file mode 100644
index 0000000..6397259
--- /dev/null
+++ b/ctdb/client/client_event.c
@@ -0,0 +1,597 @@
+/*
+ Eventd client api
+
+ Copyright (C) Amitay Isaacs 2016
+
+ 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/>.
+*/
+
+#include "replace.h"
+#include "system/filesys.h"
+#include "system/network.h"
+
+#include <talloc.h>
+#include <tevent.h>
+
+#include "lib/util/debug.h"
+#include "lib/util/tevent_unix.h"
+
+#include "common/logging.h"
+#include "common/reqid.h"
+#include "common/comm.h"
+
+#include "protocol/protocol_api.h"
+
+#include "client/client.h"
+
+struct ctdb_event_context {
+ struct reqid_context *idr;
+ struct comm_context *comm;
+ int fd;
+
+ ctdb_client_callback_func_t callback;
+ void *private_data;
+};
+
+static int ctdb_event_connect(struct ctdb_event_context *eclient,
+ struct tevent_context *ev,
+ const char *sockpath);
+
+static int ctdb_event_context_destructor(struct ctdb_event_context *eclient);
+
+int ctdb_event_init(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+ const char *sockpath, struct ctdb_event_context **out)
+{
+ struct ctdb_event_context *eclient;
+ int ret;
+
+ eclient = talloc_zero(mem_ctx, struct ctdb_event_context);
+ if (eclient == NULL) {
+ DEBUG(DEBUG_ERR, (__location__ " memory allocation error\n"));
+ return ENOMEM;
+ }
+
+ ret = reqid_init(eclient, INT_MAX-200, &eclient->idr);
+ if (ret != 0) {
+ DEBUG(DEBUG_ERR, ("reqid_init() failed, ret=%d\n", ret));
+ talloc_free(eclient);
+ return ret;
+ }
+
+ eclient->fd = -1;
+
+ ret = ctdb_event_connect(eclient, ev, sockpath);
+ if (ret != 0) {
+ talloc_free(eclient);
+ return ret;
+ }
+
+ talloc_set_destructor(eclient, ctdb_event_context_destructor);
+
+ *out = eclient;
+ return 0;
+}
+
+static int ctdb_event_context_destructor(struct ctdb_event_context *eclient)
+{
+ if (eclient->fd != -1) {
+ close(eclient->fd);
+ eclient->fd = -1;
+ }
+ return 0;
+}
+
+static void event_read_handler(uint8_t *buf, size_t buflen,
+ void *private_data);
+static void event_dead_handler(void *private_data);
+
+static int ctdb_event_connect(struct ctdb_event_context *eclient,
+ struct tevent_context *ev, const char *sockpath)
+{
+ struct sockaddr_un addr;
+ size_t len;
+ int fd, ret;
+
+ if (sockpath == NULL) {
+ DEBUG(DEBUG_ERR, ("socket path cannot be NULL\n"));
+ return EINVAL;
+ }
+
+ memset(&addr, 0, sizeof(addr));
+ addr.sun_family = AF_UNIX;
+ len = strlcpy(addr.sun_path, sockpath, sizeof(addr.sun_path));
+ if (len >= sizeof(addr.sun_path)) {
+ DEBUG(DEBUG_ERR, ("socket path too long, len=%zu\n",
+ strlen(sockpath)));
+ return ENAMETOOLONG;
+ }
+
+ fd = socket(AF_UNIX, SOCK_STREAM, 0);
+ if (fd == -1) {
+ ret = errno;
+ DEBUG(DEBUG_ERR, ("socket() failed, errno=%d\n", ret));
+ return ret;
+ }
+
+ ret = connect(fd, (struct sockaddr *)&addr, sizeof(addr));
+ if (ret == -1) {
+ ret = errno;
+ DEBUG(DEBUG_ERR, ("connect() failed, errno=%d\n", ret));
+ close(fd);
+ return ret;
+ }
+ eclient->fd = fd;
+
+ ret = comm_setup(eclient, ev, fd, event_read_handler, eclient,
+ event_dead_handler, eclient, &eclient->comm);
+ if (ret != 0) {
+ DEBUG(DEBUG_ERR, ("comm_setup() failed, ret=%d\n", ret));
+ close(fd);
+ eclient->fd = -1;
+ return ret;
+ }
+
+ return 0;
+}
+
+static void ctdb_event_msg_reply(struct ctdb_event_context *eclient,
+ uint8_t *buf, size_t buflen);
+
+static void event_read_handler(uint8_t *buf, size_t buflen,
+ void *private_data)
+{
+ struct ctdb_event_context *eclient = talloc_get_type_abort(
+ private_data, struct ctdb_event_context);
+
+ ctdb_event_msg_reply(eclient, buf, buflen);
+}
+
+static void event_dead_handler(void *private_data)
+{
+ struct ctdb_event_context *eclient = talloc_get_type_abort(
+ private_data, struct ctdb_event_context);
+ ctdb_client_callback_func_t callback = eclient->callback;
+ void *callback_data = eclient->private_data;
+
+ talloc_free(eclient);
+ if (callback != NULL) {
+ callback(callback_data);
+ return;
+ }
+
+ DEBUG(DEBUG_NOTICE, ("connection to daemon closed, exiting\n"));
+ exit(1);
+}
+
+void ctdb_event_set_disconnect_callback(struct ctdb_event_context *eclient,
+ ctdb_client_callback_func_t callback,
+ void *private_data)
+{
+ eclient->callback = callback;
+ eclient->private_data = private_data;
+}
+
+/*
+ * Handle eventd_request and eventd_reply
+ */
+
+struct ctdb_event_msg_state {
+ struct ctdb_event_context *eclient;
+
+ uint32_t reqid;
+ struct tevent_req *req;
+ struct ctdb_event_reply *reply;
+};
+
+static int ctdb_event_msg_state_destructor(struct ctdb_event_msg_state *state);
+static void ctdb_event_msg_done(struct tevent_req *subreq);
+
+struct tevent_req *ctdb_event_msg_send(TALLOC_CTX *mem_ctx,
+ struct tevent_context *ev,
+ struct ctdb_event_context *eclient,
+ struct ctdb_event_request *request)
+{
+ struct tevent_req *req, *subreq;
+ struct ctdb_event_msg_state *state;
+ uint8_t *buf;
+ size_t buflen;
+ int ret;
+
+ req = tevent_req_create(mem_ctx, &state, struct ctdb_event_msg_state);
+ if (req == NULL) {
+ return NULL;
+ }
+
+ state->eclient = eclient;
+
+ state->reqid = reqid_new(eclient->idr, state);
+ if (state->reqid == REQID_INVALID) {
+ talloc_free(req);
+ return NULL;
+ }
+ state->req = req;
+
+ talloc_set_destructor(state, ctdb_event_msg_state_destructor);
+
+ ctdb_event_header_fill(&request->header, state->reqid);
+
+ buflen = ctdb_event_request_len(request);
+ buf = talloc_size(state, buflen);
+ if (tevent_req_nomem(buf, req)) {
+ return tevent_req_post(req, ev);
+ }
--
Samba Shared Repository
More information about the samba-cvs
mailing list