Hi Christian,

it works like a charm. Neither of the reported bugs could be reproduced with
the latest build (no matter what I've tried ;o)).

So *many* thanks for your prompt response and bugfix. This is why I love
open source projects in general und especially this project: there are
people who really care...

So keep this cool project going: it does everything I wanted so far!

Best,
Bodo

-----Ursprüngliche Nachricht-----
Von: Christian Grün [mailto:[email protected]] 
Gesendet: Mittwoch, 13. März 2013 23:36
An: Bodo Hüsemann
Cc: BaseX
Betreff: Re: [basex-talk] Bugreport:
org.basex.server.ClientQuery.cache(ClientQuery.java:81)

Bodo,

thanks for your in-depth bug report, which allowed me to track down
and fix the bug. Could you check out the latest stable snapshot [1]
and give us some feedback if the problem is resolved?

Best,
Christian

[1] http://files.basex.org/releases/latest/
___________________________

On Wed, Mar 13, 2013 at 9:06 PM, Bodo Hüsemann <[email protected]>
wrote:
> Hi Christian,
>
> I've tried to set GLOBALLOCK to TRUE today and this prevents the error.
>
> a) I performed some more tests and found some more other errors (without
> global locking, see attached log). Anyhow, I suspect an encoding issue for
> specific input data so included the documents I have saved in the DB.
>
> b) I've added mySession.close() to the finally clause but the error still
> persists.
>
> c) Following a query which reproduces the problem (as you can see, I
declare
> a parameter variable and call xq:getResult). Every call of the query will
be
> concurrently executed to corresponding parallel uploads of documents that
> are read from an internet database meanwhile.
>
> module namespace xq = "xq";
> import module namespace html = 'html' at 'html.xq';
>
> declare function xq:insertTable($inGuild as xs:anyAtomicType) as
element()*
> {
> let $guild_sheet :=
collection('default')/apiresponse[guild/@name=$inGuild]
> return if ($guild_sheet) then <tr id='{string($inGuild)}'>
> <td>{string($guild_sheet/guild/@name)}</td>
> <td>{string($guild_sheet/guild/@memberCount)}</td>
> <td>{if (not(empty($guild_sheet))) then
> string($guild_sheet/cache_info/@cached_until_gmt) else ()}</td>
> </tr>
>          else
>                 (<error id='{string($inGuild)}'/>)};
>
> declare function xq:getResult($inGuild as xs:anyAtomicType) as element()*{
>                 (xq:insertTable($inGuild))
> };
>
> For analysis purposes I've sent the documents to you separately.
>
> How can we proceed (I know a selfcontained example would be nice and of
> great use, but this will take some time for me). Any other things we could
> try?
>
> Many thanks for your help,
> Bodo
>
>
>
> ---------------------------
> WARNING 2013.03.13 20:42:39 Error while loading document:
> 60284427BAD70B0E537DC3214A56091E3FC9DFF4
> org.basex.core.BaseXException: Improper use? Potential bug? Your feedback
is
> welcome:
> Contact: [email protected]
> Version: BaseX 7.6
> Java: Oracle Corporation, 1.7.0_15
> OS: Windows 7, amd64
> Stack Trace:
> java.lang.ArrayIndexOutOfBoundsException
>   java.lang.System.arraycopy(Native Method)
>   org.basex.io.random.DataAccess.writeToken(DataAccess.java:347)
>   org.basex.io.random.DataAccess.writeToken(DataAccess.java:329)
>   org.basex.data.DiskData.index(DiskData.java:394)
>   org.basex.data.Data.attr(Data.java:1027)
>   org.basex.data.Data.insert(Data.java:811)
>   org.basex.core.cmd.Add.run(Add.java:118)
>   org.basex.core.Command.run(Command.java:342)
>   org.basex.core.Command.exec(Command.java:321)
>   org.basex.core.Command.execute(Command.java:78)
>   org.basex.core.Command.execute(Command.java:90)
>   org.basex.server.ClientListener.execute(ClientListener.java:386)
>   org.basex.server.ClientListener.add(ClientListener.java:357)
>   org.basex.server.ClientListener.run(ClientListener.java:100)
>
>         at org.basex.server.ClientSession.receive(ClientSession.java:259)
>         at org.basex.server.ClientSession.send(ClientSession.java:246)
>         at org.basex.server.ClientSession.send(ClientSession.java:284)
>         at org.basex.server.ClientSession.add(ClientSession.java:134)
>         at
>
de.infabswissarmy.control.XMLDBManagerBaseX.putDoc(XMLDBManagerBaseX.java:24
> 2)
>         at
>
de.infabswissarmy.control.XMLDBManagerBaseX.putDoc(XMLDBManagerBaseX.java:56
> )
>         at
> de.infabswissarmy.control.UpdateManager.getFile(UpdateManager.java:204)
>         at
de.infabswissarmy.control.QueryTask.httpQuery(QueryTask.java:144)
>         at de.infabswissarmy.control.QueryTask.run(QueryTask.java:271)
>         at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown
Source)
>         at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown
> Source)
>         at java.lang.Thread.run(Unknown Source)
>
> ---
>
> org.basex.core.BaseXException: Improper use? Potential bug? Your feedback
is
> welcome:
> Contact: [email protected]
> Version: BaseX 7.6
> Java: Oracle Corporation, 1.7.0_15
> OS: Windows 7, amd64
> Stack Trace:
> java.lang.RuntimeException: Data Access out of bounds:
> - pre value: 4517
> - #used blocks: 18
> - #total locks: 18
> - access: 17 (18 > 17]
>   org.basex.util.Util.notexpected(Util.java:53)
>   org.basex.io.random.TableDiskAccess.cursor(TableDiskAccess.java:488)
>   org.basex.io.random.TableDiskAccess.read5(TableDiskAccess.java:211)
>   org.basex.data.Data.textOff(Data.java:422)
>   org.basex.data.DiskData.text(DiskData.java:234)
>   org.basex.index.resource.Docs.paths(Docs.java:107)
>   org.basex.index.resource.Docs.docs(Docs.java:230)
>   org.basex.index.resource.Resources.docs(Resources.java:110)
>   org.basex.query.QueryResources.collection(QueryResources.java:178)
>   org.basex.query.func.FNGen.collection(FNGen.java:121)
>   org.basex.query.func.FNGen.value(FNGen.java:74)
>   org.basex.query.func.StandardFunc.compile(StandardFunc.java:48)
>   org.basex.query.expr.Arr.compile(Arr.java:38)
>   org.basex.query.func.StandardFunc.compile(StandardFunc.java:46)
>   org.basex.query.QueryContext.analyze(QueryContext.java:225)
>   org.basex.query.QueryContext.compile(QueryContext.java:209)
>   org.basex.query.QueryProcessor.compile(QueryProcessor.java:66)
>   org.basex.core.cmd.AQuery.query(AQuery.java:69)
>   org.basex.core.cmd.XQuery.run(XQuery.java:22)
>   org.basex.core.Command.run(Command.java:342)
>   org.basex.core.Command.exec(Command.java:321)
>   org.basex.core.Command.execute(Command.java:78)
>   org.basex.server.ClientListener.run(ClientListener.java:145)
>
>         at org.basex.server.ClientSession.receive(ClientSession.java:259)
>         at org.basex.server.ClientSession.execute(ClientSession.java:162)
>         at org.basex.server.Session.execute(Session.java:50)
>         at
>
de.infabswissarmy.control.XMLDBManagerBaseX.executeCommand(XMLDBManagerBaseX
> .java:172)
>         at
>
de.infabswissarmy.control.XMLDBManagerBaseX.executeXQuery(XMLDBManagerBaseX.
> java:163)
>         at
>
de.infabswissarmy.control.XMLDBManagerBaseX.executeXQuery(XMLDBManagerBaseX.
> java:159)
>         at
>
de.infabswissarmy.control.XMLDBManagerBaseX.existsDoc(XMLDBManagerBaseX.java
> :145)
>         at
>
de.infabswissarmy.control.XMLDBManagerBaseX.putDoc(XMLDBManagerBaseX.java:23
> 5)
>         at
>
de.infabswissarmy.control.XMLDBManagerBaseX.putDoc(XMLDBManagerBaseX.java:56
> )
>         at
> de.infabswissarmy.control.UpdateManager.getFile(UpdateManager.java:204)
>         at
de.infabswissarmy.control.QueryTask.httpQuery(QueryTask.java:144)
>         at de.infabswissarmy.control.QueryTask.run(QueryTask.java:271)
>         at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown
Source)
>         at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown
> Source)
>         at java.lang.Thread.run(Unknown Source)
> -----Ursprüngliche Nachricht-----
> Von: Christian Grün [mailto:[email protected]]
> Gesendet: Sonntag, 10. März 2013 13:33
> An: Bodo Hüsemann
> Cc: BaseX
> Betreff: Re: [basex-talk] Bugreport:
> org.basex.server.ClientQuery.cache(ClientQuery.java:81)
>
> Hi Bodo,
>
> thanks for your report. I would be interested to know…
>
> a) if the errors also occurs if you set the GLOBALLOCK flag in your .basex
> configuration file to "true"
> b) if the error persists if you close your client sessions via
> mySession.close() (in both cases, this call is always recommendable)
> c) which queries you are running? your query strings may be pretty
important
> to find out what causes the problems, in particular if the problems only
> occur for GLOBALLOCK=false
>
> Best,
> Christian
> ___________________________
>
> On Fri, Mar 8, 2013 at 3:06 PM, Bodo Hüsemann <[email protected]>
wrote:
>> Hi all,
>>
>> I apologize for the german post on this english mailinglist...So here
>> we go in english:
>>
>> I have recently migrated my BaseX application from version 7.2 to 7.6
>> (and
>> 7.6.1 Beta). The BaseX lib throws exceptions while running concurrent
>> XQuery queries and updates (based on a threadpool), see the exceptions
>> attached below (the specific numeric error-code changes slightly but
>> the error occurs every time on the same line of code). The error
>> itself seems to happen unter heavy concurrency (sequential queries
>> have no problem) and not every time query executes.
>>
>> The application code is as follows (class
>> de.infabswissarmy.control.XMLDBManagerBaseX.query):
>>
>> public ArrayList<String> query(String inQuery, String[][] inArgs){
>> ClientSession mySession = null; ClientQuery myQuery = null;
>> ArrayList<String> tmpString = new ArrayList<String>();
>>         try {
>>                 mySession = getClientSession();
>>                 myQuery = mySession.query(inQuery);
>>
>>                 // bind variable
>>                 if (inArgs != null){
>>                   for (int i=0; i < inArgs.length; i++){
>>                         myQuery.bind("$" + inArgs[i][0], inArgs[i][1]);
>>                   }
>>                 }
>>
>>                 while (myQuery.more()){  // **exception is in this line
**
>>                   tmpString.add(myQuery.next());
>>                 }
>>         } catch (IOException e) {
>>                 // TODO Auto-generated catch block
>>                 e.printStackTrace();
>>         } finally {
>>                 if (myQuery != null){
>>                         try {
>>                                 myQuery.close();
>>                         } catch (BaseXException e) {
>>                                 // ignore
>>                         } catch (IOException e) {
>>                                 // TODO Auto-generated catch block
>>                                 e.printStackTrace();
>>                         }
>>                 }
>>         }
>> return tmpString;
>> }
>>
>> To be complete this is the used helper function:
>>
>> private static ClientSession getClientSession() throws IOException {
>>         ClientSession mySession = new ClientSession("localhost", 1984,
>> "admin", "admin");
>>         return mySession;
>> }
>>
>> Version 7.2 is running without problems. In version 7.6 I have seen
>> some rare Java heap space errors at the same location, and once I even
>> saw a massive growth of the DB > 1GB (normal size would be 1MB), but
>> this may be another error and I cannot reproduce it. I will try to
>> deliver a selfcontained min-example, but this could be quite an effort
>> to do (it will take some time to produce it). So I hope that you might
>> find the problem with the delivered information.
>>
>> Many thanks once again for this great XML-DB and thanks in advance for
>> your help!
>> Bodo
>>
>>
>> -- attached error stack with version 7.6.1 (in 7.6 the error occurs in
>> row
>> 79 instead of 81)
>> org.basex.core.BaseXException: -146032
>>         at org.basex.server.ClientQuery.cache(ClientQuery.java:81)
>>         at org.basex.server.Query.more(Query.java:74)
>>         at
>>
>
de.infabswissarmy.control.XMLDBManagerBaseX.query(XMLDBManagerBaseX.java:86)
>>         at
>>
>
de.infabswissarmy.control.XMLDBManagerBaseX.queryDoc(XMLDBManagerBaseX.java:
>> 121)
>>         at
> de.infabswissarmy.control.QueryTask.httpQuery(QueryTask.java:180)
>>         at de.infabswissarmy.control.QueryTask.run(QueryTask.java:271)
>>         at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown
> Source)
>>         at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown
>> Source)
>>         at java.lang.Thread.run(Unknown Source)
>> org.basex.core.BaseXException: 0
>>         at org.basex.server.ClientQuery.cache(ClientQuery.java:81)
>>         at org.basex.server.Query.more(Query.java:74)
>>         at
>>
>
de.infabswissarmy.control.XMLDBManagerBaseX.query(XMLDBManagerBaseX.java:86)
>>         at
>>
>
de.infabswissarmy.control.XMLDBManagerBaseX.queryDoc(XMLDBManagerBaseX.java:
>> 121)
>>         at
> de.infabswissarmy.control.QueryTask.httpQuery(QueryTask.java:180)
>>         at de.infabswissarmy.control.QueryTask.run(QueryTask.java:271)
>>         at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown
> Source)
>>         at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown
>> Source)
>>         at java.lang.Thread.run(Unknown Source)
>> org.basex.core.BaseXException: java.lang.ArrayIndexOutOfBoundsException
>>         at org.basex.server.ClientQuery.cache(ClientQuery.java:81)
>>         at org.basex.server.Query.more(Query.java:74)
>>         at
>>
>
de.infabswissarmy.control.XMLDBManagerBaseX.query(XMLDBManagerBaseX.java:86)
>>         at
>>
>
de.infabswissarmy.control.XMLDBManagerBaseX.queryDoc(XMLDBManagerBaseX.java:
>> 121)
>>         at
> de.infabswissarmy.control.QueryTask.httpQuery(QueryTask.java:180)
>>         at de.infabswissarmy.control.QueryTask.run(QueryTask.java:271)
>>         at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown
> Source)
>>         at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown
>> Source)
>>         at java.lang.Thread.run(Unknown Source)
>>
>> _______________________________________________
>> BaseX-Talk mailing list
>> [email protected]
>> https://mailman.uni-konstanz.de/mailman/listinfo/basex-talk
>

_______________________________________________
BaseX-Talk mailing list
[email protected]
https://mailman.uni-konstanz.de/mailman/listinfo/basex-talk

Reply via email to