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

Claus Ibsen commented on CAMEL-26330:
-------------------------------------

Where chaos can hook in, level by level, with what Camel already has:

||Level||Seam||
|Sends to any endpoint (stop, delay, change)|A hook in one helper that the six 
send places of camel-core would share: CAMEL-26331. The component stays the 
real one (a {{KafkaComponent}} stays a {{KafkaComponent}}), and the routes get 
no extra processors.|
|Input: header values, charset, a stream that ends too soon|A {{RoutePolicy}}, 
added to every route by a {{RoutePolicyFactory}}. Its {{onExchangeBegin}} sees 
every exchange that enters a route and can change the message.|
|Consumer polls|The poll strategy of a {{ScheduledPollConsumer}}, which can be 
changed at runtime with {{setPollStrategy}}.|
|Every step|The channel ({{CamelInternalProcessor}}), next to the check that 
{{camel cmd disable-processor}} uses. This is a small change in camel-core.|
|Stall, stop or remove a route|{{RouteController}}|
|Counting for the report|The event notifier, as in the prototype.|

So chaos needs two small changes in camel-core: the send hook (CAMEL-26331) and 
the step hook. The other levels use SPIs that exist today. The design document 
can start from this table.

_Claude Code on behalf of davsclaus_

> camel-chaos - turn on faults in a running Camel application, live, and report 
> how the routes cope
> -------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-26330
>                 URL: https://issues.apache.org/jira/browse/CAMEL-26330
>             Project: Camel
>          Issue Type: New Feature
>          Components: camel-jbang, camel-main
>            Reporter: Claus Ibsen
>            Assignee: shashank
>            Priority: Major
>             Fix For: 4.24.0
>
>
> A chaos feature for Camel developers and AI tools: run a Camel application in 
> dev mode, turn on faults while it runs, and see how the routes cope, in real 
> time. A report then says, per route, how many messages completed, failed, 
> went to the error handler, were redelivered or were lost, with PASS or FAIL.
> It starts from Shashank's proposal and prototype: 
> [PROPOSAL.md|https://github.com/allthingssecurity/camel/blob/camel-chaos-prototype/components/camel-chaos/PROPOSAL.md]
>  on the camel-chaos-prototype branch. The prototype reproduces two real bugs 
> on the code from before their fixes (CAMEL-25684, CAMEL-25682).
> *Switched on by the classpath*
> * With camel-chaos on the classpath, its hooks are installed and stay idle 
> until a rule is added. Rules are added, changed and removed live, as in dev 
> mode ({{camel run --dev}}).
> * Without camel-chaos on the classpath, as in production, nothing of it is 
> there.
> * With profile {{prod}} it stays off, as an extra guard.
> * Options {{camel.chaos.*}} through camel-main, as for {{camel.debug.*}} and 
> {{camel.trace.*}}: for example the seed, and rules to install at startup.
> *Hooks at all levels*
> The prototype wraps only {{to}}. Chaos needs hooks at every level:
> * Every send to any endpoint: {{to}}, {{toD}}, wireTap, enrich, 
> recipientList, multicast and a ProducerTemplate. Chaos must be able to stop a 
> send, delay it or change its message. The best place is probably the 
> component, as {{camel run --stub}} does it: the component resolver of camel 
> run can wrap a component instead of replacing it with a stub. Then every 
> producer and consumer of the component goes through chaos, and the processors 
> of the routes stay as they are. The event notifier ({{ExchangeSendingEvent}}) 
> fires for every send but cannot stop it, because the exception of a notifier 
> is logged and ignored. The interceptSendToEndpoint wrapper can stop a send, 
> but it adds processors to the routes.
> * Every processing step: for example small random delays at each step.
> * The message: header values with random data, the body in an unusual charset 
> (characters outside US-ASCII), an input stream that ends too soon.
> * Consumer polls: the poll strategy of a {{ScheduledPollConsumer}} can be 
> changed at runtime, and its begin, commit and rollback run around every poll.
> * The route lifecycle: stall a route (suspend, then resume), and remove a 
> route and add it again (the shape of CAMEL-26286 to CAMEL-26305).
> A failure must be able to have a real type, for example an HTTP status code 
> with its headers, so that the {{onException}} of the route is tested. Rules 
> end by themselves, after N calls or a duration. A seed makes a run repeatable.
> *The report*
> Per route: completed, failed, handled by the error handler, redelivered, 
> lost, and a verdict. Expectations ("this route completes N more messages") 
> find messages that were lost before they became an exchange. The verdict must 
> not call a message lost when its consumer redelivers it (for example the file 
> consumer, or transacted JMS), because an AI tool acts on what the report says.
> *Control*
> * A {{chaos}} dev console, which the CLI connector uses: {{camel cmd chaos}}, 
> and any other client.
> * AI tools: dedicated tools in the camel-jbang-mcp server (add a fault, 
> report, clear), in a runtime tool group that is offered only when the 
> application has camel-chaos.
> *Time*
> The clock and the sleeps go through {{TimeSource}} (camel-util). It is the 
> system clock, so a person sees the faults in real time. camel-test-dst can 
> run the same rules in virtual time, but chaos does not need DST. The Javadoc 
> of {{TimeSource}} says it is internal, so the design document should say that 
> camel-chaos may use it.
> *How to start*
> A pull request with a short design document in {{design/}}, like 
> {{design/payload-mode.adoc}} (CAMEL-25334, 
> [#28457|https://github.com/apache/camel/pull/28457]). The code follows in its 
> own pull requests. The video, the models (TLA+, Lean, Z3) and the demo 
> scripts of the prototype are not needed in the Camel repository.
> _Filed by Claude Code on behalf of davsclaus_



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

Reply via email to