From 32ab4b133c9c96780e8b202ab1efe46bbf321c3b Mon Sep 17 00:00:00 2001 From: Bill Erickson Date: Fri, 25 Jan 2013 12:38:13 -0500 Subject: [PATCH 1/1] LP#1268619: websocket gateway: improved memory mgt; logging Signed-off-by: Bill Erickson Signed-off-by: Galen Charlton --- src/gateway/Makefile.am | 2 +- src/gateway/osrf_websocket_translator.c | 41 +++++++++++-------------- src/javascript/opensrf_ws.js | 4 +-- 3 files changed, 21 insertions(+), 26 deletions(-) diff --git a/src/gateway/Makefile.am b/src/gateway/Makefile.am index 27e9cc1..04a7632 100644 --- a/src/gateway/Makefile.am +++ b/src/gateway/Makefile.am @@ -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 diff --git a/src/gateway/osrf_websocket_translator.c b/src/gateway/osrf_websocket_translator.c index dc8653e..b430871 100644 --- a/src/gateway/osrf_websocket_translator.c +++ b/src/gateway/osrf_websocket_translator.c @@ -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 } diff --git a/src/javascript/opensrf_ws.js b/src/javascript/opensrf_ws.js index 62302be..4df7c8f 100644 --- a/src/javascript/opensrf_ws.js +++ b/src/javascript/opensrf_ws.js @@ -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); -- 2.43.2