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 ch...@apache.org on 2014/04/01 12:14:04 UTC
svn commit: r1583594 - in /jackrabbit/oak/trunk/oak-core/src:
main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreBlobStore.java
test/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreBlobStoreTest.java
Author: chetanm
Date: Tue Apr 1 10:14:04 2014
New Revision: 1583594
URL: http://svn.apache.org/r1583594
Log:
OAK-1655 - DataStoreBlobStore does not take into maxLastModifiedTime when fetching all chunks
Fixed it by filtering the DataRecord base don there modifiedTime
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreBlobStore.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreBlobStoreTest.java
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=1583594&r1=1583593&r2=1583594&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 Tue Apr 1 10:14:04 2014
@@ -32,6 +32,7 @@ import javax.annotation.Nullable;
import javax.jcr.RepositoryException;
import com.google.common.base.Function;
+import com.google.common.base.Predicate;
import com.google.common.collect.Iterators;
import com.google.common.io.ByteStreams;
import com.google.common.io.Closeables;
@@ -47,6 +48,8 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.collect.Iterators.filter;
+import static com.google.common.collect.Iterators.transform;
/**
* BlobStore wrapper for DataStore. Wraps Jackrabbit 2 DataStore and expose them as BlobStores
@@ -258,12 +261,23 @@ public class DataStoreBlobStore implemen
}
@Override
- public Iterator<String> getAllChunkIds(long maxLastModifiedTime) throws Exception {
- //TODO Ignores the maxLastModifiedTime currently.
- return Iterators.transform(delegate.getAllIdentifiers(), new Function<DataIdentifier, String>() {
- @Nullable
+ public Iterator<String> getAllChunkIds(final long maxLastModifiedTime) throws Exception {
+ return transform(filter(delegate.getAllIdentifiers(), new Predicate<DataIdentifier>() {
@Override
- public String apply(@Nullable DataIdentifier input) {
+ public boolean apply(DataIdentifier input) {
+ try {
+ DataRecord dr = delegate.getRecord(input);
+ if(dr != null && dr.getLastModified() < maxLastModifiedTime){
+ return true;
+ }
+ } catch (DataStoreException e) {
+ log.warn("Error occurred while fetching DataRecord for identifier {}",input, e);
+ }
+ return false;
+ }
+ }),new Function<DataIdentifier, String>() {
+ @Override
+ public String apply(DataIdentifier input) {
return input.toString();
}
});
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=1583594&r1=1583593&r2=1583594&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 Tue Apr 1 10:14:04 2014
@@ -22,8 +22,13 @@ package org.apache.jackrabbit.oak.plugin
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
+import java.util.Iterator;
+import java.util.List;
import java.util.Random;
+import java.util.Set;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Sets;
import org.apache.commons.io.IOUtils;
import org.apache.jackrabbit.core.data.DataIdentifier;
import org.apache.jackrabbit.core.data.DataRecord;
@@ -122,6 +127,26 @@ public class DataStoreBlobStoreTest {
assertNull(ds.getReference(inMemBlobId));
}
+ @Test
+ public void testGetAllChunks() throws Exception{
+ DataIdentifier d10 = new DataIdentifier("d-10");
+ 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());
+ 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));
+ DataStoreBlobStore ds = new DataStoreBlobStore(mockedDS);
+
+ Iterator<String> chunks = ds.getAllChunkIds(25);
+ Set<String> expected = Sets.newHashSet("d-10","d-20");
+ assertEquals(expected, Sets.newHashSet(chunks));
+
+ }
+
private static class ByteArrayDataRecord implements DataRecord {
private final byte[] data;
private final DataIdentifier identifier;
@@ -158,4 +183,37 @@ public class DataStoreBlobStoreTest {
return 0;
}
}
+
+ private static class TimeDataRecord implements DataRecord {
+ private final DataIdentifier id;
+
+ private TimeDataRecord(DataIdentifier id) {
+ this.id = id;
+ }
+
+ @Override
+ public DataIdentifier getIdentifier() {
+ return id;
+ }
+
+ @Override
+ public String getReference() {
+ return id.toString();
+ }
+
+ @Override
+ public long getLength() throws DataStoreException {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public InputStream getStream() throws DataStoreException {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public long getLastModified() {
+ return Long.valueOf(id.toString().substring(id.toString().indexOf('-')+1));
+ }
+ }
}