geode-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Dale Emery <>
Subject [PROPOSAL] Instrumenting Geode Code
Date Fri, 07 Jun 2019 23:57:37 GMT
Proposal for instrumenting Geode


- Allow routing measurements to statistics, Micrometer meters, or both as appropriate, to
allow publishing each measurement to the appropriate places.

- Minimize the intrusiveness of new and existing metrics instrumentation.

- Minimize the amount of code that must know how to route measurements to stats and meters.

- Maintain Geode performance.

- Not preclude any options for deprecating and removing Geode’s statistics mechanism in
the future. And take steps to make deprecating and removing the existing statistics mechanism


- Continue to use Geode’s existing style of instrumentation class (e.g. CachePerfStats)
to instrument code.

- Enhance the instrumentation classes to create and register meters when appropriate, and
to route each measurement to the appropriate stats and meters.

- When we want to route a given measurement to both a statistic and a meter, use the "legacy
meter" wrapper mechanism (described below).

- Incrementally improve the instrumentation classes to focus more on reporting domain events
(e.g. regionAdded()) and less on reporting measurements (e.g. incRegions()).

Legacy Meter Wrappers

To route a given measurement to both a Micrometer meter and a Geode statistic, do the following
in the instrumentation class's constructor:

- Create and register a normal Micrometer meter in the cache's meter registry.

- Wrap the registered meter in a custom "legacy meter" that reads and writes the stat, and
also writes to the registered meter.

In the instrumentation methods (e.g. endPut()):

- Use the legacy meter to report measurements.

I've attached two diagrams below to show how the wrapper mechanism works for "counter" style
stats and meters. The first is a class diagram, showing how the parts relate in general. The
second is a sequence diagram that shows in some detail how the parts interact to route a given
measurement to both a meter and a stat.

If you want even more details, Jake Barrett has created a nice "proof of concept" implementation:

Please let us know if you have questions, comments, or concerns.


Dale Emery

View raw message