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 re...@apache.org on 2016/01/14 14:10:10 UTC
svn commit: r1724598 - in /jackrabbit/oak/trunk/oak-core/src:
main/java/org/apache/jackrabbit/oak/api/
main/java/org/apache/jackrabbit/oak/plugins/document/rdb/
main/java/org/apache/jackrabbit/oak/plugins/value/
test/java/org/apache/jackrabbit/oak/plug...
Author: reschke
Date: Thu Jan 14 13:10:09 2016
New Revision: 1724598
URL: http://svn.apache.org/viewvc?rev=1724598&view=rev
Log:
OAK-3637: Bulk document updates in RDBDocumentStore
Handle lists of UpdateOps which contain multiple updates for the same document
(Acks to Tomek for test case and fix)
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Blob.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/BinaryImpl.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/BulkCreateOrUpdateTest.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Blob.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Blob.java?rev=1724598&r1=1724597&r2=1724598&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Blob.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Blob.java Thu Jan 14 13:10:09 2016
@@ -1,90 +1,90 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.jackrabbit.oak.api;
-
-import java.io.InputStream;
-
-import javax.annotation.CheckForNull;
-import javax.annotation.Nonnull;
-
-/**
- * Immutable representation of a binary value of finite length.
- * <p>
- * Two blobs are considered equal in terms of {@link Object#equals(Object)}
- * if they contain the same sequences of bytes. Implementations can optimize
- * the equality checks by using strong hash codes or other similar means as
- * long as they comply with the above definition of equality.
- * <p>
- * Due to their nature blobs should not be used as keys in hash tables.
- * To highlight that and to ensure semantic correctness of the equality
- * contract across different blob implementations, the {@link Object#hashCode()}
- * method of all blob instances should return zero.
- */
-public interface Blob {
-
- /**
- * Returns a new stream for this blob. The streams returned from
- * multiple calls to this method are byte wise equals. That is,
- * subsequent calls to {@link java.io.InputStream#read() read}
- * return the same sequence of bytes as long as neither call throws
- * an exception.
- *
- * @return a new stream for this blob
- */
- @Nonnull
- InputStream getNewStream();
-
- /**
- * Returns the length of this blob or -1 if unknown.
- *
- * @return the length of this blob.
- */
- long length();
-
- /**
- * Returns a secure reference to this blob, or {@code null} if such
- * a reference is not available.
- *
- * @see <a href="https://issues.apache.org/jira/browse/OAK-834">OAK-834</a>
- * @return binary reference, or {@code null}
- */
- @CheckForNull
- String getReference();
-
- /**
- * A unique identifier of the content of this value. Usually this is a
- * message digest of the content (a cryptographically secure one-way hash).
- * This allows to avoid processing large binary values multiple times.
- * <p>
- * This method returns null if the identifier is unknown. The identifier may
- * not always be available, for example if the value has not yet been saved
- * or processed. Once an identifier is available, it will never change
- * because values are immutable.
- * <p>
- * If two values have the same identifier, the content of the value is
- * guaranteed to be the same. However it is not guaranteed that two values
- * with the same content will return the same identifier.
- * <p>
- * The identifier is opaque, meaning it can have any format and size.
- *
- * @return the unique identifier or null
- */
- @CheckForNull
- String getContentIdentity();
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.jackrabbit.oak.api;
+
+import java.io.InputStream;
+
+import javax.annotation.CheckForNull;
+import javax.annotation.Nonnull;
+
+/**
+ * Immutable representation of a binary value of finite length.
+ * <p>
+ * Two blobs are considered equal in terms of {@link Object#equals(Object)}
+ * if they contain the same sequences of bytes. Implementations can optimize
+ * the equality checks by using strong hash codes or other similar means as
+ * long as they comply with the above definition of equality.
+ * <p>
+ * Due to their nature blobs should not be used as keys in hash tables.
+ * To highlight that and to ensure semantic correctness of the equality
+ * contract across different blob implementations, the {@link Object#hashCode()}
+ * method of all blob instances should return zero.
+ */
+public interface Blob {
+
+ /**
+ * Returns a new stream for this blob. The streams returned from
+ * multiple calls to this method are byte wise equals. That is,
+ * subsequent calls to {@link java.io.InputStream#read() read}
+ * return the same sequence of bytes as long as neither call throws
+ * an exception.
+ *
+ * @return a new stream for this blob
+ */
+ @Nonnull
+ InputStream getNewStream();
+
+ /**
+ * Returns the length of this blob or -1 if unknown.
+ *
+ * @return the length of this blob.
+ */
+ long length();
+
+ /**
+ * Returns a secure reference to this blob, or {@code null} if such
+ * a reference is not available.
+ *
+ * @see <a href="https://issues.apache.org/jira/browse/OAK-834">OAK-834</a>
+ * @return binary reference, or {@code null}
+ */
+ @CheckForNull
+ String getReference();
+
+ /**
+ * A unique identifier of the content of this value. Usually this is a
+ * message digest of the content (a cryptographically secure one-way hash).
+ * This allows to avoid processing large binary values multiple times.
+ * <p>
+ * This method returns null if the identifier is unknown. The identifier may
+ * not always be available, for example if the value has not yet been saved
+ * or processed. Once an identifier is available, it will never change
+ * because values are immutable.
+ * <p>
+ * If two values have the same identifier, the content of the value is
+ * guaranteed to be the same. However it is not guaranteed that two values
+ * with the same content will return the same identifier.
+ * <p>
+ * The identifier is opaque, meaning it can have any format and size.
+ *
+ * @return the unique identifier or null
+ */
+ @CheckForNull
+ String getContentIdentity();
+}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java?rev=1724598&r1=1724597&r2=1724598&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java Thu Jan 14 13:10:09 2016
@@ -294,19 +294,26 @@ public class RDBDocumentStore implements
@Override
public <T extends Document> List<T> createOrUpdate(Collection<T> collection, List<UpdateOp> updateOps) {
- List<T> result = null;
+ Map<UpdateOp, T> results = new LinkedHashMap<UpdateOp, T>();
Map<String, UpdateOp> operationsToCover = new LinkedHashMap<String, UpdateOp>();
+ Set<UpdateOp> duplicates = new HashSet<UpdateOp>();
for (UpdateOp updateOp : updateOps) {
UpdateUtils.assertUnconditional(updateOp);
- UpdateOp clone = updateOp.copy();
- addUpdateCounters(clone);
- operationsToCover.put(clone.getId(), clone);
+ if (operationsToCover.containsKey(updateOp.getId())) {
+ duplicates.add(updateOp);
+ results.put(updateOp, null);
+ } else {
+ UpdateOp clone = updateOp.copy();
+ addUpdateCounters(clone);
+ operationsToCover.put(clone.getId(), clone);
+ results.put(clone, null);
+ }
}
Map<String, T> oldDocs = new HashMap<String, T>();
if (collection == Collection.NODES) {
- oldDocs.putAll((Map<String, T>) readDocumentCached(collection, operationsToCover.keySet()));
+ oldDocs.putAll(readDocumentCached(collection, operationsToCover.keySet()));
}
int i = 0; // iteration count
@@ -327,28 +334,23 @@ public class RDBDocumentStore implements
}
for (List<UpdateOp> partition : partition(newArrayList(operationsToCover.values()), CHUNKSIZE)) {
- Set<String> successfulUpdates = bulkUpdate(collection, partition, oldDocs, upsert);
- operationsToCover.keySet().removeAll(successfulUpdates);
+ Map<UpdateOp, T> successfulUpdates = bulkUpdate(collection, partition, oldDocs, upsert);
+ results.putAll(successfulUpdates);
+ operationsToCover.values().removeAll(successfulUpdates.keySet());
}
}
// if there are some changes left, we'll apply them one after another
for (UpdateOp updateOp : updateOps) {
- if (operationsToCover.remove(updateOp.getId()) != null) {
- // work on the original update operation
- T oldDoc = createOrUpdate(collection, updateOp.copy());
- if (oldDoc != null) {
- oldDocs.put(oldDoc.getId(), oldDoc);
- }
+ UpdateOp conflictedOp = operationsToCover.remove(updateOp.getId());
+ if (conflictedOp != null) {
+ results.put(conflictedOp, createOrUpdate(collection, updateOp));
+ } else if (duplicates.contains(updateOp)) {
+ results.put(updateOp, createOrUpdate(collection, updateOp));
}
}
- result = new ArrayList<T>(updateOps.size());
- for (UpdateOp op : updateOps) {
- result.add(oldDocs.get(op.getId()));
- }
-
- return result;
+ return new ArrayList<T>(results.values());
}
private <T extends Document> Map<String, T> readDocumentCached(Collection<T> collection, Set<String> keys) {
@@ -401,7 +403,7 @@ public class RDBDocumentStore implements
return result;
}
- private <T extends Document> Set<String> bulkUpdate(Collection<T> collection, List<UpdateOp> updates, Map<String, T> oldDocs, boolean upsert) {
+ private <T extends Document> Map<UpdateOp, T> bulkUpdate(Collection<T> collection, List<UpdateOp> updates, Map<String, T> oldDocs, boolean upsert) {
Set<String> missingDocs = new HashSet<String>();
for (UpdateOp op : updates) {
if (!oldDocs.containsKey(op.getId())) {
@@ -451,7 +453,13 @@ public class RDBDocumentStore implements
}
}
- return successfulUpdates;
+ Map<UpdateOp, T> result = new HashMap<UpdateOp, T>();
+ for (UpdateOp op : updates) {
+ if (successfulUpdates.contains(op.getId())) {
+ result.put(op, oldDocs.get(op.getId()));
+ }
+ }
+ return result;
} catch (SQLException ex) {
this.ch.rollbackConnection(connection);
throw new DocumentStoreException(ex);
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/BinaryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/BinaryImpl.java?rev=1724598&r1=1724597&r2=1724598&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/BinaryImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/BinaryImpl.java Thu Jan 14 13:10:09 2016
@@ -1,116 +1,116 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.jackrabbit.oak.plugins.value;
-
-import static com.google.common.base.Objects.toStringHelper;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-import javax.annotation.CheckForNull;
-import javax.jcr.PropertyType;
-import javax.jcr.RepositoryException;
-
-import com.google.common.base.Objects;
-import org.apache.jackrabbit.api.ReferenceBinary;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * TODO document
- */
-class BinaryImpl implements ReferenceBinary {
- private static final Logger LOG = LoggerFactory.getLogger(BinaryImpl.class);
-
- private final ValueImpl value;
-
- BinaryImpl(ValueImpl value) {
- this.value = value;
- }
-
- ValueImpl getBinaryValue() {
- return value.getType() == PropertyType.BINARY ? value : null;
- }
-
- //-------------------------------------------------------------< Binary >---
-
- @Override
- public InputStream getStream() throws RepositoryException {
- return value.getBlob().getNewStream();
- }
-
- @Override
- public int read(byte[] b, long position) throws IOException, RepositoryException {
- InputStream stream = getStream();
- try {
- if (position != stream.skip(position)) {
- throw new IOException("Can't skip to position " + position);
- }
- return stream.read(b);
- } finally {
- stream.close();
- }
- }
-
- @Override
- public long getSize() throws RepositoryException {
- switch (value.getType()) {
- case PropertyType.NAME:
- case PropertyType.PATH:
- // need to respect namespace remapping
- return value.getString().length();
- default:
- return value.getBlob().length();
- }
- }
-
- @Override
- public void dispose() {
- // nothing to do
- }
-
- //---------------------------------------------------< ReferenceBinary >--
-
- @Override @CheckForNull
- public String getReference() {
- try {
- return value.getBlob().getReference();
- } catch (RepositoryException e) {
- LOG.warn("Error getting binary reference", e);
- return null;
- }
- }
-
- @Override
- public boolean equals(Object other) {
- if (other instanceof ReferenceBinary) {
- return Objects.equal(getReference(), ((ReferenceBinary) other).getReference());
- } else {
- return false;
- }
- }
-
- @Override
- public int hashCode() {
- return Objects.hashCode(getReference());
- }
-
- @Override
- public String toString() {
- return toStringHelper(this).addValue(value).toString();
- }
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.oak.plugins.value;
+
+import static com.google.common.base.Objects.toStringHelper;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import javax.annotation.CheckForNull;
+import javax.jcr.PropertyType;
+import javax.jcr.RepositoryException;
+
+import com.google.common.base.Objects;
+import org.apache.jackrabbit.api.ReferenceBinary;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * TODO document
+ */
+class BinaryImpl implements ReferenceBinary {
+ private static final Logger LOG = LoggerFactory.getLogger(BinaryImpl.class);
+
+ private final ValueImpl value;
+
+ BinaryImpl(ValueImpl value) {
+ this.value = value;
+ }
+
+ ValueImpl getBinaryValue() {
+ return value.getType() == PropertyType.BINARY ? value : null;
+ }
+
+ //-------------------------------------------------------------< Binary >---
+
+ @Override
+ public InputStream getStream() throws RepositoryException {
+ return value.getBlob().getNewStream();
+ }
+
+ @Override
+ public int read(byte[] b, long position) throws IOException, RepositoryException {
+ InputStream stream = getStream();
+ try {
+ if (position != stream.skip(position)) {
+ throw new IOException("Can't skip to position " + position);
+ }
+ return stream.read(b);
+ } finally {
+ stream.close();
+ }
+ }
+
+ @Override
+ public long getSize() throws RepositoryException {
+ switch (value.getType()) {
+ case PropertyType.NAME:
+ case PropertyType.PATH:
+ // need to respect namespace remapping
+ return value.getString().length();
+ default:
+ return value.getBlob().length();
+ }
+ }
+
+ @Override
+ public void dispose() {
+ // nothing to do
+ }
+
+ //---------------------------------------------------< ReferenceBinary >--
+
+ @Override @CheckForNull
+ public String getReference() {
+ try {
+ return value.getBlob().getReference();
+ } catch (RepositoryException e) {
+ LOG.warn("Error getting binary reference", e);
+ return null;
+ }
+ }
+
+ @Override
+ public boolean equals(Object other) {
+ if (other instanceof ReferenceBinary) {
+ return Objects.equal(getReference(), ((ReferenceBinary) other).getReference());
+ } else {
+ return false;
+ }
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(getReference());
+ }
+
+ @Override
+ public String toString() {
+ return toStringHelper(this).addValue(value).toString();
+ }
}
\ No newline at end of file
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/BulkCreateOrUpdateTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/BulkCreateOrUpdateTest.java?rev=1724598&r1=1724597&r2=1724598&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/BulkCreateOrUpdateTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/BulkCreateOrUpdateTest.java Thu Jan 14 13:10:09 2016
@@ -19,6 +19,7 @@ package org.apache.jackrabbit.oak.plugin
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.List;
@@ -153,4 +154,46 @@ public class BulkCreateOrUpdateTest exte
assertEquals("The document hasn't been updated", 200l, newDoc.get("prop"));
}
}
+
+ /**
+ * This method adds a few updateOperations modifying the same document.
+ */
+ @Test
+ public void testUpdateSameDocument() {
+ final int amount = 5;
+ List<UpdateOp> updates = new ArrayList<UpdateOp>(amount);
+ String id = this.getClass().getName() + ".testUpdateSameDocument";
+ removeMe.add(id);
+
+ for (int i = 0; i < amount; i++) {
+ UpdateOp up = new UpdateOp(id, true);
+ up.set("_id", id);
+ up.set("update_id", i);
+ up.set("prop_" + i, 100);
+ updates.add(up);
+ }
+
+ List<NodeDocument> docs = ds.createOrUpdate(Collection.NODES, updates);
+ assertEquals(amount, docs.size());
+ assertNull("The old value should be null for the first update", docs.get(0));
+ Long prevModCount = null;
+ for (int i = 1; i < amount; i++) {
+ Long modCount = docs.get(i).getModCount();
+ if (prevModCount != null) {
+ assertNotNull(modCount);
+ assertTrue("_modCount, when present, must be increasing, but changed from " + prevModCount + " to " + modCount,
+ prevModCount.longValue() < modCount.longValue());
+ }
+ prevModCount = modCount;
+ assertEquals("The old value is not correct", Long.valueOf(i - 1), docs.get(i).get("update_id"));
+ }
+
+ NodeDocument newDoc = ds.find(Collection.NODES, id);
+ if (newDoc.getModCount() != null) {
+ assertEquals("The final mod count is not correct", Long.valueOf(5), newDoc.getModCount());
+ }
+ for (int i = 0; i < amount; i++) {
+ assertEquals("The value is not correct", 100l, newDoc.get("prop_" + i));
+ }
+ }
}
Re: svn commit: r1724598 - in /jackrabbit/oak/trunk/oak-core/src:
main/java/org/apache/jackrabbit/oak/api/
main/java/org/apache/jackrabbit/oak/plugins/document/rdb/
main/java/org/apache/jackrabbit/oak/plugins/value/
test/java/org/apache/jackrabbit/oak/plug...
Posted by Julian Reschke <ju...@greenbytes.de>.
On 2016-01-14 14:13, Chetan Mehrotra wrote:
> On Thu, Jan 14, 2016 at 6:40 PM, <re...@apache.org> wrote:
>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Blob.java
>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java
>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/BinaryImpl.java
>
> I see some changes to Blob/BinaryImpl. Are those change related to
> this issue? Most likely look like a noise but just wanted to confirm
>
> Chetan Mehrotra
...the change must have been caused by my converting line ends (before
applying a patch). I tried to revert the change for the two files, but
SVN doesn't see a change, thus doesn't attempt to change something.
Best regards, Julian
Re: svn commit: r1724598 - in /jackrabbit/oak/trunk/oak-core/src:
main/java/org/apache/jackrabbit/oak/api/
main/java/org/apache/jackrabbit/oak/plugins/document/rdb/
main/java/org/apache/jackrabbit/oak/plugins/value/
test/java/org/apache/jackrabbit/oak/plug...
Posted by Julian Reschke <ju...@gmx.de>.
On 2016-01-14 14:13, Chetan Mehrotra wrote:
> On Thu, Jan 14, 2016 at 6:40 PM, <re...@apache.org> wrote:
>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Blob.java
>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java
>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/BinaryImpl.java
>
> I see some changes to Blob/BinaryImpl. Are those change related to
> this issue? Most likely look like a noise but just wanted to confirm
>
> Chetan Mehrotra
Strange. Will check. Thanks for spotting this!
Re: svn commit: r1724598 - in /jackrabbit/oak/trunk/oak-core/src:
main/java/org/apache/jackrabbit/oak/api/ main/java/org/apache/jackrabbit/oak/plugins/document/rdb/
main/java/org/apache/jackrabbit/oak/plugins/value/ test/java/org/apache/jackrabbit/oak/plug...
Posted by Chetan Mehrotra <ch...@gmail.com>.
On Thu, Jan 14, 2016 at 6:40 PM, <re...@apache.org> wrote:
> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/Blob.java
> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java
> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/BinaryImpl.java
I see some changes to Blob/BinaryImpl. Are those change related to
this issue? Most likely look like a noise but just wanted to confirm
Chetan Mehrotra