session_shared: restart (error recovery) configurable
authorAdam Dickmeiss <adam@indexdata.dk>
Wed, 8 Feb 2012 19:15:29 +0000 (20:15 +0100)
committerAdam Dickmeiss <adam@indexdata.dk>
Wed, 8 Feb 2012 19:15:29 +0000 (20:15 +0100)
Whether a search is restarted on errors or not, is configurable by
attribute restart in element resultset in configuration.

etc/config-shared1.xml
src/filter_session_shared.cpp
xml/schema/filter_session_shared.rnc

index 9e6b77e..240eae2 100644 (file)
@@ -20,7 +20,7 @@
         <limit bandwidth="50000" pdu="100" search="5" retrieve="50"/>
       </filter>
       <filter type="session_shared"> 
-       <resultset ttl="10" max="3" optimizesearch="false"/>
+       <resultset ttl="10" max="3" optimizesearch="false" restart="true"/>
        <session ttl="30"/>
       </filter>
       <filter type="log">
index 6066b4a..d733f5e 100644 (file)
@@ -195,6 +195,7 @@ namespace metaproxy_1 {
             int m_resultset_max;
             int m_session_ttl;
             bool m_optimize_search;
+            bool m_restart;
             int m_session_max;
         };
     }
@@ -757,9 +758,10 @@ restart:
                 
             }
         }
-        if (!session_restarted &&
+        if (m_p->m_restart && !session_restarted &&
             condition == YAZ_BIB1_TEMPORARY_SYSTEM_ERROR)
         {
+            package.log("session_shared", YLOG_LOG, "restart");
             bc->remove_backend(found_backend);
             session_restarted = true;
             found_backend.reset();
@@ -791,8 +793,9 @@ restart:
             return; // search error 
         }
     }
-    if (!session_restarted && new_set->m_result_set_size < 0)
+    if (m_p->m_restart && !session_restarted && new_set->m_result_set_size < 0)
     {
+        package.log("session_shared", YLOG_LOG, "restart");
         bc->remove_backend(found_backend);
         session_restarted = true;
         found_backend.reset();
@@ -1066,6 +1069,7 @@ yf::SessionShared::Rep::Rep()
     m_resultset_max = 10;
     m_session_ttl = 90;
     m_optimize_search = true;
+    m_restart = true;
     m_session_max = 100;
 }
 
@@ -1228,6 +1232,10 @@ void yf::SessionShared::configure(const xmlNode *ptr, bool test_only,
                     m_p->m_optimize_search =
                         mp::xml::get_bool(attr->children, true);
                 }
+                else if (!strcmp((const char *) attr->name, "restart"))
+                {
+                    m_p->m_restart = mp::xml::get_bool(attr->children, true);
+                }
                 else
                     throw mp::filter::FilterException(
                         "Bad attribute " + std::string((const char *)
index b99ea56..8b09c02 100644 (file)
@@ -9,7 +9,8 @@ filter_session_shared =
   element mp:resultset {
     attribute max { xsd:integer }?,
     attribute ttl { xsd:integer }?,
-    attribute optimizesearch { xsd:boolean }?
+    attribute optimizesearch { xsd:boolean }?,
+    attribute restart { xsd:boolean }?
   }?,
   element mp:session {
     attribute ttl { xsd:integer }?,