Moin zusammen,
ich habe meine Base-X Applikation von Version 7.2 auf 7.6 und versuchsweise auf 7.6.1 (Beta) umgestellt (embedded Base-X Server). Hierbei wirft die BaseX Lib bei parallelen XQuery Anfragen bei gleichzeitigen Inserts (ich verwende einen Threadpool) reproduzierbar die unten angehängte Fehlermeldung (in Variationen auch mit anderen Fehlercodes, aber immer an der gleichen Stelle/Zeile und beim gleichen Aufruf). Der Fehler tritt nicht bei jeder Anfrage auf (es scheint also eine bestimmte Concurrency Situation vorzuliegen).
Die betreffende Funktion im Applikationscode ist wie folgt:
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()){ // ** hier wird die Exception geworfen ** 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; }
Hier noch getClientSession:
private static ClientSession getClientSession() throws IOException { ClientSession mySession = new ClientSession("localhost", 1984, "admin", "admin"); return mySession; }
In der Version 7.2 war noch alles ok. Wahlweise habe ich auch schon Java-Heap Space Fehler an gleicher Stelle bekommen. Und in einem Fall ist die Datenbank plötzlich auf über 1GB angewachsen (vielleicht ein anderes Problem). Bevor ich anfange hierzu einen Minimalcase zu produzieren (was vermutlich recht aufwändig werden wird, da der Fehler nur unter Lastbedingungen auftritt) liefere ich vorab schon mal diesen Fehlerbericht. Vielleicht fällt ja direkt ein Problem ins Auge....
Wie immer vielen Dank für diese Klasse XML-DB und viele Grüße, Bodo
-- Anhang Fehlermeldungen mit Version 7.6.1 (in 7.6 war die Zeilennr: 79) 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@mailman.uni-konstanz.de