From: Dennis Schafroth Date: Wed, 30 Mar 2011 13:40:36 +0000 (+0200) Subject: Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/pazpar2 X-Git-Tag: v1.5.6~15 X-Git-Url: http://lists.indexdata.dk/cgi-bin?a=commitdiff_plain;h=99d669382f8eb02f3ff0f100c848bb6382310339;hp=-c;p=pazpar2-moved-to-github.git Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/pazpar2 --- 99d669382f8eb02f3ff0f100c848bb6382310339 diff --combined src/http_command.c index 750623a,8c21c8c..9d464d6 --- a/src/http_command.c +++ b/src/http_command.c @@@ -41,6 -41,29 +41,29 @@@ Foundation, Inc., 51 Franklin St, Fift #include "settings.h" #include "client.h" + #include + + void print_meminfo(WRBUF wrbuf) { + #ifdef __GNUC__ + struct mallinfo minfo; + minfo = mallinfo(); + wrbuf_printf(wrbuf, " \n" + " %d\n" + " %d\n" + " %d\n" + " %d\n" + " %d\n" + " %d\n" + " %d\n" + " %d\n" + " %d\n" + " \n", + minfo.arena, minfo.uordblks, minfo.fordblks,minfo.ordblks, minfo.keepcost, minfo.hblks, minfo.hblkhd, minfo.arena + minfo.hblkhd, minfo.uordblks + minfo.hblkhd); + + #endif + } + + // Update this when the protocol changes #define PAZPAR2_PROTOCOL_VERSION "1" @@@ -246,7 -269,7 +269,7 @@@ unsigned int make_sessionid(void unsigned int res; seq++; - if (global_parameters.debug_mode) + if (global_parameters.predictable_sessions) res = seq; else { @@@ -339,12 -362,7 +362,12 @@@ static int process_settings(struct sess static void cmd_exit(struct http_channel *c) { + char buf[1024]; + struct http_response *rs = c->response; yaz_log(YLOG_WARN, "exit"); + sprintf(buf, HTTP_COMMAND_RESPONSE_PREFIX "OK"); + rs->payload = nmem_strdup(c->nmem, buf); + http_send_response(c); http_close_server(c->server); } @@@ -637,6 -655,7 +660,7 @@@ static void cmd_server_status(struct ht wrbuf_printf(c->wrbuf, " %u\n", clients); /* Only works if yaz has been compiled with enabling of this */ wrbuf_printf(c->wrbuf, " %u\n",resultsets); + print_meminfo(c->wrbuf); /* TODO add all sessions status */ /* http_sessions_t http_sessions = c->http_sessions; */ @@@ -702,11 -721,10 +726,10 @@@ static void cmd_bytarget(struct http_ch if (settings && *settings == '1') { wrbuf_puts(c->wrbuf, "\n"); - wrbuf_puts(c->wrbuf, wrbuf_cstr(ht[i].settings_xml)); + wrbuf_puts(c->wrbuf, ht[i].settings_xml); wrbuf_puts(c->wrbuf, "\n"); } wrbuf_puts(c->wrbuf, ""); - wrbuf_destroy(ht[i].settings_xml); } wrbuf_puts(c->wrbuf, ""); diff --combined src/session.c index 405d53b,7b6e78a..8a3c0f9 --- a/src/session.c +++ b/src/session.c @@@ -86,7 -86,8 +86,8 @@@ Foundation, Inc., 51 Franklin St, Fift struct parameters global_parameters = { 0, // dump_records - 0 // debug_mode + 0, // debug_mode + 0, // predictable sessions }; struct client_list { @@@ -97,7 -98,6 +98,7 @@@ /* session counting (1) , disable client counting (0) */ static YAZ_MUTEX g_session_mutex = 0; static int no_sessions = 0; +static int no_session_total = 0; static int session_use(int delta) { @@@ -106,8 -106,6 +107,8 @@@ yaz_mutex_create(&g_session_mutex); yaz_mutex_enter(g_session_mutex); no_sessions += delta; + if (delta > 0) + no_session_total += delta; sessions = no_sessions; yaz_mutex_leave(g_session_mutex); yaz_log(YLOG_DEBUG, "%s sesions=%d", delta == 0 ? "" : (delta > 0 ? "INC" : "DEC"), no_sessions); @@@ -118,17 -116,6 +119,17 @@@ int sessions_count(void) return session_use(0); } +int session_count_total(void) { + int total = 0; + if (!g_session_mutex) + return 0; + yaz_mutex_enter(g_session_mutex); + total = no_session_total; + yaz_mutex_leave(g_session_mutex); + return total; +} + + static void log_xml_doc(xmlDoc *doc) { FILE *lf = yaz_log_file(); @@@ -759,13 -746,8 +760,13 @@@ void session_apply_setting(struct sessi } } +/* Depreciated: use session_destroy */ void destroy_session(struct session *se) { + session_destroy(se); +} + +void session_destroy(struct session *se) { struct session_database *sdb; session_log(se, YLOG_DEBUG, "Destroying"); session_use(-1); @@@ -780,10 -762,8 +781,10 @@@ service_destroy(se->service); yaz_mutex_destroy(&se->session_mutex); wrbuf_destroy(se->wrbuf); + } + size_t session_get_memory_status(struct session *session) { size_t session_nmem; if (session == 0) @@@ -859,7 -839,8 +860,8 @@@ struct hitsbytarget *hitsbytarget(struc res[*count].state = client_get_state_str(cl); res[*count].connected = client_get_connection(cl) ? 1 : 0; session_settings_dump(se, client_get_database(cl), w); - res[*count].settings_xml = w; + res[*count].settings_xml = nmem_strdup(nmem, wrbuf_cstr(w)); + wrbuf_destroy(w); (*count)++; } session_leave(se); @@@ -1262,7 -1243,6 +1264,7 @@@ static int ingest_to_cluster(struct cli \param nmem working NMEM \retval 0 OK \retval -1 failure + \retval -2 Filtered */ int ingest_record(struct client *cl, const char *rec, int record_no, NMEM nmem) @@@ -1282,10 -1262,10 +1284,10 @@@ if (!check_record_filter(root, sdb)) { - session_log(se, YLOG_WARN, "Filtered out record no %d from %s", + session_log(se, YLOG_LOG, "Filtered out record no %d from %s", record_no, sdb->database->url); xmlFreeDoc(xdoc); - return -1; + return -2; } mergekey_norm = get_mergekey(xdoc, cl, record_no, service, nmem);