Uploaded image for project: 'UIMA'
  1. UIMA
  2. UIMA-1797

UIMA AS processParentLast logic is not working correctly

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 2.3AS
    • Fix Version/s: 2.3.1AS
    • Component/s: Async Scaleout
    • Labels:
      None

      Description

      UIMA AS aggregate fails with NPE when using multiple CMs configured with processParentLast=true. The aggregate throws this:
      java.lang.NullPointerException
      at org.apache.uima.aae.controller.AggregateAnalysisEngineController_impl.forceToDropTheCas(AggregateAnalysisEngineController_impl.java:1822)
      at org.apache.uima.aae.controller.AggregateAnalysisEngineController_impl.finalStep(AggregateAnalysisEngineController_impl.java:1624)
      at org.apache.uima.aae.controller.AggregateAnalysisEngineController_impl.finalStep(AggregateAnalysisEngineController_impl.java:1714)
      at org.apache.uima.aae.controller.AggregateAnalysisEngineController_impl.executeFlowStep(AggregateAnalysisEngineController_impl.java:2175)
      at org.apache.uima.aae.controller.AggregateAnalysisEngineController_impl.process(AggregateAnalysisEngineController_impl.java:1207)
      at org.apache.uima.aae.handler.HandlerBase.invokeProcess(HandlerBase.java:118)
      at org.apache.uima.aae.handler.input.ProcessResponseHandler.cancelTimerAndProcess(ProcessResponseHandler.java:108)
      at org.apache.uima.aae.handler.input.ProcessResponseHandler.handleProcessResponseWithCASReference(ProcessResponseHandler.java:383)
      at org.apache.uima.aae.handler.input.ProcessResponseHandler.handle(ProcessResponseHandler.java:647)
      at org.apache.uima.aae.handler.HandlerBase.delegate(HandlerBase.java:149)
      at org.apache.uima.aae.handler.input.ProcessRequestHandler_impl.handle(ProcessRequestHandler_impl.java:989)
      at org.apache.uima.aae.spi.transport.vm.UimaVmMessageListener.onMessage(UimaVmMessageListener.java:107)
      at org.apache.uima.aae.spi.transport.vm.UimaVmMessageDispatcher$1.run(UimaVmMessageDispatcher.java:70)
      at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
      at java.lang.Thread.run(Thread.java:619)

      It does not matter if CMs are colocated or remote. If there is more than one CM with processParentLast=true, the code fails as above. The failure seems to occur while processing parent of the last child CAS.

        Activity

        Hide
        cwiklik Jerry Cwiklik added a comment -

        Modified finalStep() to fetch the last delegate that handled a parent CAS to than decide which method to call finalStep() or process(). If the processParentLast=true, process() should be called with a parent CAS reference since it (the parent CAS) was previously "suspended". This call "resumes" processing the parent CAS if all of its children have been processed.

        Show
        cwiklik Jerry Cwiklik added a comment - Modified finalStep() to fetch the last delegate that handled a parent CAS to than decide which method to call finalStep() or process(). If the processParentLast=true, process() should be called with a parent CAS reference since it (the parent CAS) was previously "suspended". This call "resumes" processing the parent CAS if all of its children have been processed.

          People

          • Assignee:
            cwiklik Jerry Cwiklik
            Reporter:
            cwiklik Jerry Cwiklik
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development