Deal with targets that return negative hit counts.
[pazpar2-moved-to-github.git] / src / client.c
index 25dae7a..048c95c 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: client.c,v 1.19 2007-09-05 08:40:12 adam Exp $
+/* $Id: client.c,v 1.22 2007-09-19 13:23:35 adam Exp $
    Copyright (c) 2006-2007, Index Data.
 
 This file is part of Pazpar2.
@@ -137,6 +137,12 @@ enum client_state client_get_state(struct client *cl)
 void client_set_state(struct client *cl, enum client_state st)
 {
     cl->state = st;
+    if (cl->session)
+    {
+        int no_active = session_active_clients(cl->session);
+        if (no_active == 0)
+            session_alert_watch(cl->session, SESSION_WATCH_SHOW);
+    }
 }
 
 static void client_show_raw_error(struct client *cl, const char *addinfo);
@@ -147,7 +153,7 @@ void client_fatal(struct client *cl)
     client_show_raw_error(cl, "client connection failure");
     yaz_log(YLOG_WARN, "Fatal error from %s", client_get_url(cl));
     connection_destroy(cl->connection);
-    cl->state = Client_Error;
+    client_set_state(cl, Client_Error);
 }
 
 
@@ -606,7 +612,13 @@ void client_search_response(struct client *cl, Z_APDU *a)
     if (*r->searchStatus)
     {
        cl->hits = *r->resultCount;
-        se->total_hits += cl->hits;
+        if (cl->hits < 0)
+        {
+            yaz_log(YLOG_WARN, "Target %s returns hit count %d",
+                    cl->database->database->url, cl->hits);
+        }
+        else
+            se->total_hits += cl->hits;
         if (r->presentStatus && !*r->presentStatus && r->records)
         {
             yaz_log(YLOG_DEBUG, "Records in search response %s", 
@@ -946,9 +958,10 @@ int client_parse_query(struct client *cl, const char *query)
         // Initialize relevance structure with query terms
         char *p[512];
         extract_terms(se->nmem, cn, p);
-        se->relevance = relevance_create(client_get_database(cl)->pct,
-                                         se->nmem, (const char **) p,
-                                         se->expected_maxrecs);
+        se->relevance = relevance_create(
+            global_parameters.server->relevance_pct,
+            se->nmem, (const char **) p,
+            se->expected_maxrecs);
     }
 
     ccl_rpn_delete(cn);