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

Recipient list does not wait for processing an exchange by recipients and ignores aggregation strategy when route is transacted.

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 3.7.4, 3.7.2, 3.7.3, 3.8.0, 3.10.0
    • Fix Version/s: 3.11.0
    • Component/s: camel-core
    • Labels:
      None
    • Estimated Complexity:
      Unknown

      Description

      When migrating to Camel 3.7.2 I've noticed that there is a problem with the recipient list in transacted routes.
      Recipient list does not wait for processing an exchange by recipients and ignores aggregation strategy when :

      • route is transacted,
      • doTry()...doCatch() is used,
      • processing by the recipient takes longer.

      The bug was discovered in version 3.7.2 but it's also present in the newest versions 3.10.0 and 3.7.4 (LTS).

      Here is a test, which reproduces the problem:

      public class TransactedRecipientListTest extends TransactionClientDataSourceSupport {
      
          @Test
          public void testRecipientList() throws Exception {
              System.out.println("Running on version : " + context.getVersion());
      
              String response = template.requestBody("direct:start", "Hello World", String.class);
      
              assertEquals("Hi !!!", response);
          }
      
          @Override
          protected RouteBuilder createRouteBuilder() throws Exception {
              return new RouteBuilder() {
                  @Override
                  public void configure() throws Exception {
                      // NOTE commenting transacted(), doTry() or delay() make this test green in Camel 3.7.4 and above
                      // however commenting delay() doest not make this test green in Camel 3.7.2
                      from("direct:start")
                              .transacted()
                              .doTry()
                                  .recipientList(constant("direct:a"))
                              .endDoTry();
                      // NOTE doCatch() skipped here to keep test as simple as possible
      
                      from("direct:a")
                              .delay(1000)
                              .transform(constant("Hi !!!"));
                  }
              };
          }
      }
      

      This test is passing with Camel 3.7.1 and below, but it's failing with Camel 3.7.2 and above.
      However it's also passing with Camel 3.9.0 !

      It's also passing on 'main' and '3.7.x' branches after reverting commit b1b5b7d0 : "CAMEL-16550: camel-core - Split and Aggregate with Transacted may cause thread to stuck".

      I've checked a history of MulticastProcessor class and it looks that:

        Attachments

        1. TransactedRecipientListTest.java
          1 kB
          Krzysztof Mackowiak

          Issue Links

            Activity

              People

              • Assignee:
                davsclaus Claus Ibsen
                Reporter:
                kmackowiak Krzysztof Mackowiak
              • Votes:
                0 Vote for this issue
                Watchers:
                2 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: