Uploaded image for project: 'Nuxeo Platform'
  1. Nuxeo Platform
  2. NXP-26817

Make KeyValueBlobTransientStore robust when underlying blob is missing

    XMLWordPrintable

    Details

    • Release Notes Summary:
      The KeyValueBlob transient store is more robust when the underlying blob is missing.
    • Sprint:
      nxFG 11.1.3

      Description

      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.

       

        Attachments

          Activity

            People

            • Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Time Tracking

                Estimated:
                Original Estimate - Not Specified
                Not Specified
                Remaining:
                Remaining Estimate - 0 minutes
                0m
                Logged:
                Time Spent - 3 hours
                3h