You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ratis.apache.org by "Shilun Fan (Jira)" <ji...@apache.org> on 2026/02/19 00:11:00 UTC
[jira] [Updated] (RATIS-2414) Add leak detection for ZeroCopyMessageMarshaller
[ https://issues.apache.org/jira/browse/RATIS-2414?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Shilun Fan updated RATIS-2414:
------------------------------
Description:
*Problem*
The current ZeroCopyMessageMarshaller lacks safeguards to detect and handle resource leaks. When InputStream instances are not properly released (via `release()` method), it can lead to native memory leaks in production, especially in high-throughput scenarios where gRPC zero-copy optimization is used with Netty ByteBuf.
*Solution*
Add leak detection and cleanup capabilities to ZeroCopyMessageMarshaller:
- Add `getUnclosedCount()`: Returns the number of unclosed streams for monitoring
- Add `checkLeaks(String context)`: Throws IllegalStateException if unclosed streams exist, used for test assertions
- Add `close()`: Cleanup method that closes all unclosed streams with logging, providing last-resort protection
was:
## Problem
The current ZeroCopyMessageMarshaller lacks safeguards to detect and handle resource leaks. When InputStream instances are not properly released (via `release()` method), it can lead to native memory leaks in production, especially in high-throughput scenarios where gRPC zero-copy optimization is used with Netty ByteBuf.
## Solution
Add leak detection and cleanup capabilities to ZeroCopyMessageMarshaller:
- Add `getUnclosedCount()`: Returns the number of unclosed streams for monitoring
- Add `checkLeaks(String context)`: Throws IllegalStateException if unclosed streams exist, used for test assertions
- Add `close()`: Cleanup method that closes all unclosed streams with logging, providing last-resort protection
> Add leak detection for ZeroCopyMessageMarshaller
> ------------------------------------------------
>
> Key: RATIS-2414
> URL: https://issues.apache.org/jira/browse/RATIS-2414
> Project: Ratis
> Issue Type: Improvement
> Components: gRPC
> Reporter: Shilun Fan
> Assignee: Shilun Fan
> Priority: Major
>
> *Problem*
> The current ZeroCopyMessageMarshaller lacks safeguards to detect and handle resource leaks. When InputStream instances are not properly released (via `release()` method), it can lead to native memory leaks in production, especially in high-throughput scenarios where gRPC zero-copy optimization is used with Netty ByteBuf.
>
> *Solution*
> Add leak detection and cleanup capabilities to ZeroCopyMessageMarshaller:
>
> - Add `getUnclosedCount()`: Returns the number of unclosed streams for monitoring
> - Add `checkLeaks(String context)`: Throws IllegalStateException if unclosed streams exist, used for test assertions
> - Add `close()`: Cleanup method that closes all unclosed streams with logging, providing last-resort protection
--
This message was sent by Atlassian Jira
(v8.20.10#820010)