[ 
https://issues.apache.org/jira/browse/ARTEMIS-4657?focusedWorklogId=907428&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-907428
 ]

ASF GitHub Bot logged work on ARTEMIS-4657:
-------------------------------------------

                Author: ASF GitHub Bot
            Created on: 28/Feb/24 21:27
            Start Date: 28/Feb/24 21:27
    Worklog Time Spent: 10m 
      Work Description: jbertram commented on PR #4833:
URL: 
https://github.com/apache/activemq-artemis/pull/4833#issuecomment-1969949109

   If you executed the `JMSCorrelationIDTest` I added in d38b5a7 without the 
other changes this would be the result:
   
   - Correlation ID as `byte[]`
       - :white_check_mark: AMQP to AMQP
       - :x: AMQP to Core
       - :x: AMQP to OpenWire
       - :white_check_mark: Core to Core
       - :x: Core to AMQP
       - :x: Core to OpenWire
       - :white_check_mark: OpenWire to OpenWire
       - :x: OpenWire to AMQP
       - :x: OpenWire to Core
   - Correlation ID as `String`
       - :white_check_mark: AMQP to AMQP
       - :white_check_mark: AMQP to Core
       - :white_check_mark: AMQP to OpenWire
       - :white_check_mark: Core to Core
       - :white_check_mark: Core to AMQP
       - :white_check_mark: Core to OpenWire
       - :white_check_mark: OpenWire to OpenWire
       - :white_check_mark: OpenWire to AMQP
       - :white_check_mark: OpenWire to Core
   
   So...right now there is full compatibility with `String` among JMS clients 
and no compatibility with `byte[]`.
   
   If you executed the `JMSCorrelationIDTest` I added in d38b5a7 along with the 
other changes this would be the result:
   
   - Correlation ID as `byte[]`
       - :white_check_mark: AMQP to AMQP
       - :white_check_mark: AMQP to Core
       - :white_check_mark: AMQP to OpenWire
       - :white_check_mark: Core to Core
       - :white_check_mark: Core to AMQP
       - :white_check_mark: Core to OpenWire
       - :white_check_mark: OpenWire to OpenWire
       - :white_check_mark: OpenWire to AMQP
       - :white_check_mark: OpenWire to Core
   - Correlation ID as `String`
       - :white_check_mark: AMQP to AMQP
       - :white_check_mark: AMQP to Core
       - :white_check_mark: AMQP to OpenWire
       - :white_check_mark: Core to Core
       - :white_check_mark: Core to AMQP
       - :white_check_mark: Core to OpenWire
       - :white_check_mark: OpenWire to OpenWire
       - :x: OpenWire to AMQP
       - :x: OpenWire to Core
   
   So...the changes in d38b5a7 are sacrificing 2 OpenWire `String` use-cases 
for full compatibility with `byte[]`. Whether or not this is OK is the subject 
of this PR.
   
   If I hard-code the broker to deal with the OpenWire correlation ID as a 
**`String`** these are the results:
   
   - Correlation ID as `byte[]`
       - :white_check_mark: AMQP to AMQP
       - :white_check_mark: AMQP to Core
       - :x: AMQP to OpenWire
       - :white_check_mark: Core to Core
       - :white_check_mark: Core to AMQP
       - :x: Core to OpenWire
       - :white_check_mark: OpenWire to OpenWire
       - :x: OpenWire to AMQP
       - :x: OpenWire to Core
   - Correlation ID as `String`
       - :white_check_mark: AMQP to AMQP
       - :white_check_mark: AMQP to Core
       - :white_check_mark: AMQP to OpenWire
       - :white_check_mark: Core to Core
       - :white_check_mark: Core to AMQP
       - :white_check_mark: Core to OpenWire
       - :white_check_mark: OpenWire to OpenWire
       - :white_check_mark: OpenWire to AMQP
       - :white_check_mark: OpenWire to Core
   
   In short, full compatibility with `String` and no compatibility with 
OpenWire with `byte[]`.
   
   Perhaps our hands are tied here and we just can't support OpenWire 
correlation ID as `byte[]` since it will break existing use-cases. I'm running 
the full test-suite now, and if there are existing test-cases that break then 
that will help convince me. However, at this point it seems to me like using 
`byte[]` to gain compatibility between JMS and a "native" format (e.g. core) is 
actually the right thing to do so supporting `byte[]` across all protocols at 
the sacrifice of `String` is appropriate especially since this will open the 
door to compatibility with MQTT 5 (although I grant that's likely an edge case).
   
   I'm, of course, open to being convinced otherwise. I'd love your thoughts.




Issue Time Tracking
-------------------

    Worklog Id:     (was: 907428)
    Time Spent: 50m  (was: 40m)

> Support correlation ID compatibility between JMS clients
> --------------------------------------------------------
>
>                 Key: ARTEMIS-4657
>                 URL: https://issues.apache.org/jira/browse/ARTEMIS-4657
>             Project: ActiveMQ Artemis
>          Issue Type: Improvement
>            Reporter: Justin Bertram
>            Assignee: Justin Bertram
>            Priority: Major
>          Time Spent: 50m
>  Remaining Estimate: 0h
>
> Currently there are some use-cases with both {{String}} and {{byte[]}} values 
> of JMS correlation ID that don't work between Core, OpenWire, and AMQP. We 
> should support as many as possible.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to