[SCM] Samba Shared Repository - branch master updated

Martin Schwenke martins at samba.org
Mon Sep 19 10:19:05 UTC 2016


The branch, master has been updated
       via  28fad1c ctdb-daemon: Log a message when vfork() takes long time
       via  0617196 ctdb-daemon: Log a message when fork() takes long time
       via  a69d1e2 ctdb-daemon: Avoid extra condition in tevent trace callback
       via  6b93b57 ctdb-recovery-helper: Add missing initialisation of ban_credits
      from  085542f lib: poll_funcs : poll_funcs_context_slot_find can select the wrong slot to replace.

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


- Log -----------------------------------------------------------------
commit 28fad1c59de6fb1e70d4c0875b1588493fb901d1
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Thu Sep 15 16:10:49 2016 +1000

    ctdb-daemon: Log a message when vfork() takes long time
    
    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): Mon Sep 19 12:18:15 CEST 2016 on sn-devel-144

commit 06171961d63d20d3485866bd99d940286f4b25a3
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Thu Sep 15 16:10:49 2016 +1000

    ctdb-daemon: Log a message when fork() takes long time
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>
    Reviewed-by: Martin Schwenke <martin at meltin.net>

commit a69d1e202a6d8a461bbab0889cc39d86b870c057
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Fri Mar 27 16:23:48 2015 +1100

    ctdb-daemon: Avoid extra condition in tevent trace callback
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>
    Reviewed-by: Martin Schwenke <martin at meltin.net>

commit 6b93b57921fad40cb3601888154c2f73a75fd590
Author: Amitay Isaacs <amitay at gmail.com>
Date:   Mon Sep 19 14:59:06 2016 +1000

    ctdb-recovery-helper: Add missing initialisation of ban_credits
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=12275
    
    Signed-off-by: Amitay Isaacs <amitay at gmail.com>
    Reviewed-by: Martin Schwenke <martin at meltin.net>

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

Summary of changes:
 ctdb/server/ctdb_daemon.c          | 35 +++++++++++++++++++++--------------
 ctdb/server/ctdb_fork.c            | 10 ++++++++++
 ctdb/server/ctdb_logging.c         | 10 ++++++++++
 ctdb/server/ctdb_recovery_helper.c |  1 +
 4 files changed, 42 insertions(+), 14 deletions(-)


Changeset truncated at 500 lines:

diff --git a/ctdb/server/ctdb_daemon.c b/ctdb/server/ctdb_daemon.c
index 47e49df..a1579f9 100644
--- a/ctdb/server/ctdb_daemon.c
+++ b/ctdb/server/ctdb_daemon.c
@@ -1103,6 +1103,16 @@ static void ctdb_setup_event_callback(struct ctdb_context *ctdb, int status,
 static struct timeval tevent_before_wait_ts;
 static struct timeval tevent_after_wait_ts;
 
+static void ctdb_tevent_trace_init(void)
+{
+	struct timeval now;
+
+	now = timeval_current();
+
+	tevent_before_wait_ts = now;
+	tevent_after_wait_ts = now;
+}
+
 static void ctdb_tevent_trace(enum tevent_trace_point tp,
 			      void *private_data)
 {
@@ -1119,25 +1129,21 @@ static void ctdb_tevent_trace(enum tevent_trace_point tp,
 
 	switch (tp) {
 	case TEVENT_TRACE_BEFORE_WAIT:
-		if (!timeval_is_zero(&tevent_after_wait_ts)) {
-			diff = timeval_until(&tevent_after_wait_ts, &now);
-			if (diff.tv_sec > 3) {
-				DEBUG(DEBUG_ERR,
-				      ("Handling event took %ld seconds!\n",
-				       (long)diff.tv_sec));
-			}
+		diff = timeval_until(&tevent_after_wait_ts, &now);
+		if (diff.tv_sec > 3) {
+			DEBUG(DEBUG_ERR,
+			      ("Handling event took %ld seconds!\n",
+			       diff.tv_sec));
 		}
 		tevent_before_wait_ts = now;
 		break;
 
 	case TEVENT_TRACE_AFTER_WAIT:
-		if (!timeval_is_zero(&tevent_before_wait_ts)) {
-			diff = timeval_until(&tevent_before_wait_ts, &now);
-			if (diff.tv_sec > 3) {
-				DEBUG(DEBUG_CRIT,
-				      ("No event for %ld seconds!\n",
-				       (long)diff.tv_sec));
-			}
+		diff = timeval_until(&tevent_before_wait_ts, &now);
+		if (diff.tv_sec > 3) {
+			DEBUG(DEBUG_ERR,
+			      ("No event for %ld seconds!\n",
+			       diff.tv_sec));
 		}
 		tevent_after_wait_ts = now;
 		break;
@@ -1287,6 +1293,7 @@ int ctdb_start_daemon(struct ctdb_context *ctdb, bool do_fork)
 		exit(1);
 	}
 	tevent_loop_allow_nesting(ctdb->ev);
+	ctdb_tevent_trace_init();
 	tevent_set_trace_callback(ctdb->ev, ctdb_tevent_trace, ctdb);
 	ret = ctdb_init_tevent_logging(ctdb);
 	if (ret != 0) {
diff --git a/ctdb/server/ctdb_fork.c b/ctdb/server/ctdb_fork.c
index 4edbe88..54ffd02 100644
--- a/ctdb/server/ctdb_fork.c
+++ b/ctdb/server/ctdb_fork.c
@@ -25,6 +25,7 @@
 #include <tevent.h>
 
 #include "lib/util/debug.h"
+#include "lib/util/time.h"
 
 #include "ctdb_private.h"
 #include "ctdb_client.h"
@@ -68,6 +69,10 @@ void ctdb_track_child(struct ctdb_context *ctdb, pid_t pid)
 pid_t ctdb_fork(struct ctdb_context *ctdb)
 {
 	pid_t pid;
+	struct timeval before;
+	double delta_t;
+
+	before = timeval_current();
 
 	pid = fork();
 	if (pid == -1) {
@@ -104,6 +109,11 @@ pid_t ctdb_fork(struct ctdb_context *ctdb)
 		return 0;
 	}
 
+	delta_t = timeval_elapsed(&before);
+	if (delta_t > 3.0) {
+		DEBUG(DEBUG_WARNING, ("fork() took %lf seconds\n", delta_t));
+	}
+
 	ctdb_track_child(ctdb, pid);
 	return pid;
 }
diff --git a/ctdb/server/ctdb_logging.c b/ctdb/server/ctdb_logging.c
index 692df73..fbafe9b 100644
--- a/ctdb/server/ctdb_logging.c
+++ b/ctdb/server/ctdb_logging.c
@@ -29,6 +29,7 @@
 #include "lib/util/dlinklist.h"
 #include "lib/util/debug.h"
 #include "lib/util/blocking.h"
+#include "lib/util/time.h"
 
 #include "ctdb_private.h"
 #include "ctdb_client.h"
@@ -200,6 +201,8 @@ struct ctdb_log_state *ctdb_vfork_with_logging(TALLOC_CTX *mem_ctx,
 	struct tevent_fd *fde;
 	char **argv;
 	int i;
+	struct timeval before;
+	double delta_t;
 
 	log = talloc_zero(mem_ctx, struct ctdb_log_state);
 	CTDB_NO_MEMORY_NULL(ctdb, log);
@@ -230,6 +233,8 @@ struct ctdb_log_state *ctdb_vfork_with_logging(TALLOC_CTX *mem_ctx,
 		argv[i+2] = discard_const(helper_argv[i]);
 	}
 
+	before = timeval_current();
+
 	*pid = vfork();
 	if (*pid == 0) {
 		execv(helper, argv);
@@ -243,6 +248,11 @@ struct ctdb_log_state *ctdb_vfork_with_logging(TALLOC_CTX *mem_ctx,
 		goto free_log;
 	}
 
+	delta_t = timeval_elapsed(&before);
+	if (delta_t > 3.0) {
+		DEBUG(DEBUG_WARNING, ("vfork() took %lf seconds\n", delta_t));
+	}
+
 	ctdb_track_child(ctdb, *pid);
 
 	log->pfd = p[0];
diff --git a/ctdb/server/ctdb_recovery_helper.c b/ctdb/server/ctdb_recovery_helper.c
index 9e142cd..4e4a986 100644
--- a/ctdb/server/ctdb_recovery_helper.c
+++ b/ctdb/server/ctdb_recovery_helper.c
@@ -1400,6 +1400,7 @@ static struct tevent_req *collect_all_db_send(
 	state->pnn_list = pnn_list;
 	state->count = count;
 	state->caps = caps;
+	state->ban_credits = ban_credits;
 	state->db_id = db_id;
 	state->recdb = recdb;
 	state->index = 0;


-- 
Samba Shared Repository



More information about the samba-cvs mailing list