Uploaded image for project: 'Camel'
  1. Camel
  2. CAMEL-8010

Race condition in AggregatorProcessor recovery sometimes causes duplicates (still)

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 2.14.0
    • 2.20.0
    • camel-core
    • None
    • Unknown

    Description

      CAMEL-6097 Patched a pretty clear race condition between the completion thread (CT) and recovery thread (RT) but leaves several holes when exercised with a Jdbc repository and a separate aggregation thread (AT).

      #1 is relevant to all repository backends.
      #2 only affects fully transactional backends

      I'm currently taking a look into this bug as its a show-stopper that persistent repositories actually decreases reliability. (Untested) workaround is to add an in-memory idemptotentconsumer immediately after the aggregation.

      Here AT starts and completes an aggregation between defensive copy and when RT repo scanning starts. CT then confirms it (in memory ) before repo scanning ends.

      AT RT CT
        inProg COPY to inProgCopy  
      repo START x    
          repo REMOVE x
          <commit>
          inProg ADD x
        repo SCAN (sees x)  
          process x
          repo CONFIRM x
          inProg REMOVE x
          <commit>
        x not inProg or inProgCopy  
        process x  
        repo CONFIRM x   Fails silently as this is doInTransactionWithoutResult
        <commit>  
      SQLWarning ignored: SQL state '02000', error code '10000', message [No row was found for FETCH, UPDATE or DELETE; or the result of a query is an empty table.]

      Side note: inProgressExchanges is updated by a Synchronisation inside the UOW so is immediately visible although any DB change may not be visible for ages (in threading terms) as the entire transaction must commit first.

      Attachments

        Issue Links

          Activity

            People

              acosentino Andrea Cosentino
              drekbour Marc Carter
              Votes:
              1 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: