[ 
https://issues.apache.org/jira/browse/CAMEL-26179?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18132341#comment-18132341
 ] 

Serdar Gökay commented on CAMEL-26179:
--------------------------------------

PR https://github.com/apache/camel/pull/28514 covers items 1 and 2: item 1 is 
already fixed on main by CAMEL-25912 (a failed producer request no longer 
rebuilds the connection), so it adds a regression test; item 2 fails a null 
write body with an InvalidPayloadException before writing. Item 3 (milo-server) 
is not in this PR and stays open here for you.

_Claude Code on behalf of etzel-mes_

> camel-milo - one milo-client write of a body that cannot be encoded drops the 
> shared connection, so every subscriber gets Bad_NoCommunication
> ---------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-26179
>                 URL: https://issues.apache.org/jira/browse/CAMEL-26179
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-milo
>            Reporter: Claus Ibsen
>            Assignee: Serdar Gökay
>            Priority: Major
>             Fix For: 4.24.0
>
>
> Found while adding the catalog body types of milo-browse, milo-client and 
> milo-server (CAMEL-24961, PR #28411).
> h4. 1. A write with a body that cannot be encoded drops the shared connection
> {{MiloClientProducer.process}} (main 2a465aa4814c, line 86) writes the body 
> as is. For a body that is not an OPC UA built-in value (a stream, a file, a 
> Map, a bean) the write future completes exceptionally with an encoding error, 
> and {{SubscriptionManager.write}} (line 1734) treats that like a lost link: 
> {{handleConnectionFailure}} disposes the connection that all endpoints of the 
> same server share and reconnects. Every subscriber on it gets a 
> {{Bad_NoCommunication}} DataValue before it resubscribes: 4 bad writes gave 4 
> {{Bad_NoCommunication}} messages on an unrelated node. Checked on 
> 4.24.0-SNAPSHOT with an embedded Milo OPC UA server.
> Proposed: call {{handleConnectionFailure}} only for errors of the connection 
> (session or channel status codes), and fail only the exchange for an encoding 
> error, or check the value before writing.
> h4. 2. A write of a null body with await answers a bad StatusCode body and no 
> exception
> With {{CamelMiloAwait=true}} or {{defaultAwaitWrites=true}}, a null body is 
> sent to the server and the exchange completes with the {{Bad_TypeMismatch}} 
> StatusCode as its body ({{MiloClientProducer.process}}, line 98), without an 
> exception. Checked on 4.24.0-SNAPSHOT with an embedded Milo OPC UA server. 
> (CAMEL-25694 keeps a per-node bad StatusCode of a real write as the result; 
> this is only about a null body.)
> Proposed: fail the exchange with an {{InvalidPayloadException}} for a null 
> body before writing.
> h4. 3. milo-server stores a body that is not a built-in type without error
> {{MiloServerProducer.process}} (main 2a465aa4814c, line 52) hands any body to 
> {{CamelServerItem.update}} (line 160), which wraps it in a {{Variant}}. For a 
> body that is not an OPC UA built-in type the producer succeeds, but 
> subscribed clients get no data change and a client read fails with an 
> encoding error. Checked on 4.24.0-SNAPSHOT with an embedded Milo OPC UA 
> server.
> Proposed: check that the value can be encoded (a built-in type, a Variant or 
> a DataValue) and fail the exchange otherwise.
> _Claude Code on behalf of davsclaus_



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to