Fix bug that WebSocket proxy returns empty metrics #1567
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Motivation
WebSocket proxy provides an endpoint for obtaining metrics.
However, I realized that the endpoint almost always returns empty JSON
[]
.There are two causes for this.
First, there is a possibility that NullPointerException occurs in this line:
https://github.com/apache/incubator-pulsar/blob/5fc4d536d76b1d73c6be7b9238bf14b210ee095f/pulsar-websocket/src/main/java/org/apache/pulsar/websocket/stats/ProxyStats.java#L119
publishMsgLatency
is not initialized unless at least one producer is connected.https://github.com/apache/incubator-pulsar/blob/5fc4d536d76b1d73c6be7b9238bf14b210ee095f/pulsar-websocket/src/main/java/org/apache/pulsar/websocket/stats/ProxyStats.java#L72-L74
Seccond,
tempMetricsCollection
is not an local variable but an instance variable:https://github.com/apache/incubator-pulsar/blob/5fc4d536d76b1d73c6be7b9238bf14b210ee095f/pulsar-websocket/src/main/java/org/apache/pulsar/websocket/stats/ProxyStats.java#L44
As a result, the three variables
tempMetricsCollection
,tempRef
andmetricsCollection
always refer to the same instance, andmetricsCollection
is cleared each time after the second and subsequent executions ofgenerate()
.https://github.com/apache/incubator-pulsar/blob/5fc4d536d76b1d73c6be7b9238bf14b210ee095f/pulsar-websocket/src/main/java/org/apache/pulsar/websocket/stats/ProxyStats.java#L97-L99
Modifications
publishMsgLatency
in the constructor ofProxyNamespaceStats
tempMetricsCollection
as local variableResult
WebSocket proxy no longer returns empty metrics.