[SCM] Samba Shared Repository - branch master updated

Martin Schwenke martins at samba.org
Wed Jan 20 06:29:03 UTC 2016


The branch, master has been updated
       via  d905179 ctdb-client: Use ctdb_rec_buffer_init() to initialize ctdb_rec_buffer
       via  a7d54bb ctdb-client: Add missing initialization for h->ev in transaction_start
       via  5d5d88e ctdb-client: Do not delete reqid explicitly
       via  8ca76ad ctdb-client: Add a disconnect callback for ctdb client
       via  555237f ctdb-client: Close ctdb socket connection when client context goes away
       via  e59712b ctdb-client: Use ctdb_ltdb_header_extract()
       via  0ed60d7 ctdb-protocol: Fix marshaling of seqnum
      from  006d4c1 docs: Bump version up to 4.4.

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


- Log -----------------------------------------------------------------
commit d90517912712f2e8021733ecaabed903cb2d0aed
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Fri Nov 6 17:08:18 2015 +1100

    ctdb-client: Use ctdb_rec_buffer_init() to initialize ctdb_rec_buffer
    
    ... instead of talloc_zero().  This sets the db_id correctly.
    
    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): Wed Jan 20 07:28:42 CET 2016 on sn-devel-144

commit a7d54bb2c15e280143455289236884be1a402dda
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Fri Nov 6 15:20:15 2015 +1100

    ctdb-client: Add missing initialization for h->ev in transaction_start
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>
    Reviewed-by: Martin Schwenke <martin at meltin.net>

commit 5d5d88e0bb082cc82fab355b687b7cb34a8bd059
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Thu Nov 5 17:09:11 2015 +1100

    ctdb-client: Do not delete reqid explicitly
    
    The reqid will be deleted when the client control state is freed.
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>
    Reviewed-by: Martin Schwenke <martin at meltin.net>

commit 8ca76adaeaa284601424e2d3ec4cc4bd044ed0de
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Wed Oct 14 15:36:55 2015 +1100

    ctdb-client: Add a disconnect callback for ctdb client
    
    This allows the client code to optionally clean up and/or re-connect to
    CTDB daemon when it the daemon goes away.  If no disconnect callback is
    registered and CTDB daemon goes away, then the client will terminate.
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>
    Reviewed-by: Martin Schwenke <martin at meltin.net>

commit 555237f2a8bd42f7223397f73e62a2a3786484c5
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Wed Oct 14 15:30:14 2015 +1100

    ctdb-client: Close ctdb socket connection when client context goes away
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>
    Reviewed-by: Martin Schwenke <martin at meltin.net>

commit e59712b2c311c4d5fff82bc62f86a83ea4e86cbd
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Tue Nov 10 18:32:05 2015 +1100

    ctdb-client: Use ctdb_ltdb_header_extract()
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>
    Reviewed-by: Martin Schwenke <martin at meltin.net>

commit 0ed60d757d3cb134eb74e559bc3288b44cf74a6f
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Thu Nov 26 13:50:14 2015 +1100

    ctdb-protocol: Fix marshaling of seqnum
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>
    Reviewed-by: Martin Schwenke <martin at meltin.net>

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

Summary of changes:
 ctdb/client/client.h             |  6 ++++++
 ctdb/client/client_connect.c     | 30 +++++++++++++++++++++++++++++-
 ctdb/client/client_control.c     |  1 -
 ctdb/client/client_db.c          | 11 +++--------
 ctdb/client/client_private.h     |  3 +++
 ctdb/protocol/protocol_control.c |  2 +-
 6 files changed, 42 insertions(+), 11 deletions(-)


Changeset truncated at 500 lines:

diff --git a/ctdb/client/client.h b/ctdb/client/client.h
index 3a16069..bce0c6b 100644
--- a/ctdb/client/client.h
+++ b/ctdb/client/client.h
@@ -30,11 +30,17 @@ struct ctdb_client_context;
 struct ctdb_db_context;
 struct ctdb_record_handle;
 
+typedef void (*ctdb_client_callback_func_t)(void *private_data);
+
 /* from client/client_connect.c */
 
 int ctdb_client_init(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
 		     const char *sockpath, struct ctdb_client_context **ret);
 
+void ctdb_client_set_disconnect_callback(struct ctdb_client_context *client,
+					 ctdb_client_callback_func_t func,
+					 void *private_data);
+
 uint32_t ctdb_client_pnn(struct ctdb_client_context *client);
 
 void ctdb_client_wait(struct tevent_context *ev, bool *done);
diff --git a/ctdb/client/client_connect.c b/ctdb/client/client_connect.c
index 0c92485..d433f7d 100644
--- a/ctdb/client/client_connect.c
+++ b/ctdb/client/client_connect.c
@@ -43,6 +43,8 @@ static int ctdb_client_connect(struct ctdb_client_context *client,
 			       struct tevent_context *ev,
 			       const char *sockpath);
 
+static int ctdb_client_context_destructor(struct ctdb_client_context *client);
+
 int ctdb_client_init(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
 		     const char *sockpath, struct ctdb_client_context **out)
 {
@@ -78,10 +80,21 @@ int ctdb_client_init(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
 		return ret;
 	}
 
+	talloc_set_destructor(client, ctdb_client_context_destructor);
+
 	*out = client;
 	return 0;
 }
 
+static int ctdb_client_context_destructor(struct ctdb_client_context *client)
+{
+	if (client->fd != -1) {
+		close(client->fd);
+		client->fd = -1;
+	}
+	return 0;
+}
+
 static void client_read_handler(uint8_t *buf, size_t buflen,
 				void *private_data);
 static void client_dead_handler(void *private_data);
@@ -193,12 +206,27 @@ static void client_dead_handler(void *private_data)
 {
 	struct ctdb_client_context *client = talloc_get_type_abort(
 		private_data, struct ctdb_client_context);
+	ctdb_client_callback_func_t callback = client->callback;
+	void *callback_data = client->private_data;
 
-	DEBUG(DEBUG_NOTICE, ("connection to daemon closed, exiting\n"));
 	talloc_free(client);
+	if (callback != NULL) {
+		callback(callback_data);
+		return;
+	}
+
+	DEBUG(DEBUG_NOTICE, ("connection to daemon closed, exiting\n"));
 	exit(1);
 }
 
+void ctdb_client_set_disconnect_callback(struct ctdb_client_context *client,
+					 ctdb_client_callback_func_t callback,
+					 void *private_data)
+{
+	client->callback = callback;
+	client->private_data = private_data;
+}
+
 uint32_t ctdb_client_pnn(struct ctdb_client_context *client)
 {
 	return client->pnn;
diff --git a/ctdb/client/client_control.c b/ctdb/client/client_control.c
index 4249bfb..b25ff40 100644
--- a/ctdb/client/client_control.c
+++ b/ctdb/client/client_control.c
@@ -141,7 +141,6 @@ static void ctdb_client_control_done(struct tevent_req *subreq)
 
 	/* Daemon will not reply, so we set status to 0 */
 	if (state->flags & CTDB_CTRL_FLAG_NOREPLY) {
-		reqid_remove(state->client->idr, state->reqid);
 		state->reply->status = 0;
 		tevent_req_done(req);
 	}
diff --git a/ctdb/client/client_db.c b/ctdb/client/client_db.c
index 6af607a..287efd6 100644
--- a/ctdb/client/client_db.c
+++ b/ctdb/client/client_db.c
@@ -591,19 +591,13 @@ static int ctdb_db_traverse_handler(struct tdb_context *tdb, TDB_DATA key,
 
 	if (state->extract_header) {
 		struct ctdb_ltdb_header header;
-		size_t len;
 
-		ret = ctdb_ltdb_header_pull(data.dptr, data.dsize, &header);
+		ret = ctdb_ltdb_header_extract(&data, &header);
 		if (ret != 0) {
 			state->error = ret;
 			return 1;
 		}
 
-		len = ctdb_ltdb_header_len(&header);
-
-		data.dptr += len;
-		data.dsize -= len;
-
 		ret = state->parser(0, &header, key, data, state->private_data);
 	} else {
 		ret = state->parser(0, NULL, key, data, state->private_data);
@@ -1616,6 +1610,7 @@ struct tevent_req *ctdb_transaction_start_send(TALLOC_CTX *mem_ctx,
 		return tevent_req_post(req, ev);
 	}
 
+	h->ev = ev;
 	h->client = client;
 	h->db = db;
 	h->readonly = readonly;
@@ -1629,7 +1624,7 @@ struct tevent_req *ctdb_transaction_start_send(TALLOC_CTX *mem_ctx,
 	h->sid.unique_id = h->sid.task_id;
 	h->sid.unique_id = (h->sid.unique_id << 32) | h->sid.pid;
 
-	h->recbuf = talloc_zero(h, struct ctdb_rec_buffer);
+	h->recbuf = ctdb_rec_buffer_init(h, db->db_id);
 	if (tevent_req_nomem(h->recbuf, req)) {
 		return tevent_req_post(req, ev);
 	}
diff --git a/ctdb/client/client_private.h b/ctdb/client/client_private.h
index b1d8d4b..7ea9b12 100644
--- a/ctdb/client/client_private.h
+++ b/ctdb/client/client_private.h
@@ -21,6 +21,7 @@
 #define __CTDB_CLIENT_PRIVATE_H__
 
 #include "protocol/protocol.h"
+#include "client/client.h"
 
 struct ctdb_db_context {
 	struct ctdb_db_context *prev, *next;
@@ -35,6 +36,8 @@ struct ctdb_client_context {
 	struct reqid_context *idr;
 	struct srvid_context *srv;
 	struct comm_context *comm;
+	ctdb_client_callback_func_t callback;
+	void *private_data;
 	int fd;
 	uint32_t pnn;
 	struct ctdb_db_context *db;
diff --git a/ctdb/protocol/protocol_control.c b/ctdb/protocol/protocol_control.c
index 95edc1a..1c8364e 100644
--- a/ctdb/protocol/protocol_control.c
+++ b/ctdb/protocol/protocol_control.c
@@ -713,7 +713,7 @@ static void ctdb_req_control_data_push(struct ctdb_req_control_data *cd,
 
 	case CTDB_CONTROL_GET_DB_SEQNUM:
 		u64 = cd->data.db_id;
-		ctdb_uint32_push(u64, buf);
+		ctdb_uint64_push(u64, buf);
 		break;
 
 	case CTDB_CONTROL_DB_SET_HEALTHY:


-- 
Samba Shared Repository



More information about the samba-cvs mailing list