Hi everyone,
(warning this is a long read)
I'm using server version 8.6.1 and writing a Java client to move lots of
documents from a SQL database to a BaseX database.
The basic version works just fine. Tested up to 1M documents.
Now I'm trying to do exactly the same but with AUTOFLUSH disabled +
manually FLUSH every N documents and it fails after just a few inserts.
Pseudo code:
(set up client session, create and open new database)
session.execute(new Set(MainOptions.AUTOFLUSH, false));
int i = 0;
while(doc = nextDocs()) {
session.add(doc.getKey(), doc.getInputStream());
if(i++ % 10 == 0) { /* value reduced to 10 for testing purposes */
session.execute(new Flush());
}
}
(tear down session)
Remember tha
After the first FLUSH has been issued, the ADD directive starts randomly
throwing a org.basex.core.BaseXException (when using the BaseXClient
implementation it was its inner ok() method that started returning false).
I tracked the root cause in the server: the SAXParser complaining about the
documents not being well-formed (the exact same documents are all imported
fine with AUTOFLUSH on). In the server standard logs I can see why: parts
of those documents are suddenly missing (usually the beginning + command
part) at parse time!
That is the symptom, now for the cause I'm also observing that the ADD and
FLUSH directive in the logs are out of order, exactly like what would
happen in the FLUSH commands were not properly queued.
I was expecting something like :
ADD
ADD
ADD
(N times)
FLUSH
ADD
ADD
ADD
(N times)
FLUSH
etc.
Instead I'm observing
ADD
FLUSH
ADD
FLUSH
ADD
FLUSH
(etc)
then
ADD
ADD
ADD
(lots of them)
ERROR
So for now I'm keeping autoflush on :) but is there anything obvious I
could try there?
(server runs on linux openjdk 1.8.0_91, client runs in Tomcat on Windows
Oracle JDK 1.8.0_121)
Thanks,
Colin