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 am...@apache.org on 2016/12/09 05:45:06 UTC
svn commit: r1773322 - in /jackrabbit/oak/trunk/oak-core/src:
main/java/org/apache/jackrabbit/oak/plugins/memory/AbstractBlob.java
test/java/org/apache/jackrabbit/oak/plugins/memory/AbstractBlobTest.java
Author: amitj
Date: Fri Dec 9 05:45:06 2016
New Revision: 1773322
URL: http://svn.apache.org/viewvc?rev=1773322&view=rev
Log:
OAK-5253: Optimize AbstractBlob#equal to not do content equals when possible
- Returning result of identity comparison in case identities non null
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/AbstractBlob.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/memory/AbstractBlobTest.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/AbstractBlob.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/AbstractBlob.java?rev=1773322&r1=1773321&r2=1773322&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/AbstractBlob.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/memory/AbstractBlob.java Fri Dec 9 05:45:06 2016
@@ -57,10 +57,11 @@ public abstract class AbstractBlob imple
String ai = a.getContentIdentity();
String bi = b.getContentIdentity();
- //Check for identity first. If they are same then its
- //definitely same blob. If not we need to check further.
- if (ai != null && bi != null && ai.equals(bi)){
- return true;
+ //Check for identities not null. If not null then the identity check suffices to confirm
+ // whether they are same blob or not as the identity is a content hash.
+ // If any of the identities is null we need to check further.
+ if (ai != null && bi != null) {
+ return ai.equals(bi);
}
try {
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/memory/AbstractBlobTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/memory/AbstractBlobTest.java?rev=1773322&r1=1773321&r2=1773322&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/memory/AbstractBlobTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/memory/AbstractBlobTest.java Fri Dec 9 05:45:06 2016
@@ -37,13 +37,35 @@ public class AbstractBlobTest {
@Test
public void blobComparisonBasedOnContentIdentity() throws Exception {
byte[] data = bytes(100);
+ // Same data same id
Blob a = new TestBlob(data, "id1", false);
Blob b = new TestBlob(data, "id1", false);
assertTrue(AbstractBlob.equal(a, b));
- Blob a2 = new TestBlob(data, "id1", true);
- Blob b2 = new TestBlob(data, "id2", true);
- assertTrue("Blobs with different id but same content should match", AbstractBlob.equal(a2, b2));
+ // Same data diff ids (assumes that id is content hashed so takes a short cut)
+ a = new TestBlob(data, "id1", false);
+ b = new TestBlob(data, "id2", false);
+ assertFalse("Blob with diff id but same content should not match",
+ AbstractBlob.equal(a, b));
+
+ // Diff data diff ids
+ byte data2[] = bytes(100);
+ Blob a2 = new TestBlob(data, "id1", false);
+ Blob b2 = new TestBlob(data2, "id2", false);
+ assertFalse("Blobs with different id and diff content should not match",
+ AbstractBlob.equal(a2, b2));
+
+ // 2nd id null
+ Blob a3 = new TestBlob(data, "id1", true);
+ Blob b3 = new TestBlob(data, null, true);
+ assertTrue("Blobs with a null id but same content should match",
+ AbstractBlob.equal(a3, b3));
+
+ // 1st id null
+ Blob a4 = new TestBlob(data, null, true);
+ Blob b4 = new TestBlob(data, "id2", true);
+ assertTrue("Blobs with a null id but same content should match",
+ AbstractBlob.equal(a4, b4));
}
@Test