X-Git-Url: http://lists.indexdata.com/cgi-bin?a=blobdiff_plain;ds=sidebyside;f=src%2Fsession.c;h=69d05ae4fbaa0d482604e05363c8b6ae8ab54f05;hb=22ac82b6522cc7ed34f93fa8dbdcbff383d23dab;hp=e9784256a1be46fa5243edda8de9228569ae755e;hpb=84aba98c6b20e5363e47249d40e928eec42ccd72;p=pazpar2-moved-to-github.git diff --git a/src/session.c b/src/session.c index e978425..69d05ae 100644 --- a/src/session.c +++ b/src/session.c @@ -883,7 +883,7 @@ void session_init_databases(struct session *se) // Probably session_init_databases_fun should be refactored instead of // called here. static struct session_database *load_session_database(struct session *se, - char *id) + const char *id) { struct database *db = new_database_inherit_settings(id, se->session_nmem, se->service->settings); session_init_databases_fun((void*) se, db); @@ -894,7 +894,7 @@ static struct session_database *load_session_database(struct session *se, // Find an existing session database. If not found, load it static struct session_database *find_session_database(struct session *se, - char *id) + const char *id) { struct session_database *sdb; @@ -905,38 +905,39 @@ static struct session_database *find_session_database(struct session *se, } // Apply a session override to a database -void session_apply_setting(struct session *se, char *dbname, char *name, - char *value) +void session_apply_setting(struct session *se, const char *dbname, + const char *name, const char *value) { - struct session_database *sdb = find_session_database(se, dbname); - struct conf_service *service = se->service; - struct setting *s; - int offset = settings_create_offset(service, name); - - expand_settings_array(&sdb->settings, &sdb->num_settings, offset, - se->session_nmem); - - // Force later recompute of settings-driven data structures - // (happens when a search starts and client connections are prepared) - if (offset == PZ_XSLT) - sdb->map = 0; - - se->settings_modified = 1; - for (s = sdb->settings[offset]; s; s = s->next) - if (!strcmp(s->name, name) && - dbname && s->target && !strcmp(dbname, s->target)) + session_enter(se, "session_apply_setting"); + { + struct session_database *sdb = find_session_database(se, dbname); + struct conf_service *service = se->service; + struct setting *s; + int offset = settings_create_offset(service, name); + + expand_settings_array(&sdb->settings, &sdb->num_settings, offset, + se->session_nmem); + // Force later recompute of settings-driven data structures + // (happens when a search starts and client connections are prepared) + if (offset == PZ_XSLT) + sdb->map = 0; + se->settings_modified = 1; + for (s = sdb->settings[offset]; s; s = s->next) + if (!strcmp(s->name, name) && + dbname && s->target && !strcmp(dbname, s->target)) + break; + if (!s) { - s->value = value; - return; + s = nmem_malloc(se->session_nmem, sizeof(*s)); + s->precedence = 0; + s->target = nmem_strdup(se->session_nmem, dbname); + s->name = nmem_strdup(se->session_nmem, name); + s->next = sdb->settings[offset]; + sdb->settings[offset] = s; } - s = nmem_malloc(se->session_nmem, sizeof(*s)); - s->precedence = 0; - s->target = dbname; - s->name = name; - s->value = value; - s->next = sdb->settings[offset]; - sdb->settings[offset] = s; - + s->value = nmem_strdup(se->session_nmem, value); + } + session_leave(se, "session_apply_setting"); } void session_destroy(struct session *se) @@ -1038,13 +1039,13 @@ static struct hitsbytarget *hitsbytarget_nb(struct session *se, WRBUF w = wrbuf_alloc(); const char *name = session_setting_oneval(client_get_database(cl), PZ_NAME); - res[*count].id = client_get_id(cl); res[*count].name = *name ? name : "Unknown"; res[*count].hits = client_get_hits(cl); res[*count].approximation = client_get_approximation(cl); - res[*count].records = client_get_num_records(cl); - res[*count].filtered = client_get_num_records_filtered(cl); + res[*count].records = client_get_num_records(cl, + &res[*count].filtered, + 0, 0); res[*count].diagnostic = client_get_diagnostic(cl, &res[*count].message, &res[*count].addinfo); @@ -1280,14 +1281,24 @@ int session_fetch_more(struct session *se) } else { - session_log(se, YLOG_LOG, "%s: no more to fetch", - client_get_id(cl)); + int filtered; + int ingest_failures; + int record_failures; + int num = client_get_num_records( + cl, &filtered, &ingest_failures, &record_failures); + session_log(se, YLOG_LOG, "%s: hits=" ODR_INT_PRINTF - " records=%d filtered=%d", + " fetched=%d filtered=%d", client_get_id(cl), client_get_hits(cl), - client_get_num_records(cl), - client_get_num_records_filtered(cl)); + num, filtered); + if (ingest_failures || record_failures) + { + session_log(se, YLOG_WARN, "%s:" + " ingest failures=%d record failures=%d", + client_get_id(cl), + ingest_failures, record_failures); + } } } else