Bugs item #2859986, was opened at 2009-09-16 15:24
Message generated for change (Comment added) made by axelbel
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=482468&aid=2859986&group_id=56967

Please note that this message will contain a full copy of the comment thread,
including the initial issue submission, for this request,
not just the latest update.
Category: PF/runtime
Group: Pathfinder "stable"
Status: Open
Resolution: None
Priority: 5
Private: No
Submitted By: Axel Belinfante (axelbel)
Assigned to: Ying Zhang (yingying)
Summary: xrpc use messes up mclient use

Initial Comment:
doing an xquery via mclient works immediately after starting Monetdb.
doing then a couple of xrpc requests somehow messes up some state in the server,
such that then doing the same xquery request via mclient once more yields an 
ERROR result,
or an empty result.

I have seen cases where at some point mclient continuously returns ERROR for 
all xquery queries,
even for simple ones like   <p>aap</p>     .
in other cases I just get an empty result.

it is easy to reproduce on our system. but turned out to be harder to isolate 
such
that it still is reproducable. I hope I succeeded in that.

server: Aug2009 Monetdb release, running on (uname -a output):
Linux ewi865 2.6.16.21-0.8-smp #1 SMP Mon Jul 3 18:25:39 UTC 2006 x86_64 x86_64 
x86_64 GNU/Linux


----------------------------------------------------------------------

>Comment By: Axel Belinfante (axelbel)
Date: 2009-09-27 23:07

Message:
Thanks for your efforts to reproduce and explain the problem.

Having read it, I wonder whether this is related to what I reported as
issue 2864991
(
https://sourceforge.net/tracker/?func=detail&aid=2864991&group_id=56967&atid=482468
)

I'll have to think on how to proceed next.
I had already tried to work around the problem by using mapin instead of
xrpc,
(which I where I encountered that problem 2864991, which I then reproduced
using only mclient).
However, from your explanation I gather that, as long as I continue to use
queries
that call a module function with only (a single) string parameter(s), I
will continue to
encounter the problem, because pathfinder will try to use the caching.

to give some background: ", building a web application (via
ruby-on-rails)
that allows a user to construct queries. these queries are saved
in abstract form of xml, as well as xquery module.
subsequently, these saved xqueries are used via a cgi script.

performance (speed) is important to us, especially in the last part:
the use of queries via cgi. ideally then they should appear to be
as fast as an ordinary html page request.
however, also when the user is constructing queries, and trying these
out,
performance matters, to give the user a responsive application.

we (designers of the application) have been discussing the idea of
using pf to compile a query to when we save it in the web-application,
such that execution of the pre-compiled query can be very fast
(both when it is run from the web-app, as well  as via the cgi script)

after this long intro, the question: would such compilation help to
avoid the issue?

(sidenote: when I tried to compile queries with the May 2009 release,
I encountered cases where the compiler would appear to run forever;
I did not yet retry with the latest release, but from release notes got
the impression that in this respect this should have improved?)


----------------------------------------------------------------------

Comment By: Ying Zhang (yingying)
Date: 2009-09-25 14:20

Message:
Hello Axel,

I have run your queries, and I can reproduce it (the xrpc request messages
were first translated into xquery queries with xrpc calls).  I think it is
a bug in the function cache in MPS.

Function cache in pathfinder: in the (old) MPS front-end, the whole module
file is compiled, when it is 'import'-ed by a query.  The compiler output
of each function (i.e., the MIL-tree) in the module file is cached, so that
a subsequent call to a function in the same module could be compiled (much)
faster.  So, in an Mserver session, each module file is only compiled once
(inline, user-defined-functions are not cached).  Function cache only works
with MPS front-end, not with the (new) algebra front-end.

For all functions called over XRPC, function cache is used.  For normal
queries (i.e., without any xrpc statement), function cache is used, if we
can detect that the query contains a *single* call to a predefined
function, with *only* simple literal paramters (i.e., each parameter is a
single atomic-value).  In Pathfinder runtime, we always check if function
cache could be used, even if mclient has been started to use the algebra
front-end.  Once we found out that a query could be handeled with cached
function, we automatically switch to the MPS front-end.  And this is what
has happend to your mclient-query06.xq, since it calls one module function
with a single string parameter.  Hence, both your normal query and your
xrpc queries use the same cached MIL-trees, and most probably, the problem
is caused by a not completely/correctly cleaned-up environment.

I don't know how to fix this problem yet.  I only have some suggestions as
workaround of this problem.  I hope they could be helpful for you, so that
you could continue your work.  Basically, what we want to do here, is to
prevent pathfinder from using function cache for your normal query.  This
could be done in different ways (I have tried both and it seems working):

1. do not use module function in your normal query, but directly inline
the function bodies in the query.  For instance, I have replaced function
calls in mclient-query06.xq as the following:

$ cat mclient-query06.xq 
(:
import module namespace ecv = "http://www.cs.utwente.nl/~belinfan/ecv";
at
"/ufs/zhang/tmp/axelbel/ECVtest/xrpc/export/dyn/repo/dynxquery/axel/zambon/0";
ecv:view-from-save("eprints-export-conv-fmt.xml")
:)

let $eps :=
   for $ep in doc("eprints-export-conv-fmt.xml")//tuple
   where (
     (
       (
          ( some $c in $ep//creators_family satisfies
contains(upper-case($c),  "ZAMBON"))
       )
     )
   )
   return $ep
return
<div>{
    <div class="items">{$eps//fmt/div}</div>
}</div>

advantage: query compilation time is short (~30ms with MPS, ~20ms with
algebra), as no unused functions are compiled.
disadvantage: query maintainance, as you must update the normal query, if
the corresponding functions in the module file have been changed.

2. this is very hacky: pass more complex parameter to the function call,
so that it cannot be detected by the pathfinder runtime, as for which
function cache could be used.  This could be done very easily, for
example:

    import module namespace ecv =
"http://www.cs.utwente.nl/~belinfan/ecv";
    at
"/ufs/zhang/tmp/axelbel/ECVtest/xrpc/export/dyn/repo/dynxquery/axel/zambon/0";
    ecv:view-from-save( ("eprints-export-conv-fmt.xml") )
                                      ^                                   
           ^
Note the extra parentheses, now the parameter has become a sequence
containing one string value.  It is still valid, but will prevent the
pathfinder runtime from using function cache :P

advantage: ease of maintainance, minimal change of code.
disadvantage: long compile time!  For each normal query, the complete
module must be load and compiled.  With algebra, this costs ~300ms; with
MPS, ~700ms.

Would you please let us know if you can live with any of my suggestions,
so that we can increase the priority of this bug accordingly?

Regards,

Jennie

----------------------------------------------------------------------

Comment By: Ying Zhang (yingying)
Date: 2009-09-17 18:10

Message:
Hello Axel,

Thank you very much for reporting this problem.  In the very beginning
when xrpc was implemented, we have notices that there are situations, in
which xrpc conflicts with mclient.  We have tried to solve the cases we
have noticed, but we could have missed some cases.  I will look into your
problem soon and post more information here, as soon as I know more.

Regards,

Jennie

----------------------------------------------------------------------

Comment By: Axel Belinfante (axelbel)
Date: 2009-09-17 10:11

Message:
I wrote: "however, if I then do the same request via xrpc, by repeating the
third xrpc request, I do get a correct result..."

this is not always the case.
sometimes then such xrpc request returns an empty result ( <div><div
class="items"/></div> ).


Sometimes when the mclient request fails, it returns 'ERROR', together
with almost the correct result:
the result is correct, but the first couple of characters are missing
(overwritten by the ERROR?).


Finally, I don't know whether it is related to this issue, it happens that
the server gets into a state where a pf:add-doc that is done via mclient
just hangs, forever,  until I kill the server to restart it.

This issue was already present in the May-2009 release, and is still
present in the Aug-2009 release.



----------------------------------------------------------------------

Comment By: Axel Belinfante (axelbel)
Date: 2009-09-16 15:42

Message:
I atdded the files that I used to set up the database at
http://library.cs.utwente.nl/ecv/files-for-bugreport-2859986.tgz
(size: 22861872 bytes)
the file start-mxq-test.mil in the .tgz shows how I initialized the
database.

I invoked the xrpc commands by using telnet from within an xterm,
and pasting the contents of the attached files.

I invoked mclient as: mclient -lx -p myportnumber  mclient-query06

so, when I cleanup the database 'var' directory, and restart it the
mclient query works fine
after I have done the first xrpc query, the mclient query still works
fine
after I have done the second xrpc query, the mclient query still works
fine
after I have done the third xrpc query, the mclient query returns an
'empty' result
( <div><div class="items"/></div> )

however, if I then do the same request via xrpc, by repeating the third
xrpc request,
I do get a correct result...




----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=482468&aid=2859986&group_id=56967

------------------------------------------------------------------------------
Come build with us! The BlackBerry&reg; Developer Conference in SF, CA
is the only developer event you need to attend this year. Jumpstart your
developing skills, take BlackBerry mobile applications to market and stay 
ahead of the curve. Join us from November 9&#45;12, 2009. Register now&#33;
http://p.sf.net/sfu/devconf
_______________________________________________
Monetdb-bugs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-bugs

Reply via email to