eXist 1.2.6 Maintenance Release

eXist 1.2.6 is another maintenance release, containing fixes for critical stability issues we found while working on the 1.3 branch. Important changes include:

  • automatic document defragmentation could have unpredictable results if nodes were updated during a query
  • Java service wrapper sometimes killed eXist too early, causing corruptions in the db (see )
  • fixed db corruption after crash recovery
  • query optimizer in some cases failed to analyze called functions, thus causing bad performance
  • fixed evaluation of positional predicates with a //n abbreviated step (which translates to /desendant-or-self::node()/n)

Like all releases in the 1.2.x series, eXist 1.2.6 is not meant to introduce new features (those are reserved for 1.3/1.4). The only new feature in 1.2.6 is support for incremental backups.

I will now continue to wrap up 1.3. We still lack documentation and there are a few regressions to fix before 1.3 can be handed out.

Java Service Wrapper Issues

I recently had some problems with a Windows server running eXist trunk as a service. The service restarted a few times during the day (mainly due to memory issues which have been fixed since then). However, eXist did not get online again after the first restart. What happened?

The Java service wrapper has a timeout: when launching a new JVM, it will only wait for a certain time for the newly started process to respond. If it doesn't respond within that timeframe, the wrapper will assume that something went wrong and kills the process. It then starts the next attempt.

Now, during the first restart, eXist detected that it wasn't terminated cleanly. It thus triggered a recovery run, which also involved a reindex. This all happened within the service startup method, and since the reindex took longer than 60 seconds, the service wrapper timed out and killed eXist. During the next restart, eXist would again start the recovery - and get killed again! The wrapper never gave it enough time to get up. Even worse, crashing eXist during the recovery phase can cause serious damage to the database files.

We have now introduced a callback mechanism which can be used by the service wrapper to communicate with eXist. eXist will periodically send a signal to the wrapper while it's starting up or shutting down. The wrapper will extend its timeouts accordingly.

The required changes are available in SVN trunk and have also been ported back to the eXist-stable-1.2 branch (which is the basis of all 1.2.x releases). If you experience corruptions after a service restart, please consider an update. We are also thinking about a 1.2.6 release.

TwitterReader.jpg

Kurt Cagle today published an article on DevX.com: "From Social to Serious: Combining Twitter and RESTful Web Services". Using the implementation of a twitter reader as an example, the article demonstrates how to build a RESTful data application. It covers many topics along the way, including request routing and XProc.

Note: if you are using the trunk version of eXist, you may want to look at XQueryURLRewrite, which is the successor of the RedirectorServlet used by Kurt.

Dashboards with XQuery

picture1.jpg

IBM Developerworks today has an article on "Making Dashboards with XQuery".

It uses eXist and provides a nice example of how to access external website data to create a mashup in XQuery. Source code is available as a starting point for your own experiments, though it is not optimized for speed in any way. Note: you may want to test this with eXist trunk, not 1.2.5 (processing in-memory fragments works much faster with trunk).

P.S.: also check Chris Wallace's article on "Dashboards and Widgets in XQuery"

eXist 1.2.5 Released

We are happy to announce that eXist 1.2.5 is now available for download. Like all releases in the 1.2.x series, version 1.2.5 is a bug fix and stability release. It only contains hand-selected changes, which have been tested in production. Updating is recommended.

The 1.2.5 release addresses a number of major problems and deficiencies. These include, among other things:

  • attribute values larger than 4K could lead to index failures
  • concurrency issues/access conflicts caused queries to fail unpredictably and sometimes damaged the db
  • xmlrpc interface was responsible for memory issues and limited parallel connections; major update of the xmlrpc libs and interfaces
  • bugs in crash recovery; improved shutdown/startup process to avoid unnecessary, sometimes fatal recovery runs
  • new web interface for monitoring queries/running operations
  • updated SOAP libraries to fix memory issues

We would now like to finalize 1.3, which will be based on the current SVN trunk. However, I will continue to maintain the 1.2.x branch, so it is possible that there will be a 1.2.6 release in addition to 1.3.

Special thanks to Dannes who spent a weekend with me (Wolfgang) to get the release ready.