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/06/08 03:43:22 UTC
svn commit: r1747342 - in /jackrabbit/oak/trunk: oak-blob-cloud/
oak-blob-cloud/src/main/java/org/apache/jackrabbit/oak/blob/cloud/aws/s3/
oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/
oak-core/src/main/java/org/apache/jackrabbit/oak/p...
Author: amitj
Date: Wed Jun 8 03:43:22 2016
New Revision: 1747342
URL: http://svn.apache.org/viewvc?rev=1747342&view=rev
Log:
OAK-4330: DataStoreBlobStore#getAllChunkIds fetches DataRecord when not needed
Create a new method getAllRecords() which returns the DataRecord.
DataStoreBlobStore#getAllChunkIds now uses this method to return all the ids. These are still length encoded without doing a round trip again to fetch the record
Modified:
jackrabbit/oak/trunk/oak-blob-cloud/pom.xml
jackrabbit/oak/trunk/oak-blob-cloud/src/main/java/org/apache/jackrabbit/oak/blob/cloud/aws/s3/S3Backend.java
jackrabbit/oak/trunk/oak-blob-cloud/src/main/java/org/apache/jackrabbit/oak/blob/cloud/aws/s3/SharedS3Backend.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/SharedDataStore.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreBlobStore.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/OakFileDataStore.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/SharedS3DataStore.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/SharedDataStoreUtilsTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreBlobStoreTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreUtils.java
jackrabbit/oak/trunk/oak-parent/pom.xml
Modified: jackrabbit/oak/trunk/oak-blob-cloud/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-blob-cloud/pom.xml?rev=1747342&r1=1747341&r2=1747342&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-blob-cloud/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-blob-cloud/pom.xml Wed Jun 8 03:43:22 2016
@@ -108,6 +108,10 @@
</dependency>
<dependency>
+ <groupId>com.google.guava</groupId>
+ <artifactId>guava</artifactId>
+ </dependency>
+ <dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
Modified: jackrabbit/oak/trunk/oak-blob-cloud/src/main/java/org/apache/jackrabbit/oak/blob/cloud/aws/s3/S3Backend.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-blob-cloud/src/main/java/org/apache/jackrabbit/oak/blob/cloud/aws/s3/S3Backend.java?rev=1747342&r1=1747341&r2=1747342&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-blob-cloud/src/main/java/org/apache/jackrabbit/oak/blob/cloud/aws/s3/S3Backend.java (original)
+++ jackrabbit/oak/trunk/oak-blob-cloud/src/main/java/org/apache/jackrabbit/oak/blob/cloud/aws/s3/S3Backend.java Wed Jun 8 03:43:22 2016
@@ -693,6 +693,18 @@ public class S3Backend implements Shared
}
}
+ @Override
+ public Iterator<DataRecord> getAllRecords() {
+ return new RecordsIterator<DataRecord>(
+ new Function<S3ObjectSummary, DataRecord>() {
+ @Override
+ public DataRecord apply(S3ObjectSummary input) {
+ return new S3DataRecord(s3service, bucket, getIdentifierName(input.getKey()),
+ input.getLastModified().getTime(), input.getSize());
+ }
+ });
+ }
+
/**
* Returns an iterator over the S3 objects
* @param <T>
Modified: jackrabbit/oak/trunk/oak-blob-cloud/src/main/java/org/apache/jackrabbit/oak/blob/cloud/aws/s3/SharedS3Backend.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-blob-cloud/src/main/java/org/apache/jackrabbit/oak/blob/cloud/aws/s3/SharedS3Backend.java?rev=1747342&r1=1747341&r2=1747342&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-blob-cloud/src/main/java/org/apache/jackrabbit/oak/blob/cloud/aws/s3/SharedS3Backend.java (original)
+++ jackrabbit/oak/trunk/oak-blob-cloud/src/main/java/org/apache/jackrabbit/oak/blob/cloud/aws/s3/SharedS3Backend.java Wed Jun 8 03:43:22 2016
@@ -24,6 +24,7 @@ import org.apache.jackrabbit.core.data.D
import org.apache.jackrabbit.core.data.DataStoreException;
import java.io.InputStream;
+import java.util.Iterator;
import java.util.List;
/**
@@ -70,4 +71,13 @@ public interface SharedS3Backend extends
* @param prefix the prefix of the record
*/
void deleteAllMetadataRecords(String prefix);
+
+ /**
+ * Returns a list of all DataRecords
+ *
+ * @return iterator over DataRecords
+ * @throws DataStoreException
+ */
+ Iterator<DataRecord> getAllRecords()
+ throws DataStoreException;
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/SharedDataStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/SharedDataStore.java?rev=1747342&r1=1747341&r2=1747342&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/SharedDataStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/SharedDataStore.java Wed Jun 8 03:43:22 2016
@@ -17,6 +17,7 @@
package org.apache.jackrabbit.oak.plugins.blob;
import java.io.InputStream;
+import java.util.Iterator;
import java.util.List;
import org.apache.jackrabbit.core.data.DataRecord;
@@ -74,6 +75,13 @@ public interface SharedDataStore {
void deleteAllMetadataRecords(String prefix);
/**
+ * Retrieved an iterator over all DataRecords.
+ *
+ * @return iterator over DataRecords
+ */
+ Iterator<DataRecord> getAllRecords();
+
+ /**
* Gets the type.
*
* @return the type
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreBlobStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreBlobStore.java?rev=1747342&r1=1747341&r2=1747342&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreBlobStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreBlobStore.java Wed Jun 8 03:43:22 2016
@@ -364,18 +364,7 @@ public class DataStoreBlobStore implemen
@Override
public Iterator<String> getAllChunkIds(final long maxLastModifiedTime) throws Exception {
- return transform(filter(transform(delegate.getAllIdentifiers(), new Function<DataIdentifier, DataRecord>() {
- @Nullable
- @Override
- public DataRecord apply(@Nullable DataIdentifier input) {
- try {
- return delegate.getRecord(input);
- } catch (DataStoreException e) {
- log.warn("Error occurred while fetching DataRecord for identifier {}", input, e);
- }
- return null;
- }
- }), new Predicate<DataRecord>() {
+ return transform(filter(getAllRecords(), new Predicate<DataRecord>() {
@Override
public boolean apply(@Nullable DataRecord input) {
if (input != null && (maxLastModifiedTime <= 0
@@ -465,6 +454,14 @@ public class DataStoreBlobStore implemen
}
@Override
+ public Iterator<DataRecord> getAllRecords() {
+ if (delegate instanceof SharedDataStore) {
+ return ((SharedDataStore) delegate).getAllRecords();
+ }
+ return Iterators.emptyIterator();
+ }
+
+ @Override
public Type getType() {
if (delegate instanceof SharedDataStore) {
return Type.SHARED;
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/OakFileDataStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/OakFileDataStore.java?rev=1747342&r1=1747341&r2=1747342&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/OakFileDataStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/OakFileDataStore.java Wed Jun 8 03:43:22 2016
@@ -218,6 +218,26 @@ public class OakFileDataStore extends Fi
}
@Override
+ public Iterator<DataRecord> getAllRecords() {
+ final String path = normalizeNoEndSeparator(getPath());
+ final OakFileDataStore store = this;
+ return Files.fileTreeTraverser().postOrderTraversal(new File(getPath()))
+ .filter(new Predicate<File>() {
+ @Override
+ public boolean apply(File input) {
+ return input.isFile() &&
+ !normalizeNoEndSeparator(input.getParent()).equals(path);
+ }
+ })
+ .transform(new Function<File, DataRecord>() {
+ @Override
+ public DataRecord apply(File input) {
+ return new FileDataRecord(store, new DataIdentifier(input.getName()), input);
+ }
+ }).iterator();
+ }
+
+ @Override
public Type getType() {
return Type.SHARED;
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/SharedS3DataStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/SharedS3DataStore.java?rev=1747342&r1=1747341&r2=1747342&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/SharedS3DataStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/SharedS3DataStore.java Wed Jun 8 03:43:22 2016
@@ -26,6 +26,7 @@ import org.apache.jackrabbit.oak.blob.cl
import org.apache.jackrabbit.oak.plugins.blob.SharedDataStore;
import java.io.InputStream;
+import java.util.Iterator;
import java.util.List;
/**
@@ -69,6 +70,11 @@ public class SharedS3DataStore extends S
}
@Override
+ public Iterator<DataRecord> getAllRecords() {
+ return backend.getAllRecords();
+ }
+
+ @Override
public Type getType() {
return Type.SHARED;
}
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/SharedDataStoreUtilsTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/SharedDataStoreUtilsTest.java?rev=1747342&r1=1747341&r2=1747342&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/SharedDataStoreUtilsTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/SharedDataStoreUtilsTest.java Wed Jun 8 03:43:22 2016
@@ -18,37 +18,53 @@
*/
package org.apache.jackrabbit.oak.plugins.blob;
+import static com.google.common.collect.Sets.newHashSet;
+import static junit.framework.Assert.assertEquals;
+import static org.apache.jackrabbit.oak.plugins.blob.datastore.DataStoreUtils.cleanup;
+import static org.apache.jackrabbit.oak.plugins.blob.datastore.DataStoreUtils.getBlobStore;
import static org.hamcrest.CoreMatchers.instanceOf;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
+import java.io.InputStream;
+import java.util.Date;
+import java.util.Random;
+import java.util.Set;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
+import javax.annotation.Nullable;
+
+import com.google.common.base.Function;
+import com.google.common.collect.Iterables;
import junit.framework.Assert;
import org.apache.commons.io.FileUtils;
import org.apache.jackrabbit.core.data.DataRecord;
+import org.apache.jackrabbit.oak.plugins.blob.datastore.DataStoreBlobStore;
import org.apache.jackrabbit.oak.plugins.blob.datastore.SharedDataStoreUtils;
import org.apache.jackrabbit.oak.plugins.blob.datastore.SharedDataStoreUtils.SharedStoreRecordType;
import org.apache.jackrabbit.oak.plugins.blob.datastore.DataStoreUtils;
import org.junit.After;
import org.junit.Assume;
import org.junit.BeforeClass;
-import org.junit.Ignore;
import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* Test for SharedDataUtils to test addition, retrieval and deletion of root records.
*/
public class SharedDataStoreUtilsTest {
- SharedDataStore dataStore;
+ private static final Logger log = LoggerFactory.getLogger(SharedDataStoreUtilsTest.class);
+
+ DataStoreBlobStore dataStore;
@BeforeClass
public static void setUpBeforeClass() throws Exception {
try {
- Assume.assumeThat(DataStoreUtils.getBlobStore(), instanceOf(SharedDataStore.class));
+ Assume.assumeThat(getBlobStore(), instanceOf(SharedDataStore.class));
} catch (Exception e) {
Assume.assumeNoException(e);
}
@@ -56,7 +72,7 @@ public class SharedDataStoreUtilsTest {
@Test
public void test() throws Exception {
- dataStore = DataStoreUtils.getBlobStore();
+ dataStore = getBlobStore();
String repoId1 = UUID.randomUUID().toString();
String repoId2 = UUID.randomUUID().toString();
@@ -72,7 +88,7 @@ public class SharedDataStoreUtilsTest {
dataStore.addMetadataRecord(new ByteArrayInputStream(new byte[0]),
SharedStoreRecordType.MARKED_START_MARKER.getNameFromId(repoId1));
DataRecord markerRec1 = dataStore.getMetadataRecord(SharedStoreRecordType.MARKED_START_MARKER.getNameFromId(repoId1));
- Assert.assertEquals(
+ assertEquals(
SharedStoreRecordType.MARKED_START_MARKER.getIdFromName(markerRec1.getIdentifier().toString()),
repoId1);
long lastModifiedMarkerRec1 = markerRec1.getLastModified();
@@ -89,14 +105,14 @@ public class SharedDataStoreUtilsTest {
DataRecord rec2 = dataStore.getMetadataRecord(SharedStoreRecordType.REFERENCES.getNameFromId(repoId2));
long lastModifiedRec2 = rec2.getLastModified();
- Assert.assertEquals(SharedStoreRecordType.REPOSITORY.getIdFromName(repo1.getIdentifier().toString()), repoId1);
- Assert.assertEquals(
+ assertEquals(SharedStoreRecordType.REPOSITORY.getIdFromName(repo1.getIdentifier().toString()), repoId1);
+ assertEquals(
SharedStoreRecordType.REPOSITORY.getIdFromName(repo2.getIdentifier().toString()),
repoId2);
- Assert.assertEquals(
+ assertEquals(
SharedStoreRecordType.REFERENCES.getIdFromName(rec1.getIdentifier().toString()),
repoId1);
- Assert.assertEquals(
+ assertEquals(
SharedStoreRecordType.REFERENCES.getIdFromName(rec2.getIdentifier().toString()),
repoId2);
@@ -108,7 +124,7 @@ public class SharedDataStoreUtilsTest {
// Since, we don't care about which file specifically but only the earliest timestamped record
// Earliest time should be the min timestamp from the 2 reference files
long minRefTime = (lastModifiedRec1 <= lastModifiedRec2 ? lastModifiedRec1 : lastModifiedRec2);
- Assert.assertEquals(
+ assertEquals(
SharedDataStoreUtils.getEarliestRecord(
dataStore.getAllMetadataRecords(SharedStoreRecordType.REFERENCES.getType())).getLastModified(),
minRefTime);
@@ -129,13 +145,59 @@ public class SharedDataStoreUtilsTest {
Assert.assertTrue(dataStore.getAllMetadataRecords(SharedStoreRecordType.MARKED_START_MARKER.getType()).isEmpty());
// Repository ids should still be available
- Assert.assertEquals(2,
+ assertEquals(2,
dataStore.getAllMetadataRecords(SharedStoreRecordType.REPOSITORY.getType()).size());
}
+ @Test
+ public void testGetAllChunkIds() throws Exception {
+ dataStore = getBlobStore();
+ int number = 1010;
+ Set<String> added = newHashSet();
+ for (int i = 0; i < number; i++) {
+ String rec = dataStore.writeBlob(randomStream(i, 16516));
+ added.add(rec);
+ }
+
+ Set<String> retrieved = newHashSet(dataStore.getAllChunkIds(0));
+ assertEquals(added, retrieved);
+ }
+
+ @Test
+ public void testGetAllRecords() throws Exception {
+ dataStore = getBlobStore();
+ int number = 1010;
+ Set<String> added = newHashSet();
+ for (int i = 0; i < number; i++) {
+ String rec = dataStore.addRecord(randomStream(i, 16516))
+ .getIdentifier().toString();
+ added.add(rec);
+ }
+
+ Set<String> retrieved = newHashSet(Iterables.transform(newHashSet(dataStore.getAllRecords()),
+ new Function<DataRecord, String>() {
+ @Nullable @Override public String apply(@Nullable DataRecord input) {
+ return input.getIdentifier().toString();
+ }
+ }));
+ assertEquals(added, retrieved);
+ }
+
+ static InputStream randomStream(int seed, int size) {
+ Random r = new Random(seed);
+ byte[] data = new byte[size];
+ r.nextBytes(data);
+ return new ByteArrayInputStream(data);
+ }
+
@After
public void close() throws IOException {
FileUtils.cleanDirectory(new File(DataStoreUtils.getHomeDir()));
+ try {
+ cleanup(dataStore.getDataStore(), new Date());
+ } catch (Exception e) {
+ log.error("Error closing data store", e);
+ }
}
}
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreBlobStoreTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreBlobStoreTest.java?rev=1747342&r1=1747341&r2=1747342&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreBlobStoreTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreBlobStoreTest.java Wed Jun 8 03:43:22 2016
@@ -28,7 +28,12 @@ import java.util.List;
import java.util.Random;
import java.util.Set;
+import javax.annotation.Nullable;
+
+import com.google.common.base.Function;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
@@ -38,6 +43,7 @@ import org.apache.jackrabbit.core.data.D
import org.apache.jackrabbit.core.data.DataStoreException;
import org.apache.jackrabbit.oak.spi.blob.AbstractBlobStoreTest;
import org.apache.jackrabbit.oak.spi.blob.BlobStoreInputStream;
+import org.apache.jackrabbit.oak.spi.blob.GarbageCollectableBlobStore;
import org.apache.jackrabbit.oak.spi.blob.stats.BlobStatsCollector;
import org.junit.After;
import org.junit.Before;
@@ -159,9 +165,16 @@ public class DataStoreBlobStoreTest exte
DataIdentifier d20 = new DataIdentifier("d-20");
DataIdentifier d30 = new DataIdentifier("d-30");
List<DataIdentifier> dis = ImmutableList.of(d10, d20, d30);
-
- DataStore mockedDS = mock(DataStore.class);
- when(mockedDS.getAllIdentifiers()).thenReturn(dis.iterator());
+ List<DataRecord> recs = Lists.newArrayList(
+ Iterables.transform(dis, new Function<DataIdentifier, DataRecord>() {
+ @Nullable
+ @Override
+ public DataRecord apply(@Nullable DataIdentifier input) {
+ return new TimeDataRecord(input);
+ }
+ }));
+ OakFileDataStore mockedDS = mock(OakFileDataStore.class);
+ when(mockedDS.getAllRecords()).thenReturn(recs.iterator());
when(mockedDS.getRecord(new DataIdentifier("d-10"))).thenReturn(new TimeDataRecord(d10));
when(mockedDS.getRecord(new DataIdentifier("d-20"))).thenReturn(new TimeDataRecord(d20));
when(mockedDS.getRecord(new DataIdentifier("d-30"))).thenReturn(new TimeDataRecord(d30));
@@ -170,7 +183,6 @@ public class DataStoreBlobStoreTest exte
Iterator<String> chunks = ds.getAllChunkIds(25);
Set<String> expected = Sets.newHashSet("d-10","d-20");
assertEquals(expected, Sets.newHashSet(chunks));
-
}
@Test
Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreUtils.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreUtils.java?rev=1747342&r1=1747341&r2=1747342&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreUtils.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreUtils.java Wed Jun 8 03:43:22 2016
@@ -105,7 +105,7 @@ public class DataStoreUtils {
}
public static FileDataStore createFDS(File root, int minRecordLength) {
- FileDataStore fds = new FileDataStore();
+ OakFileDataStore fds = new OakFileDataStore();
fds.setPath(root.getAbsolutePath());
fds.setMinRecordLength(minRecordLength);
fds.init(null);
Modified: jackrabbit/oak/trunk/oak-parent/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-parent/pom.xml?rev=1747342&r1=1747341&r2=1747342&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-parent/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-parent/pom.xml Wed Jun 8 03:43:22 2016
@@ -168,6 +168,8 @@
<filter>!org.apache.jackrabbit.oak.namepath</filter>
<filter>!org.apache.jackrabbit.oak.osgi</filter>
<filter>!org.apache.jackrabbit.oak.plugins.atomic</filter>
+ <filter>!org.apache.jackrabbit.oak.plugins.blob</filter>
+ <filter>!org.apache.jackrabbit.oak.plugins.blob.datastore</filter>
<filter>!org.apache.jackrabbit.oak.plugins.commit</filter>
<filter>!org.apache.jackrabbit.oak.plugins.identifier</filter>
<filter>!org.apache.jackrabbit.oak.plugins.index</filter>