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

Don't update proxies on consecutive Session#save calls

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Minor
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 10.10-HF57, 2021.15
    • Component/s: Core DBS

      Description

      Proxies of DBS transient documents will always be fetched/updated when calling consecutively CoreSession#save in the same transaction.

      To reproduce the issues, export a container as zip in Nuxeo UI.

      The problem is due to updateDenormalizedState which always updates the blob keys which makes the document dirty. See below

      markDirty:83, DBSDocumentState (org.nuxeo.ecm.core.storage.dbs)
      put:148, DBSDocumentState (org.nuxeo.ecm.core.storage.dbs)
      computeBlobKeys:1181, DBSTransactionState (org.nuxeo.ecm.core.storage.dbs)
      updateDenormalizedState:1168, DBSTransactionState (org.nuxeo.ecm.core.storage.dbs)
      save:893, DBSTransactionState (org.nuxeo.ecm.core.storage.dbs)
      save:232, DBSSession (org.nuxeo.ecm.core.storage.dbs)
      save:1585, AbstractSession (org.nuxeo.ecm.core.api)
      close:195, OperationContext (org.nuxeo.ecm.automation)
      render:99, AutomationRenderer (org.nuxeo.ecm.platform.rendition.extension)
      render:78, DefaultAutomationRenditionProvider (org.nuxeo.ecm.platform.rendition.extension)
      computeRenditionBlobs:62, LiveRendition (org.nuxeo.ecm.platform.rendition.impl)
      getBlobs:60, LazyRendition (org.nuxeo.ecm.platform.rendition.impl)
      getBlob:50, LazyRendition (org.nuxeo.ecm.platform.rendition.impl)
      getDefaultRendition:112, GetContainerRendition (org.nuxeo.ecm.platform.rendition.operation)
      getFolderishBlobs:132, GetContainerRendition (org.nuxeo.ecm.platform.rendition.operation)
      processContainer:150, GetContainerRendition (org.nuxeo.ecm.platform.rendition.operation)
      getDefaultRendition:108, GetContainerRendition (org.nuxeo.ecm.platform.rendition.operation)
      getFolderishBlobs:132, GetContainerRendition (org.nuxeo.ecm.platform.rendition.operation)
      processContainer:150, GetContainerRendition (org.nuxeo.ecm.platform.rendition.operation)
      run:162, GetContainerRendition (org.nuxeo.ecm.platform.rendition.operation)
      invoke0:-1, NativeMethodAccessorImpl (jdk.internal.reflect)
      invoke:62, NativeMethodAccessorImpl (jdk.internal.reflect)
      invoke:43, DelegatingMethodAccessorImpl (jdk.internal.reflect)
      invoke:566, Method (java.lang.reflect)
      doInvoke:175, InvokableMethod (org.nuxeo.ecm.automation.core.impl)
      invoke:180, InvokableMethod (org.nuxeo.ecm.automation.core.impl)
      invoke:147, OperationChainCompiler$OperationMethod (org.nuxeo.ecm.automation.core.impl)
      invoke:154, OperationChainCompiler$OperationMethod (org.nuxeo.ecm.automation.core.impl)
      lambda$invoke$0:212, OperationChainCompiler$CompiledChainImpl (org.nuxeo.ecm.automation.core.impl)
      call:-1, 219452473 (org.nuxeo.ecm.automation.core.impl.OperationChainCompiler$CompiledChainImpl$$Lambda$1649)
      call:314, OperationContext (org.nuxeo.ecm.automation)
      callWithChainParameters:279, OperationContext (org.nuxeo.ecm.automation)
      invoke:209, OperationChainCompiler$CompiledChainImpl (org.nuxeo.ecm.automation.core.impl)
      run:115, OperationServiceImpl (org.nuxeo.ecm.automation.core.impl)
      run:91, OperationServiceImpl (org.nuxeo.ecm.automation.core.impl)
      render:89, AutomationRenderer (org.nuxeo.ecm.platform.rendition.extension)
      render:78, DefaultAutomationRenditionProvider (org.nuxeo.ecm.platform.rendition.extension)
      computeRenditionBlobs:62, LiveRendition (org.nuxeo.ecm.platform.rendition.impl)
      getBlobs:60, LazyRendition (org.nuxeo.ecm.platform.rendition.impl)
      getBlob:50, LazyRendition (org.nuxeo.ecm.platform.rendition.impl)
      getBlob:60, DownloadBlobHolder (org.nuxeo.ecm.platform.rendition.adapter)
      resolveBlob:829, DownloadServiceImpl (org.nuxeo.ecm.core.io.download)
      

      But the dirty flag is not reset because there's no real change on the document.
      This will trigger the proxy update on the next Session#save calls.

        Attachments

          Issue Links

            Activity

              People

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

                Dates

                • Created:
                  Updated:
                  Resolved: