2026.09.37 — 2026-09-24
Added
Review each cluster's HA and clustering setup for known mistakes (7a6644d0)
New screen: Configuration -> Setup review. Studio checks every cluster's high-availability, clustering, durability and message-safety configuration against 22 known mistakes. Each finding states what is wrong, what it costs, what each node reported, and the broker.xml that fixes it. Among them:
- a single replication pair on quorum voting (critical). With one primary Artemis skips the vote, so the backup promotes itself on any partition and both halves serve clients. The finding offers a ZooKeeper lock manager, or three or more pairs, with a network pinger as the mitigation;
- load balancing that relies on redistribution while redistribution-delay keeps its default of -1, which strands messages on a node whose consumers leave;
- a connector advertising localhost, a cluster connection that does not see every live node, or one that is stopped;
- persistence off, unbounded disk usage, no dead-letter address, unlimited redelivery, DROP when an address is full, security off, acceptors without TLS.
The review is read-only: one batched Jolokia read per node, every 15 minutes (setupreview.interval) and on demand. A node that does not answer is named, and its earlier findings are kept as "not re-checked", never resolved. The review also names what the management API cannot show, such as network-check-list, rather than assuming it.
A finding can be accepted as a known risk, with a reason and an optional expiry. The acceptance is audited, needs alert:write, and keeps the finding visible. A new alert condition, "Setup risk" (a rule-form template), fires per open critical or warning finding, and resolves when it is fixed or accepted. The MCP tool setup_review returns the latest review.
Email, Microsoft Teams and PagerDuty notification channels (ed195833)
Alert rules can now deliver to three more kinds of channel, beside Slack and signed webhooks:
- Email over SMTP: STARTTLS (required, never opportunistic), implicit TLS or plain; optional authentication; any number of recipients; HTML with a plain-text alternative.
- Microsoft Teams, through a Workflows webhook (legacy connector webhooks also work), as an Adaptive Card.
- PagerDuty Events API v2, US or EU region or any compatible receiver. Each firing subject opens one incident, and its resolution closes it; a retried delivery never opens a second one.
Every notification now names the cluster, the subject in readable form (a node's name, not its id), the value and the time. Set ARTEMIS_STUDIO_PUBLIC_URL to add a link back to the cluster's alerts. The signed-webhook payload gains these as version 2 fields; every field it had before is unchanged.
Settings -> Notification channels is rebuilt:
- channels are added and edited in a per-kind editor, and can be disabled;
- a configuration can be tested before it is saved, and the test states the receiver's answer and whether retrying could help;
- each channel shows its last delivery, its last error and the last 24 hours' counts, and a delivery log;
- a failed delivery can be retried once the channel is fixed;
- deleting a channel states how many rules route to it and needs its name.
API changes for integrators: POST /api/v1/channels/{id}/test now answers 200 with {delivered, permanent, error, durationMs}. A refused test is no longer a 502. POST /api/v1/channels/test, GET /api/v1/channels/{id}/deliveries and POST /api/v1/channels/{id}/deliveries/{seq}/retry are new. A channel's kind can no longer be changed on update. A new signed-webhook secret must be base64 of at least 16 bytes, as signing always required.
Fixed
Let a configuration-drift alert rule be saved (db69be58)
Creating a rule on the "Configuration drift" condition, or from the rule form's configuration-drift template, failed with "This conflicts with something that already exists" (409). The API offered the condition, but the database check on alert_rule.state_condition still listed only the five conditions Studio first shipped with, so the row was refused. The check now admits CONFIG_DRIFT; no existing rule changes.
Accept parentheses around a column or a value in the SQL console (01353b6b)
WHERE (priority) > (4)was rejected with "Not a column the dialect knows". The parser unwrapped JSqlParser'sParenthesis, which JSqlParser 5 never produces any more (it is deprecated for removal); a parenthesised term or literal now unwraps from the one-element list JSqlParser actually returns.