UIMA
  1. UIMA
  2. UIMA-1797

UIMA AS processParentLast logic is not working correctly

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major 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
        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
        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:
            Jerry Cwiklik
            Reporter:
            Jerry Cwiklik
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development