[SCM] Samba Shared Repository - branch master updated

Martin Schwenke martins at samba.org
Thu Jul 5 07:40:03 UTC 2018


The branch, master has been updated
       via  dda99e4 ctdb-tests: Switch to using new event daemon
       via  db548f4 ctdb-daemon: Add client code to talk to new event daemon
       via  8250072 ctdb-protocol: Remove protocol for old event daemon
       via  0e444c9 ctdb-client: Remove client code for old event daemon
       via  b6938c0 ctdb-tools: Remove old event daemon tool
       via  ce3db0d ctdb-daemon: Remove old event daemon
       via  99fa3a3 ctdb-tests: Remove tests for old event daemon
       via  26b1940 ctdb-tools: Switch to using new event daemon tool
       via  efc5d3c ctdb-daemon: Switch to starting new event daemon
       via  6eaef84 ctdb-event: Add tests for event daemon
       via  f9104d4 ctdb-tests: Rename eventd testsuite to ctdb_eventd
       via  587a1e0 ctdb-event: Add event daemon client tool
       via  99c33e6 ctdb-event: Add event daemon client code
       via  24ba8e7 ctdb-event: Add event daemon implementation
       via  281bc84 ctdb-event: Add event daemon protocol
       via  f42106f ctdb-common: Add client pid to connect callback in sock_daemon
       via  5586e03 ctdb-tests: Separate testing code for basic data types
       via  cbf7e2f ctdb-build: Add ctdb prefix to build target
       via  046d468 ctdb-protocol: Separate protocol-basic subsystem
      from  9a7e9e5 autobuild: Fix random-sleep.sh invocation in autobuild.py

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit dda99e49e3be6295cf91d4dffe010361469f8eb1
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Thu Jun 21 18:02:06 2018 +1000

    ctdb-tests: Switch to using new event daemon
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>
    Reviewed-by: Martin Schwenke <martin at meltin.net>
    
    Autobuild-User(master): Martin Schwenke <martins at samba.org>
    Autobuild-Date(master): Thu Jul  5 09:39:33 CEST 2018 on sn-devel-144

commit db548f4852533bfbe250cd7b3281f16e2c34d14e
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Thu Jun 21 17:16:07 2018 +1000

    ctdb-daemon: Add client code to talk to new event daemon
    
    This fixes the build and now new eventd is integrated completely in CTDB.
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>
    Reviewed-by: Martin Schwenke <martin at meltin.net>

commit 8250072a8116e04031e6a161c3bbc2af73fae431
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Thu Jun 21 16:44:02 2018 +1000

    ctdb-protocol: Remove protocol for old event daemon
    
    This breaks the build.  The new eventd protocol cannot be introduced without
    removing the old eventd protocol.
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>
    Reviewed-by: Martin Schwenke <martin at meltin.net>

commit 0e444c961c0755129d614963fb23cff737cfcaf1
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Thu Jun 21 16:56:43 2018 +1000

    ctdb-client: Remove client code for old event daemon
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>
    Reviewed-by: Martin Schwenke <martin at meltin.net>

commit b6938c0976d3d4150f683cabb8dc5dc5b3b4944f
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Thu Jun 21 17:02:54 2018 +1000

    ctdb-tools: Remove old event daemon tool
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>
    Reviewed-by: Martin Schwenke <martin at meltin.net>

commit ce3db0d4698c77808448dce1f762e7157de9395f
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Thu Jun 21 16:41:16 2018 +1000

    ctdb-daemon: Remove old event daemon
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>
    Reviewed-by: Martin Schwenke <martin at meltin.net>

commit 99fa3a343f61213cf4cf214751ede0a7568f3167
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Thu Jun 21 16:42:47 2018 +1000

    ctdb-tests: Remove tests for old event daemon
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>
    Reviewed-by: Martin Schwenke <martin at meltin.net>

commit 26b19401622d751a56d9a8df4d4102b5df1f6519
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Thu Jun 21 17:02:09 2018 +1000

    ctdb-tools: Switch to using new event daemon tool
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>
    Reviewed-by: Martin Schwenke <martin at meltin.net>

commit efc5d3caddc3952b30b709f4f24c51e42e8c9bdb
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Thu Jun 21 16:38:01 2018 +1000

    ctdb-daemon: Switch to starting new event daemon
    
    From this patch onwards, CTDB daemon is broken till the client code for
    new eventd is integrated.  This requires getting rid of the old eventd
    protocol and client code and then switching to the new eventd protocol
    and client code.
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>
    Reviewed-by: Martin Schwenke <martin at meltin.net>

commit 6eaef8491e4dbef2d5e7467e9e7dc40a971ec84a
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Fri May 4 18:08:08 2018 +1000

    ctdb-event: Add tests for event daemon
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>
    Reviewed-by: Martin Schwenke <martin at meltin.net>

commit f9104d46596919dd0e55c841533b26c7f90526fe
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Fri May 4 17:18:39 2018 +1000

    ctdb-tests: Rename eventd testsuite to ctdb_eventd
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>
    Reviewed-by: Martin Schwenke <martin at meltin.net>

commit 587a1e045e5cf632abef0c1ee14231bae32837b1
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Thu Apr 26 18:46:27 2018 +1000

    ctdb-event: Add event daemon client tool
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>
    Reviewed-by: Martin Schwenke <martin at meltin.net>

commit 99c33e6f984e6431cbeeab006e61ea99ce15ff47
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Tue Apr 24 17:22:42 2018 +1000

    ctdb-event: Add event daemon client code
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>
    Reviewed-by: Martin Schwenke <martin at meltin.net>

commit 24ba8e7c31b0ed142fdf57fe17b08f76643ed8a0
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Sun Mar 4 02:11:16 2018 +1100

    ctdb-event: Add event daemon implementation
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>
    Reviewed-by: Martin Schwenke <martin at meltin.net>

commit 281bc8491216b3be4026ec0ab58a62ef104a6f35
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Thu Feb 15 17:33:12 2018 +1100

    ctdb-event: Add event daemon protocol
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>
    Reviewed-by: Martin Schwenke <martin at meltin.net>

commit f42106fb49deea9a0b185788b07934aff17ef4fd
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Tue Feb 6 16:42:39 2018 +1100

    ctdb-common: Add client pid to connect callback in sock_daemon
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>
    Reviewed-by: Martin Schwenke <martin at meltin.net>

commit 5586e035f2793cee80e6fb1abbdff3d16451101c
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Mon Mar 5 16:45:42 2018 +1100

    ctdb-tests: Separate testing code for basic data types
    
    This will be used for testing other daemons' protocol code.
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>
    Reviewed-by: Martin Schwenke <martin at meltin.net>

commit cbf7e2f0f241f525496101179ba553c3763b14da
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Thu Apr 26 17:37:03 2018 +1000

    ctdb-build: Add ctdb prefix to build target
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>
    Reviewed-by: Martin Schwenke <martin at meltin.net>

commit 046d4688231c6a2338e581f0d87f2611c1e9f877
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Thu Mar 1 18:20:19 2018 +1100

    ctdb-protocol: Separate protocol-basic subsystem
    
    This includes marshalling code for basic data types.  This will be used
    by other daemons.
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>
    Reviewed-by: Martin Schwenke <martin at meltin.net>

-----------------------------------------------------------------------

Summary of changes:
 ctdb/client/client_event.h                         |   92 --
 ctdb/common/sock_daemon.c                          |    8 +-
 ctdb/common/sock_daemon.h                          |    2 +
 ctdb/event/event.h                                 |   55 +
 ctdb/event/event_client.c                          |  351 ++++++
 ctdb/event/event_cmd.c                             |  358 +++++++
 ctdb/event/event_config.c                          |  122 +++
 ctdb/event/event_context.c                         |  472 ++++++++
 ctdb/event/event_daemon.c                          |  359 +++++++
 ctdb/event/event_private.h                         |  103 ++
 ctdb/event/event_protocol.c                        | 1122 ++++++++++++++++++++
 ctdb/event/event_protocol.h                        |  100 ++
 ctdb/event/event_protocol_api.h                    |   61 ++
 ctdb/event/event_protocol_test.c                   |  415 ++++++++
 ctdb/event/event_protocol_util.c                   |   46 +
 ctdb/event/event_request.c                         |  217 ++++
 ctdb/event/event_tool.c                            |  496 +++++++++
 ctdb/event/event_tool.h                            |   38 +
 ctdb/protocol/protocol.h                           |   75 --
 ctdb/protocol/protocol_api.h                       |   20 -
 ctdb/protocol/protocol_basic.c                     |    4 +-
 ctdb/protocol/protocol_basic.h                     |   86 ++
 ctdb/protocol/protocol_event.c                     |  920 ----------------
 ctdb/protocol/protocol_private.h                   |   64 +-
 ctdb/server/ctdb_eventd.c                          | 1091 -------------------
 ctdb/server/ctdb_monitor.c                         |    4 +-
 ctdb/server/ctdbd.c                                |   14 -
 ctdb/server/eventscript.c                          |  114 +-
 ...ocol_test_102.sh => event_protocol_test_001.sh} |    4 +-
 ctdb/tests/eventd/etc-ctdb/ctdb.conf               |    6 +
 ctdb/tests/eventd/etc-ctdb/debug-script.sh         |   22 +
 ctdb/tests/eventd/etc-ctdb/events/empty/README     |    1 +
 .../eventd/etc-ctdb/events/multi/01.test.script    |   11 +
 .../eventd/etc-ctdb/events/multi/02.test.script    |    9 +
 .../eventd/etc-ctdb/events/multi/03.test.script    |    9 +
 .../etc-ctdb/events/random/01.disabled.script      |    3 +
 .../etc-ctdb/events/random/02.enabled.script       |   12 +
 .../eventd/etc-ctdb/events/random/README.script    |    1 +
 ctdb/tests/eventd/etc-ctdb/events/random/a.script  |    3 +
 ctdb/tests/eventd/eventd_001.sh                    |   27 +-
 ctdb/tests/eventd/eventd_002.sh                    |   45 +-
 ctdb/tests/eventd/eventd_003.sh                    |   55 +-
 ctdb/tests/eventd/eventd_004.sh                    |   48 +-
 ctdb/tests/eventd/eventd_005.sh                    |   42 +-
 ctdb/tests/eventd/eventd_006.sh                    |   34 +-
 ctdb/tests/eventd/eventd_007.sh                    |   36 +-
 ctdb/tests/eventd/eventd_008.sh                    |   19 +
 ctdb/tests/eventd/eventd_011.sh                    |   64 +-
 ctdb/tests/eventd/eventd_012.sh                    |   48 +-
 ctdb/tests/eventd/eventd_013.sh                    |   48 +-
 ctdb/tests/eventd/eventd_014.sh                    |   49 +-
 ctdb/tests/eventd/eventd_021.sh                    |   26 +-
 ctdb/tests/eventd/eventd_022.sh                    |   33 +-
 ctdb/tests/eventd/eventd_023.sh                    |   30 +-
 ctdb/tests/eventd/eventd_024.sh                    |   32 +-
 ctdb/tests/eventd/eventd_031.sh                    |   56 +-
 ctdb/tests/eventd/eventd_032.sh                    |  107 +-
 ctdb/tests/eventd/eventd_033.sh                    |   99 +-
 ctdb/tests/eventd/eventd_041.sh                    |   48 +-
 ctdb/tests/eventd/eventd_042.sh                    |   49 +-
 ctdb/tests/eventd/eventd_043.sh                    |   49 +-
 ctdb/tests/eventd/eventd_044.sh                    |   37 +
 ctdb/tests/eventd/eventd_051.sh                    |   18 +-
 ctdb/tests/eventd/eventd_052.sh                    |   35 +
 ctdb/tests/eventd/scripts/local.sh                 |   37 +-
 ctdb/tests/simple/60_recoverd_missing_ip.sh        |    4 +-
 ctdb/tests/simple/scripts/local_daemons.bash       |    6 +-
 ctdb/tests/src/protocol_basic_test.c               |    4 +-
 ctdb/tests/src/protocol_common.c                   |  207 +---
 ctdb/tests/src/protocol_common.h                   |  138 +--
 ctdb/tests/src/protocol_common_basic.c             |  231 ++++
 ctdb/tests/src/protocol_common_basic.h             |  170 +++
 ctdb/tests/src/protocol_common_event.c             |  285 -----
 ctdb/tests/src/protocol_common_event.h             |   86 --
 ctdb/tests/src/protocol_event_test.c               |  146 ---
 ctdb/tests/src/sock_daemon_test.c                  |    1 +
 ctdb/tools/ctdb.c                                  |   41 +-
 ctdb/tools/ctdb_event.c                            |  536 ----------
 ctdb/wscript                                       |   92 +-
 79 files changed, 5362 insertions(+), 4646 deletions(-)
 delete mode 100644 ctdb/client/client_event.h
 create mode 100644 ctdb/event/event.h
 create mode 100644 ctdb/event/event_client.c
 create mode 100644 ctdb/event/event_cmd.c
 create mode 100644 ctdb/event/event_config.c
 create mode 100644 ctdb/event/event_context.c
 create mode 100644 ctdb/event/event_daemon.c
 create mode 100644 ctdb/event/event_private.h
 create mode 100644 ctdb/event/event_protocol.c
 create mode 100644 ctdb/event/event_protocol.h
 create mode 100644 ctdb/event/event_protocol_api.h
 create mode 100644 ctdb/event/event_protocol_test.c
 create mode 100644 ctdb/event/event_protocol_util.c
 create mode 100644 ctdb/event/event_request.c
 create mode 100644 ctdb/event/event_tool.c
 create mode 100644 ctdb/event/event_tool.h
 create mode 100644 ctdb/protocol/protocol_basic.h
 delete mode 100644 ctdb/protocol/protocol_event.c
 delete mode 100644 ctdb/server/ctdb_eventd.c
 rename ctdb/tests/cunit/{protocol_test_102.sh => event_protocol_test_001.sh} (87%)
 create mode 100644 ctdb/tests/eventd/etc-ctdb/ctdb.conf
 create mode 100755 ctdb/tests/eventd/etc-ctdb/debug-script.sh
 create mode 100644 ctdb/tests/eventd/etc-ctdb/events/empty/README
 create mode 100755 ctdb/tests/eventd/etc-ctdb/events/multi/01.test.script
 create mode 100755 ctdb/tests/eventd/etc-ctdb/events/multi/02.test.script
 create mode 100755 ctdb/tests/eventd/etc-ctdb/events/multi/03.test.script
 create mode 100644 ctdb/tests/eventd/etc-ctdb/events/random/01.disabled.script
 create mode 100755 ctdb/tests/eventd/etc-ctdb/events/random/02.enabled.script
 create mode 100644 ctdb/tests/eventd/etc-ctdb/events/random/README.script
 create mode 100755 ctdb/tests/eventd/etc-ctdb/events/random/a.script
 create mode 100755 ctdb/tests/eventd/eventd_008.sh
 create mode 100755 ctdb/tests/eventd/eventd_044.sh
 create mode 100755 ctdb/tests/eventd/eventd_052.sh
 create mode 100644 ctdb/tests/src/protocol_common_basic.c
 create mode 100644 ctdb/tests/src/protocol_common_basic.h
 delete mode 100644 ctdb/tests/src/protocol_common_event.c
 delete mode 100644 ctdb/tests/src/protocol_common_event.h
 delete mode 100644 ctdb/tests/src/protocol_event_test.c
 delete mode 100644 ctdb/tools/ctdb_event.c


Changeset truncated at 500 lines:

diff --git a/ctdb/client/client_event.h b/ctdb/client/client_event.h
deleted file mode 100644
index 1897aa9..0000000
--- a/ctdb/client/client_event.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
-   CTDB client code - event daemon
-
-   Copyright (C) Amitay Isaacs  2017
-
-   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_CLIENT_EVENT_H__
-#define __CTDB_CLIENT_EVENT_H__
-
-#include "client/client.h"
-
-/* 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_EVENT_H__ */
diff --git a/ctdb/common/sock_daemon.c b/ctdb/common/sock_daemon.c
index a56057b..3c17519 100644
--- a/ctdb/common/sock_daemon.c
+++ b/ctdb/common/sock_daemon.c
@@ -36,6 +36,7 @@
 #include "common/reqid.h"
 #include "common/comm.h"
 #include "common/pidfile.h"
+#include "common/system.h"
 #include "common/sock_daemon.h"
 
 struct sock_socket {
@@ -114,9 +115,14 @@ static int sock_client_context_init(TALLOC_CTX *mem_ctx,
 	}
 
 	if (sock->funcs->connect != NULL) {
+		pid_t pid;
 		bool status;
 
-		status = sock->funcs->connect(client_ctx, sock->private_data);
+		(void) ctdb_get_peer_pid(client_fd, &pid);
+
+		status = sock->funcs->connect(client_ctx,
+					      pid,
+					      sock->private_data);
 		if (! status) {
 			talloc_free(client_ctx);
 			close(client_fd);
diff --git a/ctdb/common/sock_daemon.h b/ctdb/common/sock_daemon.h
index aa40995..705c4fa 100644
--- a/ctdb/common/sock_daemon.h
+++ b/ctdb/common/sock_daemon.h
@@ -109,6 +109,7 @@ struct sock_daemon_funcs {
  * connect() is called when there is a new connection
  *
  * @param[in] client The new socket client context
+ * @param[in] pid The pid of the new client process, or -1 if unknown
  * @param[in] private_data Private data set with the socket
  * @return true if connection should be accepted, false otherwise
  *
@@ -139,6 +140,7 @@ struct sock_daemon_funcs {
  */
 struct sock_socket_funcs {
 	bool (*connect)(struct sock_client_context *client,
+			pid_t pid,
 			void *private_data);
 	void (*disconnect)(struct sock_client_context *client,
 			   void *private_data);
diff --git a/ctdb/event/event.h b/ctdb/event/event.h
new file mode 100644
index 0000000..13617c0
--- /dev/null
+++ b/ctdb/event/event.h
@@ -0,0 +1,55 @@
+/*
+   CTDB event daemon client
+
+   Copyright (C) Amitay Isaacs  2018
+
+   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_EVENT_H__
+#define __CTDB_EVENT_H__
+
+#include "event/event_protocol.h"
+
+struct ctdb_event_context;
+
+int ctdb_event_init(TALLOC_CTX *mem_ctx,
+		    struct tevent_context *ev,
+		    struct ctdb_event_context **result);
+
+struct tevent_req *ctdb_event_run_send(TALLOC_CTX *mem_ctx,
+				       struct tevent_context *ev,
+				       struct ctdb_event_context *eclient,
+				       struct ctdb_event_request_run *run);
+bool ctdb_event_run_recv(struct tevent_req *req, int *perr, int *result);
+
+struct tevent_req *ctdb_event_status_send(
+				TALLOC_CTX *mem_ctx,
+				struct tevent_context *ev,
+				struct ctdb_event_context *eclient,
+				struct ctdb_event_request_status *status);
+bool ctdb_event_status_recv(struct tevent_req *req,
+			    int *perr,
+			    int *result,
+			    TALLOC_CTX *mem_ctx,
+			    struct ctdb_event_reply_status **status);
+
+struct tevent_req *ctdb_event_script_send(
+				TALLOC_CTX *mem_ctx,
+				struct tevent_context *ev,
+				struct ctdb_event_context *eclient,
+				struct ctdb_event_request_script *script);
+bool ctdb_event_script_recv(struct tevent_req *req, int *perr, int *result);
+
+#endif /* __CTDB_EVENT_H__ */
diff --git a/ctdb/event/event_client.c b/ctdb/event/event_client.c
new file mode 100644
index 0000000..d0bee0d
--- /dev/null
+++ b/ctdb/event/event_client.c
@@ -0,0 +1,351 @@
+/*
+   CTDB event daemon client
+
+   Copyright (C) Amitay Isaacs  2018
+
+   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 <talloc.h>
+#include <tevent.h>
+
+#include "lib/util/debug.h"
+#include "lib/util/tevent_unix.h"
+
+#include "common/logging.h"
+#include "common/path.h"
+#include "common/sock_client.h"
+
+#include "event/event_protocol_api.h"
+#include "event/event.h"
+
+struct ctdb_event_context {
+	char *socket;
+	struct sock_client_context *sockc;
+};
+
+struct event_request {
+	struct ctdb_event_header header;
+	struct ctdb_event_request *request;
+};
+
+struct event_reply {
+	struct ctdb_event_header header;
+	struct ctdb_event_reply *reply;
+};
+
+static int event_request_push(void *request_data,
+			      uint32_t reqid,
+			      TALLOC_CTX *mem_ctx,
+			      uint8_t **buf,
+			      size_t *buflen,
+			      void *private_data)
+{
+	struct event_request *r = (struct event_request *)request_data;
+	int ret;
+
+	r->header.reqid = reqid;
+
+	*buflen = ctdb_event_request_len(&r->header, r->request);
+	*buf = talloc_size(mem_ctx, *buflen);
+	if (*buf == NULL) {
+		return ENOMEM;
+	}
+
+	ret = ctdb_event_request_push(&r->header, r->request, *buf, buflen);
+	if (ret != 0) {
+		talloc_free(*buf);
+		return ret;
+	}
+
+	return 0;
+}
+
+static int event_reply_pull(uint8_t *buf,
+			    size_t buflen,
+			    TALLOC_CTX *mem_ctx,
+			    void **reply_data,
+			    void *private_data)
+{
+	struct event_reply *r;
+	int ret;
+
+	r = talloc_zero(mem_ctx, struct event_reply);
+	if (r == NULL) {
+		return ENOMEM;
+	}
+
+	ret = ctdb_event_reply_pull(buf, buflen, &r->header, r, &r->reply);
+	if (ret != 0) {
+		talloc_free(r);
+		return ret;
+	}
+
+	*reply_data = r;
+
+	return 0;
+}
+
+static int event_reply_reqid(uint8_t *buf,
+			     size_t buflen,
+			     uint32_t *reqid,
+			     void *private_data)
+{
+	struct ctdb_event_header header;
+	int ret;
+
+	ret = ctdb_event_header_extract(buf, buflen, &header);
+	if (ret != 0) {
+		return ret;
+	}
+
+	*reqid = header.reqid;
+	return 0;
+}
+
+struct sock_client_proto_funcs event_proto_funcs = {
+	.request_push = event_request_push,
+	.reply_pull = event_reply_pull,
+	.reply_reqid = event_reply_reqid,
+};
+
+int ctdb_event_init(TALLOC_CTX *mem_ctx,
+		    struct tevent_context *ev,
+		    struct ctdb_event_context **result)
+{
+	struct ctdb_event_context *eclient;
+	int ret;
+
+	eclient = talloc_zero(mem_ctx, struct ctdb_event_context);
+	if (eclient == NULL) {
+		return ENOMEM;
+	}
+
+	eclient->socket = path_socket(eclient, "eventd");
+	if (eclient->socket == NULL) {
+		talloc_free(eclient);
+		return ENOMEM;
+	}
+
+	ret = sock_client_setup(eclient,
+				ev,
+				eclient->socket,
+				&event_proto_funcs,
+				eclient,
+				&eclient->sockc);
+	if (ret != 0) {
+		talloc_free(eclient);
+		return ret;
+	}
+
+	*result = eclient;
+	return 0;
+}
+
+/*
+ * Handle request and reply
+ */
+
+struct ctdb_event_msg_state {
+	struct event_request e_request;
+	struct event_reply *e_reply;
+};
+
+static void ctdb_event_msg_done(struct tevent_req *subreq);
+
+static 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;
+
+	req = tevent_req_create(mem_ctx, &state, struct ctdb_event_msg_state);
+	if (req == NULL) {
+		return NULL;
+	}
+
+	state->e_request.request = request;
+
+	subreq = sock_client_msg_send(mem_ctx,
+				      ev,
+				      eclient->sockc,
+				      tevent_timeval_zero(),
+				      &state->e_request);
+	if (tevent_req_nomem(subreq, req)) {
+		return tevent_req_post(req, ev);
+	}
+	tevent_req_set_callback(subreq, ctdb_event_msg_done, req);
+
+	return req;
+}
+
+static void ctdb_event_msg_done(struct tevent_req *subreq)
+{
+	struct tevent_req *req = tevent_req_callback_data(
+		subreq, struct tevent_req);
+	struct ctdb_event_msg_state *state = tevent_req_data(
+		req, struct ctdb_event_msg_state);
+	int ret = 0;
+	bool ok;
+
+	ok = sock_client_msg_recv(subreq, &ret, state, &state->e_reply);
+	TALLOC_FREE(subreq);
+	if (!ok) {
+		tevent_req_error(req, ret);
+		return;
+	}
+
+	tevent_req_done(req);
+}
+
+static bool ctdb_event_msg_recv(struct tevent_req *req,
+				int *perr,
+				TALLOC_CTX *mem_ctx,
+				struct ctdb_event_reply **reply)
+{
+	struct ctdb_event_msg_state *state = tevent_req_data(
+		req, struct ctdb_event_msg_state);
+	int ret = 0;
+
+	if (tevent_req_is_unix_error(req, &ret)) {
+		if (perr != NULL) {
+			*perr = ret;
+		}
+		return false;
+	}
+
+	*reply = talloc_steal(mem_ctx, state->e_reply->reply);
+
+	return true;
+}
+
+/*
+ * API functions
+ */
+
+struct tevent_req *ctdb_event_run_send(TALLOC_CTX *mem_ctx,
+				       struct tevent_context *ev,
+				       struct ctdb_event_context *eclient,
+				       struct ctdb_event_request_run *run)
+{
+	struct ctdb_event_request request;
+
+	request.cmd = CTDB_EVENT_CMD_RUN;
+	request.data.run = run;
+
+	return ctdb_event_msg_send(mem_ctx, ev, eclient, &request);
+}
+
+bool ctdb_event_run_recv(struct tevent_req *req, int *perr, int *result)
+{
+	struct ctdb_event_reply *reply = NULL;
+	bool ok;
+
+	ok = ctdb_event_msg_recv(req, perr, req, &reply);
+	if (!ok) {
+		return false;
+	}
+
+	if (reply->cmd != CTDB_EVENT_CMD_RUN) {
+		*result = EPROTO;
+	} else {
+		*result = reply->result;
+	}
+
+	talloc_free(reply);
+	return true;
+}
+
+struct tevent_req *ctdb_event_status_send(
+				TALLOC_CTX *mem_ctx,
+				struct tevent_context *ev,
+				struct ctdb_event_context *eclient,
+				struct ctdb_event_request_status *status)
+{
+	struct ctdb_event_request request;
+
+	request.cmd = CTDB_EVENT_CMD_STATUS;
+	request.data.status = status;
+
+	return ctdb_event_msg_send(mem_ctx, ev, eclient, &request);
+}


-- 
Samba Shared Repository



More information about the samba-cvs mailing list