Skip to content

CAMEL-26699: camel-chaos - the known rules say what they uncover, when not to use them and what to watch - #29359

Merged
davsclaus merged 1 commit into
mainfrom
CAMEL-26699-chaos-recipe-guide
Nov 6, 2026
Merged

davsclaus merged 1 commit into
mainfrom
CAMEL-26699-chaos-recipe-guide

Conversation

@davsclaus

Copy link
Copy Markdown
Contributor

CAMEL-26699, part 2. When you add a chaos rule from the known rules, the add form had a one-line description and a lot of empty room. Each recipe of the chaos model now guides the one who picks it, a person or an AI:

  • description: what it does, now fuller. For example, "Is slow" adds that the exchange then goes on as usual: the cost is time, not errors.
  • uncovers: what it can uncover, such as "Redeliveries without a delay, which hit an overloaded service again at once".
  • avoid: when not to use it, such as "To test the timeout of the client: the wait is before the call, so the client's timeout does not fire. Use Times out".
  • watch: what to look at while it runs, such as "The mean, p95 and p99 time of the routes, and their throughput".

camel-chaos

  • ChaosModel.guides() has the three lists for each of the 17 recipes, and the recipes have the fuller descriptions.
  • The build writes them into chaos-model.json (uncovers, avoid, watch), and the catalog copy is updated.
  • ChaosModelTest checks that every recipe has all three.
  • The model section of chaos.adoc describes them, with a fuller example; the catalog doc copy is updated.

Terminal UI

  • The add form shows "What it can uncover", "When not to use it" and "What to watch" as bullets, both under the rule of the recipe in focus and under the fields while it is filled in.
  • With a catalog from before this, the lists are empty and nothing is shown.
  • The help page of the chaos screen mentions it.

How "Is slow" now looks in the form (rendered with the generated model; 170 columns):

│ > Is slow                                   │ Is slow                                                                                              │
│   Times out                                 │ Each send waits a time within the range before it is made, as a slow service. The exchange then      │
│   Did the work, then failed                 │ goes on as usual: the cost is time, not errors                                                       │
│   Is down for a while                       │                                                                                                      │
│ Messages                                    │ endpoint=${endpoint} delay duration=${duration} rate=${rate} until=${until}                          │
│   Arrives corrupt                           │                                                                                                      │
│   Is sent with an empty body                │ What it can uncover                                                                                  │
│   Is sent without a header                  │ • A consumer that falls behind: the throughput of the route drops and messages wait in front of it   │
│ Consumers and routes                        │ • Thread pools that fill up with waiting exchanges                                                   │
│   Polls fail                                │ • Callers of the route (request/reply) that time out                                                 │
│   Polls are skipped                         │                                                                                                      │
│   The route stalls                          │ When not to use it                                                                                   │
│   The route flaps                           │ • To test the timeout of the client: the wait is before the call, so the client's timeout does not   │
│   The route is removed                      │ fire. Use Times out                                                                                  │
│ Error handling                              │ • On a route started by a timer: the timer waits for the exchange, so there are fewer messages, not  │
│   The dead letter channel is unreachable    │ more load                                                                                            │
│   A step fails                              │                                                                                                      │
│   A step is slow                            │ What to watch                                                                                        │
│   Write the rule yourself …                 │ • The mean, p95 and p99 time of the routes, and their throughput                                     │
│                                             │ • The exchanges in flight                                                                            │

Tests: all 651 camel-chaos tests pass, and all 2328 TUI module tests pass (1 skipped). Not checked live: a running TUI loads camel-catalog from the local Maven repository, which doesn't have the new model yet.

This is independent of #29358, the first part of CAMEL-26699; both touch ChaosRecipes, in different places.

Claude Code on behalf of Claus Ibsen

🤖 Generated with Claude Code

https://claude.ai/code/session_012nJsFsjqqFiwroeHRWaKbS

…n not to use them and what to watch

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Claus Ibsen <claus.ibsen@gmail.com>
@github-actions

github-actions Bot commented Nov 6, 2026

Copy link
Copy Markdown
Contributor

🌟 Thank you for your contribution to the Apache Camel project! 🌟
🤖 CI automation will test this PR automatically.

🐫 Apache Camel Committers, please review the following items:

  • First-time contributors require MANUAL approval for the GitHub Actions to run
  • You can use the command /component-test (camel-)component-name1 (camel-)component-name2.. to request a test from the test bot although they are normally detected and executed by CI.
  • You can label PRs using skip-tests and test-dependents to fine-tune the checks executed by this PR.
  • Build and test logs are available in the summary page. Only Apache Camel committers have access to the summary.

⚠️ Be careful when sharing logs. Review their contents before sharing them publicly.

@github-actions

github-actions Bot commented Nov 6, 2026

Copy link
Copy Markdown
Contributor

🧪 CI tested the following changed modules:

  • catalog/camel-catalog
  • components/camel-chaos
  • dsl/camel-jbang/camel-jbang-plugin-tui

🔬 Scalpel shadow comparison — Scalpel: 11 of 717 tested, 26 compile-only — current: 11 all tested

Maveniverse Scalpel detected 11 affected modules (current approach: 11).

Skip-tests mode would test 11 modules (3 direct + 9 downstream), skip tests for 26 (generated code, meta-modules)

Modules Scalpel would test (11)
  • camel-chaos ← components/camel-chaos/src/generated/resources/META-INF/org/apache/camel/chaos/chaos-model.json, components/camel-chaos/src/main/docs/chaos.adoc, components/camel-chaos/src/main/java/org/apache/camel/component/chaos/ChaosModel.java, components/camel-chaos/src/test/java/org/apache/camel/component/chaos/ChaosModelTest.java
  • camel-cli-connector ← downstream of org.apache.camel:camel-chaos
  • camel-cli-debug ← downstream of org.apache.camel:camel-cli-connector
  • camel-jbang-mcp ← downstream of org.apache.camel:camel-catalog
  • camel-jbang-plugin-mcp ← downstream of org.apache.camel:camel-jbang-core
  • camel-jbang-plugin-tui ← dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ChaosRecipeForm.java, dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ChaosRecipes.java, dsl/camel-jbang/camel-jbang-plugin-tui/src/main/resources/tui/help/chaos.md, dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/ChaosRecipeFormTest.java, dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/ChaosRecipesTest.java
  • camel-jbang-plugin-validate ← downstream of org.apache.camel:camel-yaml-dsl-validator
  • camel-jbang-run ← downstream of org.apache.camel:camel-catalog
  • camel-launcher-container ← downstream of org.apache.camel:camel-launcher
  • camel-yaml-dsl-validator ← downstream of org.apache.camel:camel-catalog
  • camel-yaml-dsl-validator-maven-plugin ← downstream of org.apache.camel:camel-yaml-dsl-validator
Modules with tests skipped (26)
  • apache-camel
  • camel-allcomponents
  • camel-catalog-console
  • camel-catalog-maven
  • camel-catalog-suggest
  • camel-componentdsl
  • camel-endpointdsl
  • camel-endpointdsl-support
  • camel-itest
  • camel-jbang-core
  • camel-jbang-it
  • camel-jbang-main
  • camel-jbang-plugin-edit
  • camel-jbang-plugin-generate
  • camel-jbang-plugin-kubernetes
  • camel-jbang-plugin-test
  • camel-kamelet-main
  • camel-launcher
  • camel-report-maven-plugin
  • camel-route-parser
  • camel-yaml-dsl
  • camel-yaml-dsl-deserializers
  • camel-yaml-dsl-maven-plugin
  • coverage
  • docs
  • dummy-component

ℹ️ Shadow mode — Scalpel observes but does not affect test execution. Learn more

All tested modules (38 modules, 6m 1s total)

Total reactor time: 6m 1s

Module Duration Status
Camel :: JBang :: MCP 55.5s SUCCESS
Camel :: Component DSL 43.9s SUCCESS
Camel :: YAML DSL :: Validator 33.6s SUCCESS
Camel :: Docs 32.1s SUCCESS
Camel :: JBang :: Plugin :: Validate 26.4s SUCCESS
Camel :: Catalog :: Camel Catalog 25.8s SUCCESS
Camel :: JBang :: Run 21.6s SUCCESS
Camel :: YAML DSL 20.0s SUCCESS
Camel :: JBang :: Plugin :: Kubernetes 18.1s SUCCESS
Camel :: JBang :: Plugin :: Testing 13.7s SUCCESS
Camel :: Kamelet Main 10.3s SUCCESS
Camel :: Catalog :: Camel Report Maven Plugin 7.9s SUCCESS
Camel :: All Components Sync point 6.4s SUCCESS
Camel :: Catalog :: Suggest (deprecated) 5.9s SUCCESS
Camel :: YAML DSL :: Deserializers 5.9s SUCCESS
Camel :: JBang :: Plugin :: Generate 5.7s SUCCESS
Camel :: Catalog :: Camel Route Parser 5.0s SUCCESS
Camel :: YAML DSL :: Validator Maven Plugin 3.8s SUCCESS
Camel :: Endpoint DSL :: Support 2.5s SUCCESS
Camel :: JBang :: Plugin :: MCP 2.3s SUCCESS
Camel :: YAML DSL :: Maven Plugins 2.0s SUCCESS
Camel :: Catalog :: Maven 2.0s SUCCESS
Camel :: Assembly 1.8s SUCCESS
Camel :: Coverage 1.7s SUCCESS
Camel :: Catalog :: Dummy Component 1.7s SUCCESS
Camel :: DSL :: CLI Debug 1.6s SUCCESS
Camel :: JBang :: Integration tests 1.2s SUCCESS
Camel :: JBang :: Plugin :: Edit 1.0s SUCCESS
Camel :: JBang :: Main 0.8s SUCCESS
Camel :: Launcher :: Container 0.5s SUCCESS
Camel :: Catalog :: Console 0.4s SUCCESS
Camel :: Chaos n/a
Camel :: DSL :: CLI Connector n/a
Camel :: Endpoint DSL n/a
Camel :: Integration Tests n/a
Camel :: JBang :: Core n/a
Camel :: JBang :: Plugin :: TUI n/a
Camel :: Launcher n/a

Top 20 slowest modules:

  • Camel :: JBang :: MCP (55.5s)
  • Camel :: Component DSL (43.9s)
  • Camel :: YAML DSL :: Validator (33.6s)
  • Camel :: Docs (32.1s)
  • Camel :: JBang :: Plugin :: Validate (26.4s)
  • Camel :: Catalog :: Camel Catalog (25.8s)
  • Camel :: JBang :: Run (21.6s)
  • Camel :: YAML DSL (20.0s)
  • Camel :: JBang :: Plugin :: Kubernetes (18.1s)
  • Camel :: JBang :: Plugin :: Testing (13.7s)
  • Camel :: Kamelet Main (10.3s)
  • Camel :: Catalog :: Camel Report Maven Plugin (7.9s)
  • Camel :: All Components Sync point (6.4s)
  • Camel :: Catalog :: Suggest (deprecated) (5.9s)
  • Camel :: YAML DSL :: Deserializers (5.9s)
  • Camel :: JBang :: Plugin :: Generate (5.7s)
  • Camel :: Catalog :: Camel Route Parser (5.0s)
  • Camel :: YAML DSL :: Validator Maven Plugin (3.8s)
  • Camel :: Endpoint DSL :: Support (2.5s)
  • Camel :: JBang :: Plugin :: MCP (2.3s)

⚙️ View full build and test results

@davsclaus davsclaus added this to the 4.24.0 milestone Nov 6, 2026
@davsclaus davsclaus added the enhancement New feature or request label Nov 6, 2026
@davsclaus davsclaus self-assigned this Nov 6, 2026
@davsclaus
davsclaus merged commit 85d10ff into main Nov 6, 2026
7 checks passed
@davsclaus
davsclaus deleted the CAMEL-26699-chaos-recipe-guide branch November 6, 2026 21:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant