Author: amitj
Date: Fri Apr 6 08:50:07 2018
New Revision: 1828502
URL: http://svn.apache.org/viewvc?rev=1828502=rev
Log:
OAK-7389: Mongo/FileBlobStore does not update timestamp for already existing
blobs
Refresh the timestamp for FileBlobStore and upsert the blob for Mongo to update
the timestamp in case already there
Modified:
jackrabbit/oak/trunk/oak-blob/src/main/java/org/apache/jackrabbit/oak/spi/blob/FileBlobStore.java
jackrabbit/oak/trunk/oak-blob/src/main/java/org/apache/jackrabbit/oak/spi/blob/MemoryBlobStore.java
jackrabbit/oak/trunk/oak-blob/src/test/java/org/apache/jackrabbit/oak/spi/blob/AbstractBlobStoreTest.java
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoBlobStore.java
Modified:
jackrabbit/oak/trunk/oak-blob/src/main/java/org/apache/jackrabbit/oak/spi/blob/FileBlobStore.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-blob/src/main/java/org/apache/jackrabbit/oak/spi/blob/FileBlobStore.java?rev=1828502=1828501=1828502=diff
==
---
jackrabbit/oak/trunk/oak-blob/src/main/java/org/apache/jackrabbit/oak/spi/blob/FileBlobStore.java
(original)
+++
jackrabbit/oak/trunk/oak-blob/src/main/java/org/apache/jackrabbit/oak/spi/blob/FileBlobStore.java
Fri Apr 6 08:50:07 2018
@@ -109,6 +109,7 @@ public class FileBlobStore extends Abstr
protected synchronized void storeBlock(byte[] digest, int level, byte[]
data) throws IOException {
File f = getFile(digest, false);
if (f.exists()) {
+FileUtils.touch(f);
return;
}
File parent = f.getParentFile();
Modified:
jackrabbit/oak/trunk/oak-blob/src/main/java/org/apache/jackrabbit/oak/spi/blob/MemoryBlobStore.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-blob/src/main/java/org/apache/jackrabbit/oak/spi/blob/MemoryBlobStore.java?rev=1828502=1828501=1828502=diff
==
---
jackrabbit/oak/trunk/oak-blob/src/main/java/org/apache/jackrabbit/oak/spi/blob/MemoryBlobStore.java
(original)
+++
jackrabbit/oak/trunk/oak-blob/src/main/java/org/apache/jackrabbit/oak/spi/blob/MemoryBlobStore.java
Fri Apr 6 08:50:07 2018
@@ -33,6 +33,7 @@ public class MemoryBlobStore extends Abs
private HashMap map = new HashMap();
private HashMap old = new HashMap();
+private HashMap timestamps = new HashMap();
private boolean mark;
@Override
@@ -46,7 +47,9 @@ public class MemoryBlobStore extends Abs
@Override
protected synchronized void storeBlock(byte[] digest, int level, byte[]
data) {
-map.put(new BlockId(digest, 0), data);
+BlockId id = new BlockId(digest, 0);
+map.put(id, data);
+timestamps.put(id, System.currentTimeMillis());
}
@Override
@@ -90,8 +93,11 @@ public class MemoryBlobStore extends Abs
for (String chunkId : chunkIds) {
BlockId id = new BlockId(StringUtils.convertHexToBytes(chunkId),
0);
if (map.containsKey(id)) {
-map.remove(id);
-count++;
+if (maxLastModifiedTime == 0 || (maxLastModifiedTime > 0 &&
maxLastModifiedTime > timestamps.get(id))) {
+map.remove(id);
+timestamps.remove(id);
+count++;
+}
} else if (old.containsKey(id)) {
old.remove(id);
count++;
Modified:
jackrabbit/oak/trunk/oak-blob/src/test/java/org/apache/jackrabbit/oak/spi/blob/AbstractBlobStoreTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-blob/src/test/java/org/apache/jackrabbit/oak/spi/blob/AbstractBlobStoreTest.java?rev=1828502=1828501=1828502=diff
==
---
jackrabbit/oak/trunk/oak-blob/src/test/java/org/apache/jackrabbit/oak/spi/blob/AbstractBlobStoreTest.java
(original)
+++
jackrabbit/oak/trunk/oak-blob/src/test/java/org/apache/jackrabbit/oak/spi/blob/AbstractBlobStoreTest.java
Fri Apr 6 08:50:07 2018
@@ -446,6 +446,28 @@ public abstract class AbstractBlobStoreT
}
@Test
+public void deleteUpdatedBlob() throws Exception {
+String id = store.writeBlob(randomStream(0, getArtifactSize()));
+Thread.sleep(100);
+
+long beforeUpdateTime = System.currentTimeMillis();
+
+Thread.sleep(1000);
+
+// Should update the timestamp
+String id2 = store.writeBlob(randomStream(0, getArtifactSize()));
+assertEquals(id, id2);
+
+Set chunks = Sets.newHashSet();
+Iterator iter = store.resolveChunks(id.toString());
+while (iter.hasNext()) {
+chunks.add(iter.next());
+}
+long count