[OpenSRF-GIT] OpenSRF branch rel_3_0 updated. osrf_rel_3_0_0-2-g0c7f94a

Evergreen Git git at git.evergreen-ils.org
Thu Feb 1 15:53:17 EST 2018


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "OpenSRF".

The branch, rel_3_0 has been updated
       via  0c7f94abf5911cdf042c1162705e721a4fd2899f (commit)
       via  0cb4209fa03091b62df2793a7b273e0c981798d3 (commit)
      from  7cdc01b972ca2d447d7cbd8b9410a494bf1f6112 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 0c7f94abf5911cdf042c1162705e721a4fd2899f
Author: Bill Erickson <berickxx at gmail.com>
Date:   Wed Jan 24 15:16:14 2018 -0500

    LP#1744158 Websocket proc exits on ejabberd disconnect
    
    Any errors relaying websocket messages to OpenSRF now result in the WS
    client being disconnected, allowing the WS process to exit.  This
    prevents the WS gateway from accepting requests it cannot process and
    allows the client to connect to a new WS process.
    
    Signed-off-by: Bill Erickson <berickxx at gmail.com>
    Signed-off-by: Jason Stephenson <jason at sigio.com>

diff --git a/src/gateway/osrf_websocket_translator.c b/src/gateway/osrf_websocket_translator.c
index f43fb62..2d3a5e1 100644
--- a/src/gateway/osrf_websocket_translator.c
+++ b/src/gateway/osrf_websocket_translator.c
@@ -911,8 +911,12 @@ static size_t on_message_handler_body(void *data,
         msg_body, NULL, thread, recipient, NULL);
 
     message_set_osrf_xid(tmsg, osrfLogGetXid());
-    client_send_message(osrf_handle, tmsg);
 
+    size_t stat = OK;
+    if (client_send_message(osrf_handle, tmsg) != 0) {
+        osrfLogError(OSRF_LOG_MARK, "WS failed sending data to OpenSRF");
+        stat = HTTP_INTERNAL_SERVER_ERROR;
+    }
 
     osrfLogClearXid();
     message_free(tmsg);                                                         
@@ -920,7 +924,7 @@ static size_t on_message_handler_body(void *data,
     free(msg_body);
 
     last_activity_time = time(NULL);
-    return OK;
+    return stat;
 }
 
 static size_t CALLBACK on_message_handler(void *data,
@@ -929,16 +933,25 @@ static size_t CALLBACK on_message_handler(void *data,
 
     if (apr_thread_mutex_lock(trans->mutex) != APR_SUCCESS) {
         osrfLogError(OSRF_LOG_MARK, "WS error locking thread mutex");
-        return 1; // TODO: map to apr_status_t value?
+        return 1;
     }
 
-    apr_status_t stat = on_message_handler_body(data, server, type, buffer, buffer_size);
+    size_t stat = on_message_handler_body(data, server, type, buffer, buffer_size);
 
     if (apr_thread_mutex_unlock(trans->mutex) != APR_SUCCESS) {
         osrfLogError(OSRF_LOG_MARK, "WS error locking thread mutex");
         return 1;
     }
 
+    if (stat != OK) {
+        // Returning a non-OK status alone won't force a disconnect.
+        // Once disconnected, the on_disconnect_handler() handler
+        // will run, clean it all up, and kill the process.
+        osrfLogError(OSRF_LOG_MARK,
+            "Error relaying message, forcing client disconnect");
+        trans->server->close(trans->server);
+    }
+
     return stat;
 }
 

commit 0cb4209fa03091b62df2793a7b273e0c981798d3
Author: Bill Erickson <berickxx at gmail.com>
Date:   Wed Jan 31 13:07:41 2018 -0500

    LP#1746577 Websocket responder exits on jabber disconnect
    
    Regularly check for Jabber socket disconnects in the websocket gateway
    "responder" thread (that relays messages from opensrf to the WS client)
    and force a client disconnect when a broken jabber socket is detected.
    
    Signed-off-by: Bill Erickson <berickxx at gmail.com>
    Signed-off-by: Chris Sharp <csharp at georgialibraries.org>
    Signed-off-by: Jason Stephenson <jason at sigio.com>

diff --git a/src/gateway/osrf_websocket_translator.c b/src/gateway/osrf_websocket_translator.c
index ef8d4af..f43fb62 100644
--- a/src/gateway/osrf_websocket_translator.c
+++ b/src/gateway/osrf_websocket_translator.c
@@ -344,10 +344,26 @@ void* APR_THREAD_FUNC osrf_responder_thread_main(apr_thread_t *thread, void *dat
             return NULL;
         }
 
-        // wait for a response
+        // wait indefinitely for a response
         tmsg = client_recv(osrf_handle, -1);
 
-        if (!tmsg) continue; // interrupt
+        if (!tmsg) {
+            // tmsg can only be NULL if the underlying select() call is
+            // interrupted or the jabber socket connection was severed.
+
+            if (client_connected(osrf_handle) &&
+                socket_connected(osrf_handle->session->sock_id)) {
+                continue; // interrupted.  restart loop.
+            }
+
+            // Socket connection was broken.  Send disconnect to client,
+            // causing on_disconnect_handler to run and cleanup.
+            osrfLogWarning(OSRF_LOG_MARK, 
+                "WS: Jabber socket disconnected. Sending close() to client");
+
+            trans->server->close(trans->server);
+            return NULL; // exit thread
+        }
 
         if (trans->client_connected) {
 

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

Summary of changes:
 src/gateway/osrf_websocket_translator.c |   41 ++++++++++++++++++++++++++----
 1 files changed, 35 insertions(+), 6 deletions(-)


hooks/post-receive
-- 
OpenSRF


More information about the opensrf-commits mailing list