LP#1268619: websocket gateway: improved memory mgt; logging
authorBill Erickson <berick@esilibrary.com>
Fri, 25 Jan 2013 17:38:13 +0000 (12:38 -0500)
committerGalen Charlton <gmc@esilibrary.com>
Tue, 19 Aug 2014 22:50:47 +0000 (15:50 -0700)
Signed-off-by: Bill Erickson <berick@esilibrary.com>
Signed-off-by: Galen Charlton <gmc@esilibrary.com>

src/gateway/Makefile.am
src/gateway/osrf_websocket_translator.c
src/javascript/opensrf_ws.js

index 27e9cc1..04a7632 100644 (file)
@@ -37,7 +37,7 @@ install-exec-local:
        $(MKDIR_P) $(DESTDIR)$(AP_LIBEXECDIR)
        $(APXS2) -i -S LIBEXECDIR=$(DESTDIR)$(AP_LIBEXECDIR) -a @srcdir@/osrf_json_gateway.la
        $(APXS2) -i -S LIBEXECDIR=$(DESTDIR)$(AP_LIBEXECDIR) -a @srcdir@/osrf_http_translator.la
-       $(APXS2) -i -S LIBEXECDIR=$(DESTDIR)$(AP_LIBEXECDIR) -a @srcdir@/osrf_websocket_translator.la
+       $(APXS2) -n osrf_websocket_translator -i -S LIBEXECDIR=$(DESTDIR)$(AP_LIBEXECDIR) -a @srcdir@/osrf_websocket_translator.la
 
 clean-local:
        rm -f @srcdir@/osrf_http_translator.la @srcdir@/osrf_http_translator.lo @srcdir@/osrf_http_translator.slo @srcdir@/osrf_json_gateway.la @srcdir@/osrf_json_gateway.lo @srcdir@/osrf_json_gateway.slo  @srcdir@/osrf_websocket_translator.la @srcdir@/osrf_websocket_translator.lo @srcdir@/osrf_websocket_translator.slo
index dc8653e..b430871 100644 (file)
@@ -168,8 +168,7 @@ void* osrf_responder_thread_main_body(transport_message *tmsg) {
     int i;
 
     osrfLogDebug(OSRF_LOG_MARK, 
-        "WS received opensrf response for thread=%s, xid=%s", 
-            tmsg->thread, tmsg->osrf_xid);
+        "WS received opensrf response for thread=%s", tmsg->thread);
 
     // first we need to perform some maintenance
     msg_list = osrfMessageDeserialize(tmsg->body, NULL);
@@ -213,19 +212,18 @@ void* osrf_responder_thread_main_body(transport_message *tmsg) {
         }
     }
 
-    // maintenance is done
-    msg_list->freeItem = osrfMessageFree;
+    // osrfMessageDeserialize applies the freeItem handler to the 
+    // newly created osrfList.  We only need to free the list and 
+    // the individual osrfMessage's will be freed along with it
     osrfListFree(msg_list);
 
     if (!trans->client_connected) {
 
-        osrfLogDebug(OSRF_LOG_MARK, 
-            "WS discarding response for thread=%s, xid=%s", 
-            tmsg->thread, tmsg->osrf_xid);
+        osrfLogInfo(OSRF_LOG_MARK, 
+            "WS discarding response for thread=%s", tmsg->thread);
 
         return;
     }
-
     
     // client is still connected. 
     // relay the response messages to the client
@@ -240,8 +238,8 @@ void* osrf_responder_thread_main_body(transport_message *tmsg) {
 
     if (tmsg->is_error) {
         osrfLogError(OSRF_LOG_MARK, 
-            "WS received jabber error message in response to thread=%s and xid=%s", 
-            tmsg->thread, tmsg->osrf_xid);
+            "WS received jabber error message in response to thread=%s", 
+            tmsg->thread);
         jsonObjectSetKey(msg_wrapper, "transport_error", jsonNewBoolObject(1));
     }
 
@@ -281,6 +279,7 @@ void* APR_THREAD_FUNC osrf_responder_thread_main(apr_thread_t *thread, void *dat
             return NULL;
         }
 
+        osrfLogForceXid(tmsg->osrf_xid);
         osrf_responder_thread_main_body(tmsg);
         message_free(tmsg);                                                         
     }
@@ -379,7 +378,7 @@ void* CALLBACK on_connect_handler(const WebSocketServer *server) {
     request_rec *r = server->request(server);
     apr_pool_t *pool;
 
-    osrfLogDebug(OSRF_LOG_MARK, 
+    osrfLogInfo(OSRF_LOG_MARK, 
         "WS connect from %s", r->connection->remote_ip); 
         //"WS connect from %s", r->connection->client_ip); // apache 2.4
 
@@ -479,8 +478,6 @@ static char* extract_inbound_messages(
                 clear_cached_recipient(thread);
                 break;
         }
-
-        osrfMessageFree(msg);
     }
 
     char* finalMsg = osrfMessageSerializeBatch(msg_list, num_msgs);
@@ -513,6 +510,10 @@ static size_t on_message_handler_body(void *data,
 
     if (buffer_size <= 0) return OK;
 
+    // generate a new log trace for this request. it 
+    // may be replaced by a client-provided trace below.
+    osrfLogMkXid();
+
     osrfLogDebug(OSRF_LOG_MARK, "WS received message size=%d", buffer_size);
 
     // buffer may not be \0-terminated, which jsonParse requires
@@ -546,13 +547,7 @@ static size_t on_message_handler_body(void *data,
             return HTTP_BAD_REQUEST;
         }
 
-        // TODO: make this work with non-client and make this call accept 
-        // const char*'s.  casting to (char*) for now to silence warnings.
-        osrfLogSetXid((char*) log_xid); 
-
-    } else {
-        // generate a new log trace id for this relay
-        osrfLogMkXid();
+        osrfLogForceXid(log_xid);
     }
 
     if (thread) {
@@ -587,8 +582,8 @@ static size_t on_message_handler_body(void *data,
     }
 
     osrfLogDebug(OSRF_LOG_MARK, 
-        "WS relaying message thread=%s, xid=%s, recipient=%s", 
-            thread, osrfLogGetXid(), recipient);
+        "WS relaying message to opensrf thread=%s, recipient=%s", 
+            thread, recipient);
 
     msg_body = extract_inbound_messages(
         r, service, thread, recipient, osrf_msg);
@@ -648,7 +643,7 @@ void CALLBACK on_disconnect_handler(
 
     request_rec *r = server->request(server);
 
-    osrfLogDebug(OSRF_LOG_MARK, 
+    osrfLogInfo(OSRF_LOG_MARK, 
         "WS disconnect from %s", r->connection->remote_ip); 
         //"WS disconnect from %s", r->connection->client_ip); // apache 2.4
 }
index 62302be..4df7c8f 100644 (file)
@@ -65,7 +65,7 @@ OpenSRF.WebSocketConnection.prototype.setupSocket = function() {
 
 /** default onmessage handler: push the message up the opensrf stack */
 OpenSRF.WebSocketConnection.default_onmessage = function(evt) {
-    console.log('receiving: ' + evt.data);
+    //console.log('receiving: ' + evt.data);
     var msg = JSON2js(evt.data);
     OpenSRF.Stack.push(
         new OpenSRF.NetMessage(
@@ -153,7 +153,7 @@ OpenSRF.WebSocketRequest.prototype.send = function(message) {
     };
 
     var json = js2JSON(wrapper);
-    console.log('sending: ' + json);
+    //console.log('sending: ' + json);
 
     // drop it on the wire
     this.wsc.socket.send(json);