Skip to content

IGNITE-29049 [ducktests] Fix the JMX metric registry MBean lookup - #13575

Open
maksaska wants to merge 2 commits into
apache:masterfrom
maksaska:ducktests-jmx-helpers
Open

maksaska wants to merge 2 commits into
apache:masterfrom
maksaska:ducktests-jmx-helpers

Conversation

@maksaska

Copy link
Copy Markdown
Contributor

The MBean name of a metric registry was spelled out at every call site, and every one of them read an attribute as next(mbean.Attr).strip(). Both are now in one place:

  • metric_registry_pattern(group, name) builds the name pattern, honouring the two rules the JMX exporter follows - the registry name is split at its FIRST dot, and the tail is quoted only when it is not purely alphanumeric. The pattern the rebalance metrics used, '.*group=cacheGroups.*name="%s"', required the quotes unconditionally and so could not find the registry of an alphanumeric cache group name at all.
  • The pattern ends at the end of the line. 'name' sorts last of an MBean name's properties, so without the anchor a registry whose name is a prefix of another one ("myCache" against "myCacheV2") matched the wrong bean.
  • JmxMBean.value()/bool_value() read a single valued attribute.
  • cache_mbean()/cache_group_mbean() expose the two registries a test asks for.

Also documents why IgniteAwareService.await_rebalance() builds a JmxClient of its own instead of the node's memoized one: the memoized client holds the pid of the incarnation it was built for, and await_rebalance() runs right after a restart.

check_jmx_utils.py covers the pattern, including both cases that used to be wrong.

Thank you for submitting the pull request to the Apache Ignite.

In order to streamline the review of the contribution
we ask you to ensure the following steps have been taken:

The Contribution Checklist

  • There is a single JIRA ticket related to the pull request.
  • The web-link to the pull request is attached to the JIRA ticket.
  • The JIRA ticket has the Patch Available state.
  • The pull request body describes changes that have been made.
    The description explains WHAT and WHY was made instead of HOW.
  • The pull request title is treated as the final commit message.
    The following pattern must be used: IGNITE-XXXX Change summary where XXXX - number of JIRA issue.
  • A reviewer has been mentioned through the JIRA comments
    (see the Maintainers list)
  • The pull request has been checked by the Teamcity Bot and
    the green visa attached to the JIRA ticket (see tab PR Check at TC.Bot - Instance 1 or TC.Bot - Instance 2)

Notes

If you need any help, please email dev@ignite.apache.org or ask anу advice on http://asf.slack.com #ignite channel.

…istry lookup

Metric registry MBeans were looked up with ad-hoc patterns at every call site,
and the node's JMX client was memoized for the whole life of the node object.

  * metric_registry_pattern(registry) builds the exact MBean name pattern of a
    registry: split at the first dot like JmxMetricExporterSpi, values spelled
    like IgniteUtils.escapeObjectNameValue(), escaped for grep -E, anchored at
    the end of the line ('name' sorts last). A registry without a group is
    filtered from the system view of the same name. The old
    'group=cacheGroups.*name="%s"' pattern could not find an alphanumeric
    (unquoted) name at all. Names with a quote, a backslash or '?' are
    rejected, as the jmxterm command quoting cannot carry them.
  * The node's JmxClient is rebuilt on every start_node(). Before, a restarted
    node kept the pid and the clsLdr-bearing MBean names of its previous JVM,
    so callers had to build a client of their own. JmxClient takes an explicit
    pid for the CDC JVM.
  * node.metric_registry_mbean() and JmxMBean.value()/bool_value() replace the
    hand-built patterns and next(mbean.X) reads in rebalance, dump, snapshot
    and CDC.

check_jmx_utils.py runs every pattern case through Python re and grep -E.
@maksaska
maksaska force-pushed the ducktests-jmx-helpers branch from 076b564 to 8d3a35f Compare September 17, 2026 11:44
An unescaped '[' right after the class opener made Python emit
'FutureWarning: Possible nested set' on every JMX metric lookup.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant