On 1/4/06, Brian Moseley <[EMAIL PROTECTED]> wrote: > On 1/4/06, Stefan Guggisberg <[EMAIL PROTECTED]> wrote: > > > i could reproduce the problem easily so i don't need your data anymore, > > thanks. > > i'll keep you posted... > > question - do you have any feeling for what the problem might be? > > i've spent the last couple of days trying to pin it down and haven't > had much luck. i've used ij to examine the node_data value for the > root node inside derby, and it doesn't look malformed. i've stepped > through with a debugger but been stymied when Serializer descends into > DataInputReader (as i don't have the sun jdk sources, don't know if > they're available, and couldn't get jswat to decompile rt.jar). > > my current working hypothesis is that there's a bug in the stream > implementation that derby's handing to me via > ResultSet.getBinaryStream(). i find those classes extremely confusing > tho, so following what's going on inside them is extremely slow going.
your working hypothesis is absolutely correct. the problem is caused by a bug in derby's stream implementation returned by ResultSet.getBinaryStream(). the problem occurs when you read across an internal 32k buffer boundary. i suppose the bug is somewhere in derby's MemByteHolder class. i also agree with you that this code is, erm..., quite confusing :( the good news is that your repository data is not corrupt and that there's an easy temporary workaround for the derby bug (see attachment). > > anyway, every day that i don't get this problem solved is a day our > production service is down. so if anybody has ideas of what might be > happening, please share - maybe it will be the jolt i need to find the > problem and make a fix :) i guess you owe me a beer :) cheers stefan > > (to summarize the problem - when i add a large number of nodes to the > root node, save the session and close the repository, then try to > re-open the repository, a premature EOF exception is thrown when > deserializing the root node state loaded from the derby PM, > specifically when reading the qname of the 1180th child node.) >
Index: jackrabbit/src/main/java/org/apache/jackrabbit/core/state/db/SimpleDbPersistenceManager.java =================================================================== --- jackrabbit/src/main/java/org/apache/jackrabbit/core/state/db/SimpleDbPersistenceManager.java (revision 365595) +++ jackrabbit/src/main/java/org/apache/jackrabbit/core/state/db/SimpleDbPersistenceManager.java (working copy) @@ -457,7 +457,10 @@ throw new NoSuchItemStateException(id.toString()); } - in = rs.getBinaryStream(1); + //in = rs.getBinaryStream(1); + byte[] ba = rs.getBytes(1); + in = new ByteArrayInputStream(ba); + NodeState state = createNew(id); Serializer.deserialize(state, in);