This is an automated email from the ASF dual-hosted git repository.

kgiusti pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/qpid-dispatch.git


The following commit(s) were added to refs/heads/main by this push:
     new 7203487  DISPATCH-2268: fix misleading log messages in the HTTP/1.x 
adaptor
7203487 is described below

commit 72034876c94aee730ef5b1556f1c86c9685103f1
Author: Kenneth Giusti <kgiu...@apache.org>
AuthorDate: Fri Oct 29 15:23:22 2021 -0400

    DISPATCH-2268: fix misleading log messages in the HTTP/1.x adaptor
---
 src/adaptors/http1/http1_adaptor.c | 14 ++++++++------
 src/adaptors/http1/http1_client.c  | 22 ++++++++++++++++------
 src/adaptors/http1/http1_private.h |  7 +++----
 src/adaptors/http1/http1_server.c  | 31 ++++++++++++++++++++-----------
 4 files changed, 47 insertions(+), 27 deletions(-)

diff --git a/src/adaptors/http1/http1_adaptor.c 
b/src/adaptors/http1/http1_adaptor.c
index 3828e89..86f782a 100644
--- a/src/adaptors/http1/http1_adaptor.c
+++ b/src/adaptors/http1/http1_adaptor.c
@@ -603,15 +603,17 @@ static void _core_conn_close(void *context, 
qdr_connection_t *conn, qdr_error_t
     qdr_http1_connection_t *hconn = (qdr_http1_connection_t*) 
qdr_connection_get_context(conn);
     if (hconn) {
         assert(hconn->qdr_conn == conn);
-        qd_log(qdr_http1_adaptor->log, QD_LOG_TRACE,
-               "[C%"PRIu64"] HTTP/1.x closing connection", hconn->conn_id);
+        char *desc = error ? qdr_error_description(error) : 0;
+
+        qd_log(qdr_http1_adaptor->log, QD_LOG_INFO,
+               "[C%"PRIu64"] HTTP/1.x %s", hconn->conn_id,
+               desc ? desc : "connection closed by management");
 
-        char *qdr_error = error ? qdr_error_description(error) : 0;
         if (hconn->type == HTTP1_CONN_SERVER)
-            qdr_http1_server_core_conn_close(qdr_http1_adaptor, hconn, 
qdr_error);
+            qdr_http1_server_core_conn_close(qdr_http1_adaptor, hconn);
         else
-            qdr_http1_client_core_conn_close(qdr_http1_adaptor, hconn, 
qdr_error);
-        free(qdr_error);
+            qdr_http1_client_core_conn_close(qdr_http1_adaptor, hconn);
+        free(desc);
     }
 }
 
diff --git a/src/adaptors/http1/http1_client.c 
b/src/adaptors/http1/http1_client.c
index fa73560..938b63f 100644
--- a/src/adaptors/http1/http1_client.c
+++ b/src/adaptors/http1/http1_client.c
@@ -24,6 +24,7 @@
 
 #include <proton/listener.h>
 #include <proton/proactor.h>
+#include <proton/netaddr.h>
 
 
 //
@@ -201,7 +202,7 @@ static void _handle_listener_events(pn_event_t *e, 
qd_server_t *qd_server, void
     }
 
     case PN_LISTENER_ACCEPT: {
-        qd_log(log, QD_LOG_INFO, "Accepting HTTP/1.x connection on %s", 
host_port);
+        qd_log(log, QD_LOG_DEBUG, "Accepting HTTP/1.x connection on %s", 
host_port);
         qdr_http1_connection_t *hconn = _create_client_connection(li);
         if (hconn) {
             // Note: the proactor may schedule the hconn on another thread
@@ -450,6 +451,16 @@ static void _handle_connection_events(pn_event_t *e, 
qd_server_t *qd_server, voi
 
     case PN_RAW_CONNECTION_CONNECTED: {
         _setup_client_connection(hconn);
+
+        const struct pn_netaddr_t *na = 
pn_raw_connection_remote_addr(hconn->raw_conn);
+        if (na) {
+            char buf[128];
+            if (pn_netaddr_str(na, buf, sizeof(buf)) > 0) {
+                qd_log(log, QD_LOG_INFO,
+                       "[C%"PRIu64"] HTTP/1.x client connection established 
from %s",
+                       hconn->conn_id, buf);
+            }
+        }
         break;
     }
     case PN_RAW_CONNECTION_CLOSED_READ: {
@@ -463,7 +474,7 @@ static void _handle_connection_events(pn_event_t *e, 
qd_server_t *qd_server, voi
         break;
     }
     case PN_RAW_CONNECTION_DISCONNECTED: {
-        qd_log(log, QD_LOG_INFO, "[C%"PRIu64"] Disconnected", hconn->conn_id);
+        qd_log(log, QD_LOG_INFO, "[C%"PRIu64"] HTTP/1.x client disconnected", 
hconn->conn_id);
         pn_raw_connection_set_context(hconn->raw_conn, 0);
 
         // prevent core from waking this connection
@@ -621,7 +632,7 @@ static void _handle_connection_events(pn_event_t *e, 
qd_server_t *qd_server, voi
     }
 
     if (need_close)
-        qdr_http1_close_connection(hconn, "Connection: close");
+        qdr_http1_close_connection(hconn, 0);
     else {
         hreq = (_client_request_t*) DEQ_HEAD(hconn->requests);
         if (hreq) {
@@ -1792,14 +1803,13 @@ void 
qdr_http1_client_conn_cleanup(qdr_http1_connection_t *hconn)
 // handle connection close request from management
 //
 void qdr_http1_client_core_conn_close(qdr_http1_adaptor_t *adaptor,
-                                      qdr_http1_connection_t *hconn,
-                                      const char *error)
+                                      qdr_http1_connection_t *hconn)
 {
     // initiate close of the raw conn.  the adaptor will call
     // qdr_connection_close() and clean up once the DISCONNECT
     // event is processed
     //
-    qdr_http1_close_connection(hconn, error);
+    qdr_http1_close_connection(hconn, 0);
 }
 
 static void _deliver_request(qdr_http1_connection_t *hconn, _client_request_t 
*hreq)
diff --git a/src/adaptors/http1/http1_private.h 
b/src/adaptors/http1/http1_private.h
index 1d4a987..39bbd1b 100644
--- a/src/adaptors/http1/http1_private.h
+++ b/src/adaptors/http1/http1_private.h
@@ -241,8 +241,8 @@ void 
qdr_http1_client_core_delivery_update(qdr_http1_adaptor_t      *adaptor,
                                            bool                      settled);
 void qdr_http1_client_conn_cleanup(qdr_http1_connection_t *hconn);
 void qdr_http1_client_core_conn_close(qdr_http1_adaptor_t *adaptor,
-                                      qdr_http1_connection_t *hconn,
-                                      const char *error);
+                                      qdr_http1_connection_t *hconn);
+
 // http1_server.c protocol adaptor callbacks
 //
 void qdr_http1_server_core_link_flow(qdr_http1_adaptor_t    *adaptor,
@@ -262,8 +262,7 @@ void 
qdr_http1_server_core_delivery_update(qdr_http1_adaptor_t      *adaptor,
                                            bool                      settled);
 void qdr_http1_server_conn_cleanup(qdr_http1_connection_t *hconn);
 void qdr_http1_server_core_conn_close(qdr_http1_adaptor_t *adaptor,
-                                      qdr_http1_connection_t *hconn,
-                                      const char *error);
+                                      qdr_http1_connection_t *hconn);
 
 // recording of stats:
 void qdr_http1_record_client_request_info(qdr_http1_adaptor_t *adaptor, 
qdr_http1_request_base_t *request);
diff --git a/src/adaptors/http1/http1_server.c 
b/src/adaptors/http1/http1_server.c
index a2e93bd..a410a18 100644
--- a/src/adaptors/http1/http1_server.c
+++ b/src/adaptors/http1/http1_server.c
@@ -153,7 +153,7 @@ static qdr_http1_connection_t 
*_create_server_connection(qd_http_connector_t *ct
     ZERO(hconn);
     hconn->type = HTTP1_CONN_SERVER;
     hconn->admin_status = QD_CONN_ADMIN_ENABLED;
-    hconn->oper_status = QD_CONN_OPER_UP;
+    hconn->oper_status = QD_CONN_OPER_DOWN;  // until TCP connection ready
     hconn->qd_server = qd->server;
     hconn->adaptor = qdr_http1_adaptor;
     hconn->handler_context.handler = &_handle_connection_events;
@@ -542,6 +542,11 @@ static void _handle_connection_events(pn_event_t *e, 
qd_server_t *qd_server, voi
     switch (pn_event_type(e)) {
 
     case PN_RAW_CONNECTION_CONNECTED: {
+        if (hconn->oper_status == QD_CONN_OPER_DOWN) {
+            hconn->oper_status = QD_CONN_OPER_UP;
+            qd_log(log, QD_LOG_INFO, "[C%"PRIu64"] HTTP/1.x server %s 
connection established",
+                   hconn->conn_id, hconn->cfg.host_port);
+        }
         hconn->server.link_timeout = 0;
         _setup_server_links(hconn);
         while (qdr_connection_process(hconn->qdr_conn)) {}
@@ -571,8 +576,6 @@ static void _handle_connection_events(pn_event_t *e, 
qd_server_t *qd_server, voi
         break;
     }
     case PN_RAW_CONNECTION_DISCONNECTED: {
-        qd_log(log, QD_LOG_INFO, "[C%"PRIu64"] Connection closed", 
hconn->conn_id);
-
         pn_raw_connection_set_context(hconn->raw_conn, 0);
 
         // Check for a request that is in-progress - it needs to be cancelled.
@@ -600,8 +603,16 @@ static void _handle_connection_events(pn_event_t *e, 
qd_server_t *qd_server, voi
                 hconn->server.link_timeout = qd_timer_now() + 
LINK_TIMEOUT_MSEC;
                 hconn->server.reconnect_pause = 0;
             } else {
-                if ((qd_timer_now() - hconn->server.link_timeout) >= 0)
+                if ((qd_timer_now() - hconn->server.link_timeout) >= 0) {
                     _teardown_server_links(hconn);
+                    // at this point we've unbound the service address so no
+                    // more messages will be sent to us. Notify meatspace:
+                    if (hconn->oper_status == QD_CONN_OPER_UP) {
+                        hconn->oper_status = QD_CONN_OPER_DOWN;
+                        qd_log(log, QD_LOG_INFO, "[C%"PRIu64"] HTTP/1.x server 
%s disconnected",
+                               hconn->conn_id, hconn->cfg.host_port);
+                    }
+                }
                 if (hconn->server.reconnect_pause < RETRY_MAX_PAUSE_MSEC)
                     hconn->server.reconnect_pause += RETRY_PAUSE_MSEC;
             }
@@ -677,8 +688,8 @@ static void _handle_connection_events(pn_event_t *e, 
qd_server_t *qd_server, voi
     } else {
         bool need_close = _process_request((_server_request_t*) 
DEQ_HEAD(hconn->requests));
         if (need_close) {
-            qd_log(log, QD_LOG_DEBUG, "[C%"PRIu64"] Closing connection!", 
hconn->conn_id);
-            qdr_http1_close_connection(hconn, "HTTP Request requires 
connection close");
+            qd_log(log, QD_LOG_DEBUG, "[C%"PRIu64"] HTTP Request requires 
connection close", hconn->conn_id);
+            qdr_http1_close_connection(hconn, 0);
         }
     }
 }
@@ -1723,13 +1734,11 @@ static void _cancel_request(_server_request_t *hreq)
 // handle connection close request from management
 //
 void qdr_http1_server_core_conn_close(qdr_http1_adaptor_t *adaptor,
-                                      qdr_http1_connection_t *hconn,
-                                      const char *error)
+                                      qdr_http1_connection_t *hconn)
 {
-    qdr_connection_t *qdr_conn = hconn->qdr_conn;
-
     // prevent activation by core thread
     sys_mutex_lock(qdr_http1_adaptor->lock);
+    qdr_connection_t *qdr_conn = hconn->qdr_conn;
     qdr_connection_set_context(hconn->qdr_conn, 0);
     hconn->qdr_conn = 0;
     sys_mutex_unlock(qdr_http1_adaptor->lock);
@@ -1738,7 +1747,7 @@ void qdr_http1_server_core_conn_close(qdr_http1_adaptor_t 
*adaptor,
     hconn->oper_status = QD_CONN_OPER_DOWN;
     _teardown_server_links(hconn);
     qdr_connection_closed(qdr_conn);
-    qdr_http1_close_connection(hconn, error);
+    qdr_http1_close_connection(hconn, 0);
 
     // it is expected that this callback is the final callback before returning
     // from qdr_connection_process(). Free hconn when qdr_connection_process 
returns.

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org
For additional commands, e-mail: commits-h...@qpid.apache.org

Reply via email to