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

AggregateProcessor/JdbcAggregationRepository : table COMPLETED not cleaned when AggregationStrategy.aggregate does not return oldExchange

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Major
    • Resolution: Won't Fix
    • Affects Version/s: 2.16.2
    • Fix Version/s: 2.19.0
    • Component/s: camel-core, camel-sql
    • Labels:
      None
    • Estimated Complexity:
      Moderate

      Description

      Hi,

      in AggregateProcessor + JdbcAggregationRepository :
      the table _AGG_COMPLETED is not cleaned when AggregationStrategy.aggregate() does returns newExchange .

      it is ok when aggregate() returns oldExchange,

      looking at the code at these places:
      https://github.com/apache/camel/blob/master/camel-core/src/main/java/org/apache/camel/processor/aggregate/AggregateProcessor.java#L662
      https://github.com/apache/camel/blob/master/components/camel-sql/src/main/java/org/apache/camel/processor/aggregate/jdbc/JdbcAggregationRepository.java#L317
      https://github.com/apache/camel/blob/master/camel-core/src/main/java/org/apache/camel/processor/aggregate/AggregateProcessor.java#L694

      it works as follow:
      1. AggregateProcessor asks to remove oldExchange from _AGG. it gives correlationKey and oldExcange as parameter
      2. JdbcAggregationRepository deletes exchange from _AGG with correlationKey and insert given exchange (oldExchange) in _AGG_COMPLETED
      3. AggregateProcessor confirms exchange is complete, and ask JdbcAggregationRepository to delete aggregated exchange from _AGG_COMPLETED

      if aggregated exchange does not have the same id as oldExchange, point 3 does nothing and oldExchange stays in _AGG_COMPLETED

      the problem seems to be in point 2, the aggregatedExchange should be given instead of oldExchange.

      the aggregation works fine, but the _AGG_COMPLETED fills up and recovery will definitely not work in this scenario.

      workaround: always return oldExchange in AggregationStrategy.aggregate()

        Attachments

        1. CAMEL-10084.patch
          11 kB
          Richard Vigniel

          Activity

            People

            • Assignee:
              davsclaus Claus Ibsen
              Reporter:
              rvigniel Richard Vigniel
            • Votes:
              1 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: