-
Type: Bug
-
Status: Resolved
-
Priority: Minor
-
Resolution: Fixed
-
Affects Version/s: None
-
Fix Version/s: 9.10-HF28, 10.10-HF02, 11.1, 2021.0
-
Component/s: TransientStore
-
Release Notes Summary:The KeyValueBlob transient store is more robust when the underlying blob is missing.
-
Tags:
-
Sprint:nxFG 11.1.3
The KeyValueBlobTransientStore should be robust when getting or garbage collecting a blob that's missing from the underlying blob provider.
This situation may happen if the KeyValueBlobTransientStore has an underlying blob provider that can be accessed by another service and whose blobs can be removed without the knowledge of the KeyValueBlobTransientStore.
2019-02-13 19:45:00,328 WARN [org.nuxeo.ecm.core.blob.binary.LocalBinaryManager] cannot fetch content at /data/apps/nuxeo/binaries/../binaries_transient_WorkResultsCache/data/f4/bd/f4bdb46562eb21970cb44bf78defa648 (file does not exist), check your configuration 2019-02-13 19:45:00,329 ERROR [org.nuxeo.ecm.work.AbstractWork] Exception work: TransiantStorageGCWork(, Progress(?%, ?/0), null) org.nuxeo.ecm.core.api.NuxeoException: java.io.IOException: Unknown binary: f4bdb46562eb21970cb44bf78defa648 at org.nuxeo.ecm.core.transientstore.keyvalueblob.KeyValueBlobTransientStore.getBlobs(KeyValueBlobTransientStore.java:494) at java.util.stream.ReferencePipelines$3$1.accept(ReferencePipeline.java:193) ... at org.nuxeo.ecm.core.transientstore.keyvalueblob.KeyValueBlobTransientStore.doGC(KeyValueBlobTransientStore.java:221) at java.util.HashMap$Values.forEach(HashMap.java:981) at org.nuxeo.ecm.core.transientstore.TransientStorageComponent.doGC(TransientStorageComponent.java:74) ... Caused by: java.io.IOException: Unknown binary: f4bdb46562eb21970cb44bf78defa648 at org.nuxeo.ecm.core.blob.binary.BinaryBlobProvider.readBlob(BinaryBlobProvider.java:100) at org.nuxeo.ecm.core.transientstore.keyvalueblob.KeyValueBlobTransientStore.getBlobs(KeyValueBlobTransientStore.java:491) ... 2019-02-13 20:00:00,157 ERROR [org.nuxeo.ecm.core.work.AbstractWork] Exception during work: TransiantStorageGCWork(, Progress(?%, ?/0), null) java.lang.RuntimeException: Alread started at org.nuxeo.ecm.core.blob.binary.LocalBinaryManager$DefaultBinaryGarbageCollector.start(LocalBinaryManager.java:289) at org.nuxeo.ecm.core.transientstore.keyvalueblob.KeyValueBlobTransientStore.doGC(KeyValueBlobTransientStore.java:216) at java.util.HashMap$Values.forEach(HashMap.java:981) at org.nuxeo.ecm.core.transientstore.TransientStorageComponent.doGC(TransientStorageComponent.java:74) ...
The above stack trace also shows a consequence: if there's an error while getting the blob during GC, then the GC is not stopped correctly.