Wed Aug 24 15:26:40 2005

Ticket #1424 (Closed: fixed)

search behavior changed when called by xml-rpc


Priority: normal Reporter: fgerlits
Severity: minor Assigned to: tomash
Component: bug Status: closed
Version: 1.0 rc2 Resolution: fixed
Milestone: 1.0.1 Keywords:  

Description by fgerlits:

These searches: [conditions:{[cat:dc:title,op:partial,val:],[cat:dc :creator,op:partial,val:],[cat:dc:source,op:partial,val:]},filetype:al l,operator:or] [conditions:{[cat:dc:title,op:partial,val:]},filetype:all] now return no results, while before they used to return records which have the given field in their metadata (which is all records in these two cases). Why did this change? I think the old behavior made more sense.

Attachments

Changelog

Wed Aug 24 15:26:49 2005: Modified by fgerlits

  • status changed from new to assigned
  • owner changed from anonymous to tomash

Mon Sep 5 17:01:04 2005: Modified by tomash

    Unfortunately I can't reproduce it. I've uploded here two files with XMLRPC request related to your post - what's the difference between them and your requests? (files may be directly used as XMLRPC request after update of sessid field)

    Thu Sep 22 09:28:19 2005: Modified by maroy

    • description changed.
    • milestone changed from 1.0 rc2 to 1.0.1

    is this still an issue?

    Mon Sep 26 20:44:54 2005: Modified by fgerlits

      The problem seems to be the <string> tag, which is omitted by the XML-RPC package used by the C++ components.

      This works:

      <member><name>criteria</name><value>
         <struct>
          <member>
           <name>conditions</name>
           <value><array><data>
            <value><struct>
             <member><name>cat</name><value><string>dc:title</string></value></member>
             <member><name>op</name><value><string>partial</string></value></member>
             <member><name>val</name><value><string/></value></member>
            </struct></value>
            <value><struct>
             <member><name>cat</name><value><string>dc:creator</string></value></member>
             <member><name>op</name><value><string>partial</string></value></member>
             <member><name>val</name><value><string/></value></member>
            </struct></value>
            <value><struct>
             <member><name>cat</name><value><string>dc:source</string></value></member>
             <member><name>op</name><value><string>partial</string></value></member>
             <member><name>val</name><value><string/></value></member>
            </struct></value>
           </data></array></value>
          </member>
          <member><name>filetype</name><value><string>all</string></value></member>
          <member><name>operator</name><value><string>or</string></value></member>
         </struct>
        </value></member>
      

      But this does not work (although it used to):

      <member><name>criteria</name><value>
       <struct>
        <member>
         <name>conditions</name>
         <value><array><data>
          <value><struct>
           <member><name>cat</name><value>dc:title</value></member>
           <member><name>op</name><value>partial</value></member>
           <member><name>val</name><value></value></member>
          </struct></value>
          <value><struct>
           <member><name>cat</name><value>dc:creator</value></member>
           <member><name>op</name><value>partial</value></member>
           <member><name>val</name><value></value></member>
          </struct></value>
          <value><struct>
           <member><name>cat</name><value>dc:source</value></member>
           <member><name>op</name><value>partial</value></member>
           <member><name>val</name><value></value></member>
          </struct></value>
         </data></array></value>
        </member>
        <member><name>filetype</name><value>all</value></member>
        <member><name>operator</name><value>or</value></member>
       </struct>
      </value></member>
      

      Mon Sep 26 20:51:28 2005: Modified by fgerlits

        ... and by "does not work", I mean that it returns a normal-looking answer, but with 0 results:

        <methodResponse>
         <params>
          <param>
           <value><struct>
            <member>
             <name>audioClipCnt</name>
             <value><int>0</int></value>
            </member>
            <member>
             <name>playlistCnt</name>
             <value><int>0</int></value>
            </member>
            <member>
             <name>audioClipResults</name>
             <value><array>
              <data>
              </data>
             </array></value>
            </member>
            <member>
             <name>playlistResults</name>
             <value><array>
              <data>
              </data>
             </array></value>
            </member>
           </struct></value>
          </param>
         </params>
        </methodResponse>
        

        Mon Sep 26 20:57:51 2005: Modified by fgerlits

          ... but if the search is not empty, it works fine without the <string> tag. For example,

          <member><name>criteria</name><value>
           <struct>
            <member>
             <name>conditions</name>
             <value><array><data>
              <value><struct>
               <member><name>cat</name><value>dc:title</value></member>
               <member><name>op</name><value>partial</value></member>
               <member><name>val</name><value>a</value></member>
              </struct></value>
              <value><struct>
               <member><name>cat</name><value>dc:creator</value></member>
               <member><name>op</name><value>partial</value></member>
               <member><name>val</name><value>a</value></member>
              </struct></value>
              <value><struct>
               <member><name>cat</name><value>dc:source</value></member>
               <member><name>op</name><value>partial</value></member>
               <member><name>val</name><value>a</value></member>
              </struct></value>
             </data></array></value>
            </member>
            <member><name>filetype</name><value>all</value></member>
            <member><name>operator</name><value>or</value></member>
           </struct>
          </value>
          

          returns the records one would expect it to.

          Thu Sep 29 14:11:59 2005: Modified by tomash

            Huh - it's bug in PEAR XML-RCP module - if there is empty <value></value> tag, it's not interpreted as empty string (as it should according to XML-RPC spec.), but some orphaned object instead. I will try to fix it, but it probably will be later than 1.0.1 release.

            Thu Sep 29 17:46:33 2005: Modified by tomash

            • resolution set to fixed
            • status changed from assigned to closed

            Fortunately the fix for this bug is contained in newer version of PEAR XML_RPC module.

            I've upgraded it.

            Fri Sep 30 22:07:39 2005: Modified by fgerlits

            • resolution cleared
            • status changed from closed to reopened

            It still does not work for me. I did

            svn update
            make -C modules/storageServer pear_install
            make recompile
            

            but still get 0 results for an empty search without the <string> tag.

            Is there anything else I need to do?

            Fri Sep 30 23:31:03 2005: Modified by anonymous

            • resolution set to fixed
            • status changed from reopened to closed

            Ooops - there is little inconsitency. For now use: make -C modules/storageServer pear_setup_devel

            (packages installed by pear_install target are not used in devel.env. now)

            I will make the devel.env. setup consistent with normal one.

            Fri Sep 30 23:45:46 2005: Modified by fgerlits

            • resolution cleared
            • status changed from closed to reopened

            No, sorry, still doesn't work. The version with <string> is still OK, but now the <string>-less version gives me an error message:

            <?xml version="1.0" encoding="UTF-8"?>
            <methodResponse>
            <fault>
            <value>
            <struct>
            <member>
            <name>faultCode</name>
            <value><int>804</int></value>
            </member>
            <member>
            <name>faultString</name>
            <value><string><br />
            <b>Fatal error</b>:  Call to a member function on a non-object in <b>/home/fgerlits/src/livesupport/tools/pear/tmp/lib/pear/XML/RPC.php</b> on line <b>1856</b><br />
            </string></value>
            </member>
            </struct>
            </value>
            </fault>
            </methodResponse>
            

            Sat Oct 1 01:17:48 2005: Modified by anonymous

              Unfortunately I can't reproduce it. Send me complete XMLRPC request, please.

              Thanks.

              Sat Oct 1 11:50:38 2005: Modified by fgerlits

                Yes, it's interesting... If I send the xml-rpc request with line breaks, like this:

                POST /~fgerlits/livesupport/storageServer/var/xmlrpc/xrLocStor.php HTTP/1.1
                User-Agent: XMLRPC++ 0.8
                Host: localhost:80
                Content-Type: text/xml
                Content-length: 1234
                <?xml version="1.0"?><methodCall><methodName>locstor.searchMetadata</methodName><params><param><value><struct>
                <member><name>criteria</name><value>
                 <struct>
                  <member>
                   <name>conditions</name>
                   <value><array><data>
                    <value><struct>
                     <member><name>cat</name><value>dc:title</value></member>
                     <member><name>op</name><value>partial</value></member>
                     <member><name>val</name><value></value></member>
                    </struct></value>
                    <value><struct>
                     <member><name>cat</name><value>dc:creator</value></member>
                     <member><name>op</name><value>partial</value></member>
                     <member><name>val</name><value></value></member>
                    </struct></value>
                    <value><struct>
                     <member><name>cat</name><value>dc:source</value></member>
                     <member><name>op</name><value>partial</value></member>
                     <member><name>val</name><value></value></member>
                    </struct></value>
                   </data></array></value>
                  </member>
                  <member><name>filetype</name><value>all</value></member>
                  <member><name>operator</name><value>or</value></member>
                 </struct>
                </value></member>
                <member>
                 <name>sessid</name>
                 <value>5095aa18b26b79f292b95d565a0d6c2b</value>
                </member>
                </struct></value></param></params></methodCall>
                

                then it's OK.

                But if I send the same thing without line breaks:

                POST /~fgerlits/livesupport/storageServer/var/xmlrpc/xrLocStor.php HTTP/1.1
                User-Agent: XMLRPC++ 0.8
                Host: localhost:80
                Content-Type: text/xml
                Content-length: 1082
                <?xml version="1.0"?><methodCall><methodName>locstor.searchMetadata</methodName><params><param><value><struct><member><name>criteria</name><value><struct><member><name>conditions</name><value><array><data><value><struct><member><name>cat</name><value>dc:title</value></member><member><name>op</name><value>partial</value></member><member><name>val</name><value></value></member></struct></value><value><struct><member><name>cat</name><value>dc:creator</value></member><member><name>op</name><value>partial</value></member><member><name>val</name><value></value></member></struct></value><value><struct><member><name>cat</name><value>dc:source</value></member><member><name>op</name><value>partial</value></member><member><name>val</name><value></value></member></struct></value></data></array></value></member><member><name>filetype</name><value>all</value></member><member><name>operator</name><value>or</value></member></struct></value></member><member> <name>sessid</name><value>5095aa18b26b79f292b95d565a0d6c2b</value></member></struct></value></param></params></methodCall>
                

                then it gives the error message I quoted in my previous post.

                Sat Oct 1 13:09:16 2005: Modified by maroy

                • severity changed from minor to block

                Sat Oct 1 14:19:21 2005: Modified by anonymous

                • severity changed from block to minor

                Thanks, I've reproduced it - interesting ...
                Although XML_RPC-1.4.3 is stable, we need downgrade.
                I will try to backport solution of empty <value></value> problem to some previous version. (it's trivial change)

                BTW. lack of line-breaks is not problem, problem is empty content between some tags. I'm looking for that problematic tag - there may be possible to solve it by small fix, because I've solved yet something similar.

                Sat Oct 1 15:22:24 2005: Modified by anonymous

                  I've patched PEAR XML_RPC module - there was a bug related to solution of our original problem.

                  Ferenc, please, test it on you system and close the issue if OK.
                  (on my system it's OK without all unusable whitespaces.)
                  (there should be sufficient now after update: make -C modules/storageServer pear_install)

                  Thanks.

                  Sat Oct 1 15:34:16 2005: Modified by fgerlits

                  • resolution set to fixed
                  • status changed from reopened to closed

                  Yes, it is OK now.


                  Add/Change #1424 (search behavior changed when called by xml-rpc)




                  Change Properties






                  Action