Duong created RATIS-2063:
----------------------------
Summary: Unclosed SegmentedRaftLogMetrics causes memory leaks.
Key: RATIS-2063
URL: https://issues.apache.org/jira/browse/RATIS-2063
Project: Ratis
Issue Type: Improvement
Reporter: Duong
[SegmentedRaftLogMetrics|https://github.com/duongkame/ratis/blob/master/ratis-server/src/main/java/org/apache/ratis/server/raftlog/segmented/SegmentedRaftLog.java#L212-L212]
is not unregistered when RaftServer is closed. This causes the leak of many
objects that SegmentedRaftLogMetrics refers to indirectly via a metric
register, for example, SegmentedRaftLog:
{code:java}
SegmentedRaftLogWorker(RaftGroupMemberId memberId, StateMachine stateMachine,
Runnable submitUpdateCommitEvent,
RaftServer.Division server, RaftStorage storage,
RaftProperties properties,
SegmentedRaftLogMetrics metricRegistry) {
metricRegistry.addDataQueueSizeGauge(queue::getNumElements);
metricRegistry.addLogWorkerQueueSizeGauge(writeTasks.q::size);
metricRegistry.addFlushBatchSizeGauge(() -> flushBatchSize);
}
{code}
In the above code, MetricRegistry will keep references to the lamda objects
which in turn refer to the SegmentedRaftLogWorker object itself.
The metricRegistry in SegmentedRaftLogMetrics must be unregistered when
RaftServer is close to allowing GC to collect all discarded objects.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)