dovecot-2.2: dsync: If remote disconnects, log the last sent/rec...

dovecot at dovecot.org dovecot at dovecot.org
Fri Sep 4 08:22:46 UTC 2015


details:   http://hg.dovecot.org/dovecot-2.2/rev/3abdcbde7f39
changeset: 19090:3abdcbde7f39
user:      Timo Sirainen <tss at iki.fi>
date:      Fri Sep 04 11:21:39 2015 +0300
description:
dsync: If remote disconnects, log the last sent/recv state.

diffstat:

 src/doveadm/dsync/dsync-ibc-stream.c |  39 ++++++++++++++++++++++-------------
 1 files changed, 24 insertions(+), 15 deletions(-)

diffs (78 lines):

diff -r 3ab749f1ed71 -r 3abdcbde7f39 src/doveadm/dsync/dsync-ibc-stream.c
--- a/src/doveadm/dsync/dsync-ibc-stream.c	Fri Sep 04 11:17:30 2015 +0300
+++ b/src/doveadm/dsync/dsync-ibc-stream.c	Fri Sep 04 11:21:39 2015 +0300
@@ -169,6 +169,20 @@
 	unsigned int stopped:1;
 };
 
+static const char *dsync_ibc_stream_get_state(struct dsync_ibc_stream *ibc)
+{
+	if (!ibc->version_received)
+		return "version not received";
+	else if (!ibc->handshake_received)
+		return "handshake not received";
+
+	return t_strdup_printf("last sent=%s%s, last recv=%s%s",
+			       items[ibc->last_sent_item].name,
+			       ibc->last_sent_item_eol ? " (EOL)" : "",
+			       items[ibc->last_recv_item].name,
+			       ibc->last_recv_item_eol ? " (EOL)" : "");
+}
+
 static void dsync_ibc_stream_stop(struct dsync_ibc_stream *ibc)
 {
 	ibc->stopped = TRUE;
@@ -185,8 +199,10 @@
 	} while (i_stream_read(ibc->value_input) > 0);
 	if (ibc->value_input->eof) {
 		if (ibc->value_input->stream_errno != 0) {
-			i_error("dsync(%s): read() failed: %s", ibc->name,
-				i_stream_get_error(ibc->value_input));
+			i_error("dsync(%s): read(%s) failed: %s (%s)", ibc->name,
+				i_stream_get_name(ibc->value_input),
+				i_stream_get_error(ibc->value_input),
+				dsync_ibc_stream_get_state(ibc));
 			dsync_ibc_stream_stop(ibc);
 			return -1;
 		}
@@ -258,9 +274,10 @@
 	i_assert(ret == -1);
 
 	if (ibc->value_output->stream_errno != 0) {
-		i_error("dsync(%s): read(%s) failed: %s",
+		i_error("dsync(%s): read(%s) failed: %s (%s)",
 			ibc->name, i_stream_get_name(ibc->value_output),
-			i_stream_get_error(ibc->value_output));
+			i_stream_get_error(ibc->value_output),
+			dsync_ibc_stream_get_state(ibc));
 		dsync_ibc_stream_stop(ibc);
 		return -1;
 	}
@@ -294,13 +311,8 @@
 
 static void dsync_ibc_stream_timeout(struct dsync_ibc_stream *ibc)
 {
-	i_error("dsync(%s): I/O has stalled, no activity for %u seconds "
-		"(last sent=%s%s, last recv=%s%s)",
-		ibc->name, ibc->timeout_secs,
-		items[ibc->last_sent_item].name,
-		ibc->last_sent_item_eol ? " (EOL)" : "",
-		items[ibc->last_recv_item].name,
-		ibc->last_recv_item_eol ? " (EOL)" : "");
+	i_error("dsync(%s): I/O has stalled, no activity for %u seconds (%s)",
+		ibc->name, ibc->timeout_secs, dsync_ibc_stream_get_state(ibc));
 	ibc->ibc.timeout = TRUE;
 	dsync_ibc_stream_stop(ibc);
 }
@@ -396,10 +408,7 @@
 			i_assert(ibc->input->eof);
 			str_printfa(error, "read(%s) failed: EOF", ibc->name);
 		}
-		if (!ibc->version_received)
-			str_append(error, " (version not received)");
-		else if (!ibc->handshake_received)
-			str_append(error, " (handshake not received)");
+		str_printfa(error, " (%s)", dsync_ibc_stream_get_state(ibc));
 		i_error("%s", str_c(error));
 		dsync_ibc_stream_stop(ibc);
 		return -1;


More information about the dovecot-cvs mailing list