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
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.
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)