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