Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/metaproxy
authorAdam Dickmeiss <adam@indexdata.dk>
Tue, 12 Mar 2013 18:05:40 +0000 (19:05 +0100)
committerAdam Dickmeiss <adam@indexdata.dk>
Tue, 12 Mar 2013 18:05:40 +0000 (19:05 +0100)
doc/book.xml
doc/log.xml
etc/config3.xml
src/filter_multi.cpp

index cdc545c..3d1587b 100644 (file)
 
    <row>
     <entry><ulink url="&url.usemarcon;">USEMARCON</ulink></entry>
-    <entry>Unsupported</entry>
+    <entry>Supported with <literal>record_transform</literal></entry>
     <entry>Supported</entry>
    </row>
 
index 9d18763..80708cd 100644 (file)
          </para>
         </listitem>
        </varlistentry>
+       <varlistentry><term>line</term>
+        <listitem>
+         <para>
+          Simple one-line log message indicating the most important
+          things from a request and response.
+          Available from version 1.3.38 and later.
+         </para>
+        </listitem>
+       </varlistentry>
        </variablelist>
 
       </para>
index 502aaa8..6238126 100644 (file)
@@ -11,7 +11,7 @@
       </filter>
       <filter type="log">
         <message>F</message>
-       <category session="true" apdu="true"/>
+       <category access="false" line="true"/>
       </filter>
       <filter type="virt_db">
         <pass-vhosts>true</pass-vhosts>
@@ -56,6 +56,7 @@
       </filter>
       <filter type="log">
         <message>M</message>
+       <category access="false" line="true"/>
       </filter>
       <filter type="multi">
         <hideunavailable/>
@@ -63,7 +64,7 @@
       </filter>
       <filter type="log">
         <message>B</message>
-       <category session="true"/>
+       <category access="false" line="true"/>
       </filter>
       <filter type="z3950_client">
         <timeout>30</timeout>
index baadef4..b1452c3 100644 (file)
@@ -104,8 +104,7 @@ namespace metaproxy_1 {
             void close(Package &package);
             void search(Package &package, Z_APDU *apdu);
             void present(Package &package, Z_APDU *apdu);
-            void scan1(Package &package, Z_APDU *apdu);
-            void scan2(Package &package, Z_APDU *apdu);
+            void scan(Package &package, Z_APDU *apdu);
             void relay_apdu(Package &package, Z_APDU *apdu);
             void record_diagnostics(Z_Records *records, 
                                     Z_DiagRecs * &z_diag,
@@ -617,33 +616,27 @@ void yf::Multi::Frontend::search(mp::Package &package, Z_APDU *apdu_req)
     // create search request
     Z_SearchRequest *req = apdu_req->u.searchRequest;
 
-    // save these for later
-    Odr_int smallSetUpperBound = *req->smallSetUpperBound;
-    Odr_int largeSetLowerBound = *req->largeSetLowerBound;
-    Odr_int mediumSetPresentNumber = *req->mediumSetPresentNumber;
-
-    // they are altered now - to disable piggyback
-    *req->smallSetUpperBound = 0;
-    *req->largeSetLowerBound = 1;
-    *req->mediumSetPresentNumber = 0;
-
-    int default_num_db = req->num_databaseNames;
-    char **default_db = req->databaseNames;
-
     std::list<BackendPtr>::const_iterator bit;
     for (bit = m_backend_list.begin(); bit != m_backend_list.end(); bit++)
     {
         PackagePtr p = (*bit)->m_package;
+        yazpp_1::GDU gdu1(apdu_req);
         mp::odr odr;
+        Z_SearchRequest *req1 = gdu1.get()->u.z3950->u.searchRequest;
+
+        // they are altered now - to disable piggyback
+        *req1->smallSetUpperBound = 0;
+        *req1->largeSetLowerBound = 1;
+        *req1->mediumSetPresentNumber = 0;
 
         if (!mp::util::set_databases_from_zurl(odr, (*bit)->m_vhost,
-                                                &req->num_databaseNames,
-                                                &req->databaseNames))
+                                               &req1->num_databaseNames,
+                                               &req1->databaseNames))
         {
-            req->num_databaseNames = default_num_db;
-            req->databaseNames = default_db;
+            req1->num_databaseNames = req->num_databaseNames;
+            req1->databaseNames = req->databaseNames;
         }
-        p->request() = apdu_req;
+        p->request() = gdu1;
         p->copy_filter(package);
     }
     multi_move(m_backend_list);
@@ -685,7 +678,7 @@ void yf::Multi::Frontend::search(mp::Package &package, Z_APDU *apdu_req)
     Z_APDU *f_apdu = odr.create_searchResponse(apdu_req, 0, 0);
     Z_SearchResponse *f_resp = f_apdu->u.searchResponse;
 
-    yaz_log(YLOG_LOG, "no_successful=%d is_closed=%s hide_errors=%s",
+    yaz_log(YLOG_DEBUG, "no_successful=%d is_closed=%s hide_errors=%s",
             no_successful,
             close_p ? "true" : "false",
             m_p->m_hide_errors ? "true" : "false");
@@ -716,9 +709,9 @@ void yf::Multi::Frontend::search(mp::Package &package, Z_APDU *apdu_req)
     m_sets[resultSet.m_setname] = resultSet;
 
     Odr_int number;
-    mp::util::piggyback(smallSetUpperBound,
-                        largeSetLowerBound,
-                        mediumSetPresentNumber,
+    mp::util::piggyback(*req->smallSetUpperBound,
+                        *req->largeSetLowerBound,
+                        *req->mediumSetPresentNumber,
                         0, 0,
                         result_set_size,
                         number, 0);
@@ -790,7 +783,7 @@ void yf::Multi::Frontend::present(mp::Package &package, Z_APDU *apdu_req)
         std::list<Multi::FrontendSet::PresentJob>::const_iterator jit;
         for (jit = jobs.begin(); jit != jobs.end(); jit++)
         {
-            yaz_log(YLOG_LOG, "job pos=%d", jit->m_pos);
+            yaz_log(YLOG_DEBUG, "job pos=%d", jit->m_pos);
         }
     }
 
@@ -942,63 +935,6 @@ void yf::Multi::Frontend::present(mp::Package &package, Z_APDU *apdu_req)
     package.response() = f_apdu;
 }
 
-void yf::Multi::Frontend::scan1(mp::Package &package, Z_APDU *apdu_req)
-{
-    if (m_backend_list.size() > 1)
-    {
-        mp::odr odr;
-        Z_APDU *f_apdu =
-            odr.create_scanResponse(
-                apdu_req, YAZ_BIB1_COMBI_OF_SPECIFIED_DATABASES_UNSUPP, 0);
-        package.response() = f_apdu;
-        return;
-    }
-    Z_ScanRequest *req = apdu_req->u.scanRequest;
-
-    int default_num_db = req->num_databaseNames;
-    char **default_db = req->databaseNames;
-
-    std::list<BackendPtr>::const_iterator bit;
-    for (bit = m_backend_list.begin(); bit != m_backend_list.end(); bit++)
-    {
-        PackagePtr p = (*bit)->m_package;
-        mp::odr odr;
-
-        if (!mp::util::set_databases_from_zurl(odr, (*bit)->m_vhost,
-                                                &req->num_databaseNames,
-                                                &req->databaseNames))
-        {
-            req->num_databaseNames = default_num_db;
-            req->databaseNames = default_db;
-        }
-        p->request() = apdu_req;
-        p->copy_filter(package);
-    }
-    multi_move(m_backend_list);
-
-    for (bit = m_backend_list.begin(); bit != m_backend_list.end(); bit++)
-    {
-        PackagePtr p = (*bit)->m_package;
-
-        if (p->session().is_closed()) // if any backend closes, close frontend
-            package.session().close();
-
-        Z_GDU *gdu = p->response().get();
-        if (gdu && gdu->which == Z_GDU_Z3950 && gdu->u.z3950->which ==
-            Z_APDU_scanResponse)
-        {
-            package.response() = p->response();
-            break;
-        }
-        else
-        {
-            // if any target does not return scan response - return that
-            package.response() = p->response();
-            return;
-        }
-    }
-}
-
 bool yf::Multi::ScanTermInfo::operator < (const ScanTermInfo &k) const
 {
     return m_norm_term < k.m_norm_term;
@@ -1057,27 +993,26 @@ void yf::Multi::Frontend::relay_apdu(mp::Package &package, Z_APDU *apdu_req)
 }
 
 
-void yf::Multi::Frontend::scan2(mp::Package &package, Z_APDU *apdu_req)
+void yf::Multi::Frontend::scan(mp::Package &package, Z_APDU *apdu_req)
 {
     Z_ScanRequest *req = apdu_req->u.scanRequest;
 
-    int default_num_db = req->num_databaseNames;
-    char **default_db = req->databaseNames;
-
     std::list<BackendPtr>::const_iterator bit;
     for (bit = m_backend_list.begin(); bit != m_backend_list.end(); bit++)
     {
         PackagePtr p = (*bit)->m_package;
+        yazpp_1::GDU gdu1(apdu_req);
         mp::odr odr;
+        Z_ScanRequest *req1 = gdu1.get()->u.z3950->u.scanRequest;
 
         if (!mp::util::set_databases_from_zurl(odr, (*bit)->m_vhost,
-                                                &req->num_databaseNames,
-                                                &req->databaseNames))
+                                               &req1->num_databaseNames,
+                                               &req1->databaseNames))
         {
-            req->num_databaseNames = default_num_db;
-            req->databaseNames = default_db;
+            req1->num_databaseNames = req->num_databaseNames;
+            req1->databaseNames = req->databaseNames;
         }
-        p->request() = apdu_req;
+        p->request() = gdu1;
         p->copy_filter(package);
     }
     multi_move(m_backend_list);
@@ -1322,7 +1257,7 @@ void yf::Multi::process(mp::Package &package) const
         }
         else if (apdu->which == Z_APDU_scanRequest)
         {
-            f->scan2(package, apdu);
+            f->scan(package, apdu);
         }
         else if (apdu->which == Z_APDU_close)
         {