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

Manage the case where workflow definitions have changed

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 10.10
    • Fix Version/s: 10.10-HF48, 11.x, 2021.4
    • Component/s: Workflow
    • Release Notes Summary:
      Workflow cache uses cluster invalidations.
    • Backlog priority:
      700
    • Sprint:
      nxplatform #35
    • Story Points:
      5

      Description

      Even when NXP-30170 will be fixed, there is still a case where Nuxeo nodes could reference in their cache different DocumentRoute ids (workflow definitions)

      1. Node A has started with the Serial workflow using version 1
      2. user A starts on node A the Serial workflow (v1)
      3. this version 1 is added to the routeModel cache on Node A for 10 minutes
      4. Node B is started with a new definition for the Serial workflow (version 2) => it replaces in the repository the corresponding DocumentRoute
      5. user 1 starts on node A another Serial workflow
      6. it should starts the Serial workflow v2 but it throws an error because nodeA still references v1 in its cache

      This exception happens

      org.nuxeo.ecm.core.api.DocumentNotFoundException: 5923a85e-6c21-4501-a6df-7cc4d6dda272
        at org.nuxeo.ecm.core.storage.dbs.DBSSession.getDocumentByUUID(DBSSession.java:407) ~[nuxeo-core-storage-dbs-10.10-HF33.jar:?]
        at sun.reflect.GeneratedMethodAccessor99.invoke(Unknown Source) ~[?:?]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_275]
        at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_275]
        at org.nuxeo.ecm.core.storage.dbs.DBSRepositoryBase$DBSSessionInvoker.invoke(DBSRepositoryBase.java:505) ~[nuxeo-core-storage-dbs-10.10-HF33.jar:?]
        at com.sun.proxy.$Proxy103.getDocumentByUUID(Unknown Source) ~[?:?]
        at org.nuxeo.ecm.core.api.AbstractSession.resolveReference(AbstractSession.java:337) ~[nuxeo-core-10.10-HF36.jar:?]
        at org.nuxeo.ecm.core.api.AbstractSession.getDocument(AbstractSession.java:959) ~[nuxeo-core-10.10-HF36.jar:?]
        at org.nuxeo.ecm.platform.routing.core.impl.DocumentRoutingServiceImpl$1.run(DocumentRoutingServiceImpl.java:216) ~[nuxeo-routing-core-10.10-HF36.jar:?]
        at org.nuxeo.ecm.core.api.UnrestrictedSessionRunner.runUnrestricted(UnrestrictedSessionRunner.java:119) ~[nuxeo-core-api-10.10-HF37.jar:?]
        at org.nuxeo.ecm.platform.routing.core.impl.DocumentRoutingServiceImpl.createNewInstance(DocumentRoutingServiceImpl.java:241) ~[nuxeo-routing-core-10.10-HF36.jar:?]
      

      Nuxeo shoud implement a fallback or try/catch mechanism where it tries to find the new version of the Serial workflow if a DocumentNotFoundException happens when reading a routeModel id.

        Attachments

          Activity

            People

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

              Dates

              • Created:
                Updated:
                Resolved: