Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
2.15.2
-
None
-
Unknown
Description
Some statistics seem to be wrong for subroutes.
MetricsStatistics.onExchangeDone method is called several times for a same exchange: first by the subroute and then by its parent route.
The problem is that context.stop() is called several times so counters is greater than 1 for the subroute instead of one.
A solution could be to reset the context into the exchange as soon as the stop method has been called:
MetricsRoutePolicy.java
private static final class MetricsStatistics { private final Timer responses; private MetricsStatistics(Timer responses) { this.responses = responses; } public void onExchangeBegin(Exchange exchange) { Timer.Context context = responses.time(); exchange.setProperty("MetricsRoutePolicy", context); } public void onExchangeDone(Exchange exchange) { Timer.Context context = exchange.getProperty("MetricsRoutePolicy", Timer.Context.class); if (context != null) { context.stop(); // BUGFIX: reset to null so that context.stop() cannot be called // more than once. exchange.setProperty("MetricsRoutePolicy", null); } } }