[
https://issues.apache.org/jira/browse/OAK-7389?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16618480#comment-16618480
]
Julian Reschke edited comment on OAK-7389 at 9/18/18 8:37 AM:
--------------------------------------------------------------
WIP -
https://issues.apache.org/jira/secure/attachment/12940128/OAK-7389-1.0.diff -
still with test failures
{noformat}
deleteUpdatedBlob(org.apache.jackrabbit.oak.plugins.blob.datastore.DataStoreBlobStoreTest)
Time elapsed: 1.114 sec <<< FAILURE!
java.lang.AssertionError: Deleted updated blobs
at org.junit.Assert.fail(Assert.java:88)
at org.junit.Assert.assertTrue(Assert.java:41)
at org.junit.Assert.assertFalse(Assert.java:64)
at
org.apache.jackrabbit.oak.spi.blob.AbstractBlobStoreTest.deleteUpdatedBlob(AbstractBlobStoreTest.java:446)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
{nofomat}
was (Author: reschke):
WIP -
https://issues.apache.org/jira/secure/attachment/12940128/OAK-7389-1.0.diff -
still with test failures
> Mongo/FileBlobStore does not update timestamp for already existing blobs
> ------------------------------------------------------------------------
>
> Key: OAK-7389
> URL: https://issues.apache.org/jira/browse/OAK-7389
> Project: Jackrabbit Oak
> Issue Type: Bug
> Components: blob
> Affects Versions: 1.2.14, 1.4.20, 1.8.2, 1.6.11
> Reporter: Amit Jain
> Assignee: Amit Jain
> Priority: Critical
> Fix For: 1.9.0, 1.10, 1.2.30, 1.4.23, 1.6.14, 1.8.7
>
> Attachments: OAK-7389-1.0.diff, OAK-7389-1.0.diff, OAK-7389-1.0.diff,
> OAK-7389-v1.patch, OAK-7389-v2.patch
>
>
> MongoBlobStore uses uses the {{insert}} call and ignores any exceptions which
> means any existing value won't be updated.
> {code:java}
> @Override
> protected void storeBlock(byte[] digest, int level, byte[] data) throws
> IOException {
> String id = StringUtils.convertBytesToHex(digest);
> cache.put(id, data);
> // Check if it already exists?
> MongoBlob mongoBlob = new MongoBlob();
> mongoBlob.setId(id);
> mongoBlob.setData(data);
> mongoBlob.setLevel(level);
> mongoBlob.setLastMod(System.currentTimeMillis());
> // TODO check the return value
> // TODO verify insert is fast if the entry already exists
> try {
> getBlobCollection().insertOne(mongoBlob);
> } catch (DuplicateKeyException e) {
> // the same block was already stored before: ignore
> } catch (MongoException e) {
> if (e.getCode() == DUPLICATE_KEY_ERROR_CODE) {
> // the same block was already stored before: ignore
> } else {
> throw new IOException(e.getMessage(), e);
> }
> }
> }
> {code}
> FileBlobStore also returns if there's a file already existing without
> updating the timestamp
> {code:java}
> @Override
> protected synchronized void storeBlock(byte[] digest, int level, byte[]
> data) throws IOException {
> File f = getFile(digest, false);
> if (f.exists()) {
> return;
> }
> .........
> {code}
> The above would cause data loss in DSGC if there are updates to the blob
> blocks which are re-surrected (stored again at the time of DSGC) because the
> timestamp would never have been modified.
>
> cc/ [~tmueller], [~mreutegg], [~chetanm], [~catholicon]
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)