Hi Peter, I recall seeing something similar when copying database folders from a MS Windows BaseX install to a Linux install . I found in some cases I needed to run db:optimize[1] once before any other use of the database otherwise a Java error would occur.
Now, I would always use db backup and restore to transfer databases between systems. /Andy [1] https://old.docs.basex.org/wiki/Database_Module#db:optimize On Fri, 7 Mar 2025 at 08:10, Christian Grün <[email protected]> wrote: > Hi Peter, > > Can you reproduce the problem with the latest version (11.7) and the zip > distribution of BaseX (e.g., without Docker)? > > Best, > Christian > > > > Peter Villadsen <[email protected]> schrieb am Fr., 7. März > 2025, 05:00: > >> I did some more work to capture the relevant information for the two >> crashes. >> >> >> >> As you recall, I build a container image on top of the official (but old) >> basex one. It copies the database into the right place in the container. >> >> >> >> I added the -c switch to the basexhttp command when the container starts. >> Even when I do this, the container does not have data context set when the >> first operation involving the database happens - If I do a query that >> involves the open database: >> >> >> >> <query> >> >> <text>count(/ada)</text> >> >> </query> >> >> >> >> I get: >> >> >> >> Improper use? Potential bug? Your feedback is welcome: >> >> Contact: [email protected] >> >> Version: BaseX 9.6 RC1 >> >> Java: IcedTea, >> >> 1.8.0_212 >> >> OS: Linux, amd64 >> >> Stack Trace: >> >> java.lang.NullPointerException >> >> at org.basex.data.Data.defaultNs(Data.java: 270) >> >> at org.basex.query.expr.path.NameTest.noMatches(NameTest.java: 60) >> >> at org.basex.query.expr.path.Step.optimize(Step.java: 162) >> >> at org.basex.query.expr.path.Step.optimize(Step.java: 134) >> >> at org.basex.query.expr.Preds.compile(Preds.java: 59) >> >> at org.basex.query.expr.path.Path.lambda$compile$0(Path.java: 139) >> >> at org.basex.query.CompileContext.get(CompileContext.java: 165) >> >> at org.basex.query.expr.path.Path.compile(Path.java: 134) >> >> at org.basex.query.expr.Arr.compile(Arr.java: 47) >> >> at org.basex.query.scope.MainModule.comp(MainModule.java: 81) >> >> at org.basex.query.QueryCompiler.compile(QueryCompiler.java: 119) >> >> at org.basex.query.QueryCompiler.compile(QueryCompiler.java: 106) >> >> at org.basex.query.QueryContext.compile(QueryContext.java: 306) >> >> at org.basex.query.QueryProcessor.compile(QueryProcessor.java: 79) >> >> at org.basex.core.cmd.AQuery.query(AQuery.java: 91) >> >> at org.basex.core.cmd.XQuery.run(XQuery.java: 22) >> >> at org.basex.core.Command.run(Command.java: 257) >> >> at org.basex.http.rest.RESTCmd.run(RESTCmd.java: 105) >> >> at org.basex.http.rest.RESTQuery.query(RESTQuery.java: 69) >> >> at org.basex.http.rest.RESTQuery.run0(RESTQuery.java: 37) >> >> at org.basex.http.rest.RESTCmd.run(RESTCmd.java: 70) >> >> at org.basex.core.Command.run(Command.java: 257) >> >> at org.basex.core.Command.execute(Command.java: 93) >> >> at org.basex.core.Command.execute(Command.java: 116) >> >> at org.basex.http.rest.RESTServlet.run(RESTServlet.java: 32) >> >> at org.basex.http.BaseXServlet.service(BaseXServlet.java: 65) >> >> >> >> If I remove the -c flag, and just let the container start (still with the >> database copied into place in the container), I get this trace when I try >> to do anything related with the database: >> >> >> >> Improper use? Potential bug? Your feedback is welcome: >> >> Contact: [email protected] >> >> Version: BaseX 9.6 RC1 >> >> Java: IcedTea, 1.8.0_212 >> >> OS: Linux, amd64 >> >> Stack Trace: >> >> java.lang.NullPointerException >> >> at org.basex.data.DiskData.write(DiskData.java:146) >> >> at org.basex.data.DiskData.close(DiskData.java:160) >> >> at org.basex.core.Datas.unpin(Datas.java:52) >> >> at org.basex.core.cmd.Close.close(Close.java:45) >> >> at org.basex.query.QueryResources.close(QueryResources.java:92) >> >> at org.basex.query.QueryContext.close(QueryContext.java:515) >> >> at org.basex.query.QueryProcessor.close(QueryProcessor.java:251) >> >> at org.basex.core.cmd.AQuery.query(AQuery.java:132) >> >> at org.basex.core.cmd.XQuery.run(XQuery.java:22) >> >> at org.basex.core.Command.run(Command.java:257) >> >> at org.basex.core.Command.execute(Command.java:93) >> >> at >> org.basex.api.client.LocalSession.execute(LocalSession.java:132) >> >> at org.basex.api.client.Session.execute(Session.java:36) >> >> at org.basex.core.CLI.execute(CLI.java:92) >> >> at org.basex.core.CLI.execute(CLI.java:76) >> >> at org.basex.BaseX.console(BaseX.java:177) >> >> at org.basex.BaseX.<init>(BaseX.java:152) >> >> at org.basex.BaseX.main(BaseX.java:43) >> >> >> >> I hope this is useful. Right now I am blocked. >> >> >> >> Best Regards >> >> >> >> Peter Villadsen. >> >> >> >> >> >> *From:* Peter Villadsen >> *Sent:* Tuesday, March 4, 2025 12:43 PM >> *To:* Christian Grün <[email protected]> >> *Cc:* [email protected] >> *Subject:* RE: [EXTERNAL] Re: [basex-talk] HTTP server performance seems >> very slow... >> >> >> >> Christian, >> >> >> >> Yes, I have. Thank you for following up - I should have come back >> earlier. >> >> >> >> I have been experimenting with this for a while now, and the container >> image (the official one and the quodatum, newer 10.3 one) both crash when I >> try to use them, both through HTTP and TCP. I am still looking into it. If >> I do not manage to find out what the issue is, I will upload the stack >> traces. >> >> >> >> In both cases, I built my own container to include the database, so I can >> avoid the volumes and have the container be completely self-contained. The >> database is 19GB, so the container gets pretty big. >> >> >> >> Here is how I start the container: >> >> >> >> docker run -d -e BASEX_JVM=-Xmx19G -p 8080:8080 -p 1984:1984 -p 8984:8984 >> rainier05042023 >> >> >> >> In my humble opinion it is unfortunate that the official container image >> has not been updated for at least 3 years. It would be nice to have the >> newest bits there, supported by BaseX. >> >> >> >> Here is the dockerfile I use: >> >> >> >> # escape=` >> >> # Use the BaseX 10.3 image as the base image >> >> FROM basex/basexhttp >> >> >> >> # Copy the Windows database directory into the container so it is >> available >> >> # when the container starts, without providing a --volume parameter. >> >> # This is fine since the database is essentially read-only. >> >> >> >> WORKDIR /srv/basex/data >> >> COPY --chown=basex:basex Rainier05042023 "Rainier05042023/" >> >> >> >> # The older versions of BaseX just use admin/admin. >> >> # RUN echo "admin" | /srv/basex/bin/basex -cPASSWORD >> >> >> >> # Modify the CMD command so that the Rainier05042023 database is opened >> >> CMD /usr/local/bin/basexhttp -c "open Rainier05042023" >> >> >> >> LABEL description="Legacy BaseX with Rainier05042023 database" >> >> >> >> # Here is a build command that builds the container with the name >> Rainier05042023: >> >> # >> >> # cd to the directory containing this Dockerfile and run the command: >> >> # docker build -t rainier05042023 . >> >> # >> >> # When the docker container has been built it can be run with the name >> >> # provided in the build command i.e. rainier05042023. It can be saved >> >> # to a file with the command: >> >> # >> >> # docker save -o Rainier05042023.tar rainier05042023 >> >> # >> >> # and loaded with the command: >> >> # >> >> # docker load -i rainier05042023.tar >> >> # >> >> # The container can be run with the command: >> >> # docker run -d -e BASEX_JVM=-Xmx19G -p 8080:8080 -p 1984:1984 -p >> 8984:8984 rainier05042023 >> >> # The database can be accessed at http://localhost:8080/dba/ >> >> >> >> Best Regards >> >> >> >> Peter VIlladsen >> >> >> >> *From:* Christian Grün <[email protected]> >> *Sent:* Tuesday, March 4, 2025 6:05 AM >> *To:* Peter Villadsen <[email protected]> >> *Cc:* [email protected] >> *Subject:* [EXTERNAL] Re: [basex-talk] HTTP server performance seems >> very slow... >> >> >> >> Hi Peter, >> >> >> >> To be sure, could you confirm that you have received my mails? >> >> >> >> Best regards, >> >> Christian >> >> >> >> >> >> On Sat, Feb 22, 2025 at 12:41 PM Christian Grün < >> [email protected]> wrote: >> >> Hi Peter, >> >> >> >> > This leads me to believe that a lot of the time (>7 seconds) may be >> spent opening the database each time a POST is done? Is there a way to >> tweak the HTTP server to “remember” the connection with the current >> database for a little while? This may be against the REST principles, of >> course. The database is guaranteed to be read-only in my case. >> >> >> >> One option is to open the database with the initial basexhttp call. It >> will be kept open until the server is shut down: >> >> >> >> basexhttp -c"open name-of-db" >> >> >> >> Best, >> >> Christian >> >> >> >> >> >> On Sat, Feb 15, 2025 at 8:53 PM Peter Villadsen via BaseX-Talk < >> [email protected]> wrote: >> >> All, >> >> >> >> I have been using BaseX for a while, connecting to the TCP endpoint. I >> know the performance I typically get, and it is impressive! However, now I >> wanted to use the HTTP endpoint, and it seems the performance is at least 2 >> orders of magnitude worse! >> >> >> >> Here is the query that I am POSTing to >> http://localhost:8984/rest/RainFnd_6.0.10.0 >> >> >> >> <query xmlns=http://basex.org/rest> >> >> <text>/Class[@Package='ApplicationPlatform']/@Name</text> >> >> </query> >> >> >> >> This simple query will generate around 1500 results from the 13GB >> database (RainFnd_6.0.10.0 <http://localhost:8984/rest/RainFnd_6.0.10.0>). >> It takes just over 7 seconds to do this. If I do this in the BaseX GUI that >> is self contained, it takes around 20ms. >> >> >> >> However, it seems that the time spent executing the query against the >> database is negligible. Please consider this query: >> >> >> >> <query xmlns=http://basex.org/rest> >> >> <text>1 + 2</text> >> >> </query> >> >> >> >> In which there there is obviously no database access. It takes almost the >> same amount of time as the query that accesses the database. 7 seconds to >> calculate 1 + 2 is too long. >> >> >> >> If I post the 1 + 2 query to the endpoint without specifying the database >> on the URL: >> >> >> >> http://localhost:8984/rest >> >> >> >> it takes around 7 milliseconds, close to what I expected, certainly >> within expectations for the time spent sending the query over the wire and >> serializing etc. >> >> >> >> This leads me to believe that a lot of the time (>7 seconds) may be spent >> opening the database each time a POST is done? Is there a way to tweak the >> HTTP server to “remember” the connection with the current database for a >> little while? This may be against the REST principles, of course. The >> database is guaranteed to be read-only in my case. >> >> >> >> The problem is that this makes the HTTP server inappropriate for >> interactive applications. I can still use the TCP server, where I get the >> results I need, but using the HTTP would be simpler, and have less overhead >> in terms of code needed to communicate with the server. >> >> >> >> Please let me know if there is a way to accomplish acceptable performance >> with the HTTP server. >> >> >> >> >> >> Best Regards >> >> >> >> Peter Villadsen >> >> Principal Technical Program Manager >> >> Microsoft Business Applications Group >> >> >> >> >> >>

