You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by st...@apache.org on 2014/07/01 15:57:27 UTC
svn commit: r1607081 - in /jackrabbit/oak/trunk:
oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/mk/
oak-commons/src/test/java/org/apache/jackrabbit/oak/commons/mk/
oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/
oak-core/src/main/...
Author: stefan
Date: Tue Jul 1 13:57:26 2014
New Revision: 1607081
URL: http://svn.apache.org/r1607081
Log:
OAK-1931: MicroKernel.read() returns negative value
Modified:
jackrabbit/oak/trunk/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/mk/MicroKernelInputStream.java
jackrabbit/oak/trunk/oak-commons/src/test/java/org/apache/jackrabbit/oak/commons/mk/MicroKernelInputStreamTest.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/NodeStoreKernel.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentMK.java
jackrabbit/oak/trunk/oak-it/mk/src/main/java/org/apache/jackrabbit/mk/test/MicroKernelIT.java
jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/core/MicroKernelImpl.java
Modified: jackrabbit/oak/trunk/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/mk/MicroKernelInputStream.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/mk/MicroKernelInputStream.java?rev=1607081&r1=1607080&r2=1607081&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/mk/MicroKernelInputStream.java (original)
+++ jackrabbit/oak/trunk/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/mk/MicroKernelInputStream.java Tue Jul 1 13:57:26 2014
@@ -54,8 +54,8 @@ public class MicroKernelInputStream exte
@Override
public int read(byte[] b, int off, int len) {
int l = mk.read(id, pos, b, off, len);
- if (l < 0) {
- return l;
+ if (l <= 0) {
+ return -1;
}
pos += l;
return l;
Modified: jackrabbit/oak/trunk/oak-commons/src/test/java/org/apache/jackrabbit/oak/commons/mk/MicroKernelInputStreamTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-commons/src/test/java/org/apache/jackrabbit/oak/commons/mk/MicroKernelInputStreamTest.java?rev=1607081&r1=1607080&r2=1607081&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-commons/src/test/java/org/apache/jackrabbit/oak/commons/mk/MicroKernelInputStreamTest.java (original)
+++ jackrabbit/oak/trunk/oak-commons/src/test/java/org/apache/jackrabbit/oak/commons/mk/MicroKernelInputStreamTest.java Tue Jul 1 13:57:26 2014
@@ -250,7 +250,8 @@ public class MicroKernelInputStreamTest
InputStream stream = new ByteArrayInputStream(data);
try {
ByteStreams.skipFully(stream, pos);
- return stream.read(buff, off, length);
+ int read = stream.read(buff, off, length);
+ return read < 0 ? 0 : read;
} finally {
stream.close();
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/NodeStoreKernel.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/NodeStoreKernel.java?rev=1607081&r1=1607080&r2=1607081&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/NodeStoreKernel.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/NodeStoreKernel.java Tue Jul 1 13:57:26 2014
@@ -623,7 +623,8 @@ public class NodeStoreKernel implements
InputStream stream = blob.getNewStream();
try {
ByteStreams.skipFully(stream, pos);
- return stream.read(buff, off, length);
+ int read = stream.read(buff, off, length);
+ return read < 0 ? 0 : read;
} finally {
stream.close();
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentMK.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentMK.java?rev=1607081&r1=1607080&r2=1607081&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentMK.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentMK.java Tue Jul 1 13:57:26 2014
@@ -319,7 +319,8 @@ public class DocumentMK implements Micro
public int read(String blobId, long pos, byte[] buff, int off, int length)
throws MicroKernelException {
try {
- return nodeStore.getBlobStore().readBlob(blobId, pos, buff, off, length);
+ int read = nodeStore.getBlobStore().readBlob(blobId, pos, buff, off, length);
+ return read < 0 ? 0 : read;
} catch (Exception e) {
throw new MicroKernelException(e);
}
Modified: jackrabbit/oak/trunk/oak-it/mk/src/main/java/org/apache/jackrabbit/mk/test/MicroKernelIT.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-it/mk/src/main/java/org/apache/jackrabbit/mk/test/MicroKernelIT.java?rev=1607081&r1=1607080&r2=1607081&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-it/mk/src/main/java/org/apache/jackrabbit/mk/test/MicroKernelIT.java (original)
+++ jackrabbit/oak/trunk/oak-it/mk/src/main/java/org/apache/jackrabbit/mk/test/MicroKernelIT.java Tue Jul 1 13:57:26 2014
@@ -1387,7 +1387,6 @@ public class MicroKernelIT extends Abstr
}
}
- @Ignore("OAK-1931") // FIXME OAK-1931
@Test
public void testReadReturnsNonNegative() {
TestInputStream in = new TestInputStream(0);
Modified: jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/core/MicroKernelImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/core/MicroKernelImpl.java?rev=1607081&r1=1607080&r2=1607081&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/core/MicroKernelImpl.java (original)
+++ jackrabbit/oak/trunk/oak-mk/src/main/java/org/apache/jackrabbit/mk/core/MicroKernelImpl.java Tue Jul 1 13:57:26 2014
@@ -630,7 +630,8 @@ public class MicroKernelImpl implements
throw new IllegalStateException("this instance has already been disposed");
}
try {
- return rep.getBlobStore().readBlob(blobId, pos, buff, off, length);
+ int read = rep.getBlobStore().readBlob(blobId, pos, buff, off, length);
+ return read < 0 ? 0 : read;
} catch (Exception e) {
throw new MicroKernelException(e);
}
Re: svn commit: r1607081 - in /jackrabbit/oak/trunk:
oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/mk/
oak-commons/src/test/java/org/apache/jackrabbit/oak/commons/mk/
oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/ oak-core/src/main/...
Posted by Jukka Zitting <ju...@gmail.com>.
Hi,
On Tue, Jul 1, 2014 at 5:02 PM, Jukka Zitting <ju...@gmail.com> wrote:
> On Tue, Jul 1, 2014 at 9:57 AM, <st...@apache.org> wrote:
>> - return rep.getBlobStore().readBlob(blobId, pos, buff, off, length);
>> + int read = rep.getBlobStore().readBlob(blobId, pos, buff, off, length);
>> + return read < 0 ? 0 : read;
>
> Shouldn't this (and all the other similar lines) be:
>
> return read < 0 ? -1 : read;
>
> ? My build gets stuck in an infinite loop because the read() method returns 0.
Answering my own questions: it shouldn't, as described in the issue.
The stuck thread I saw was (same stack trace for many minutes):
"main" #1 prio=5 os_prio=0 tid=0x00000000024c8000 nid=0x4c90 runnable
[0x00000000030fd000]
java.lang.Thread.State: RUNNABLE
at org.apache.jackrabbit.oak.commons.IOUtils.skipFully(IOUtils.java:80)
at org.apache.jackrabbit.oak.spi.blob.AbstractBlobStore.readBlob(AbstractBlobStore.java:431)
at org.apache.jackrabbit.oak.plugins.document.DocumentMK.read(DocumentMK.java:322)
at org.apache.jackrabbit.oak.commons.mk.MicroKernelInputStream.read(MicroKernelInputStream.java:56)
at com.google.common.io.ByteStreams.read(ByteStreams.java:828)
at com.google.common.io.ByteSource.contentEquals(ByteSource.java:304)
at com.google.common.io.ByteStreams.equal(ByteStreams.java:661)
at org.apache.jackrabbit.oak.plugins.memory.AbstractBlob.equal(AbstractBlob.java:58)
at org.apache.jackrabbit.oak.plugins.memory.AbstractBlob.equals(AbstractBlob.java:153)
at org.junit.Assert.isEquals(Assert.java:132)
at org.junit.Assert.assertEquals(Assert.java:121)
at org.junit.Assert.assertEquals(Assert.java:147)
at org.apache.jackrabbit.oak.core.MutableTreeTest.testBlob(MutableTreeTest.java:474)
A subsequent build didn't reproduce this problem, so it might have
been some unrelated transient problem. I'll let you know if this
occurs again.
BR,
Jukka Zitting
Re: svn commit: r1607081 - in /jackrabbit/oak/trunk:
oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/mk/
oak-commons/src/test/java/org/apache/jackrabbit/oak/commons/mk/
oak-core/src/main/java/org/apache/jackrabbit/oak/kernel/ oak-core/src/main/...
Posted by Jukka Zitting <ju...@gmail.com>.
Hi,
On Tue, Jul 1, 2014 at 9:57 AM, <st...@apache.org> wrote:
> - return rep.getBlobStore().readBlob(blobId, pos, buff, off, length);
> + int read = rep.getBlobStore().readBlob(blobId, pos, buff, off, length);
> + return read < 0 ? 0 : read;
Shouldn't this (and all the other similar lines) be:
return read < 0 ? -1 : read;
? My build gets stuck in an infinite loop because the read() method returns 0.
BR,
Jukka Zitting