#include <yaz/oid_db.h>
#include <yaz/snprintf.h>
-#define USE_TIMING 1
+#define USE_TIMING 0
#if USE_TIMING
#include <yaz/timing.h>
#endif
void session_apply_setting(struct session *se, char *dbname, char *name,
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 = dbname;
+ s->name = 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 = value;
+ }
+ session_leave(se, "session_apply_setting");
}
void session_destroy(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);
}
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
+ " fetched=%d filtered=%d",
+ client_get_id(cl),
+ client_get_hits(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