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

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 3.7.4, 3.7.2, 3.7.3, 3.8.0, 3.10.0
    • 3.11.0
    • camel-core
    • None
    • 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

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

              Dates

                Created:
                Updated:
                Resolved: