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);
 






Reply via email to