Attila Doroszlai created RATIS-2225:
---------------------------------------
Summary: RaftClientRequest leak in RaftServerImpl
Key: RATIS-2225
URL: https://issues.apache.org/jira/browse/RATIS-2225
Project: Ratis
Issue Type: Bug
Components: server
Reporter: Attila Doroszlai
Attachments: org.apache.ratis.grpc.TestRaftWithGrpc-output.txt,
org.apache.ratis.grpc.TestRaftWithGrpc.txt
Advanced LeakDetector traces for {{TestRaftWithGrpc#testBasicAppendEntries}}:
{code}
2024-12-21 17:05:34,568 [main] WARN util.ReferenceCountedLeakDetector
(ReferenceCountedLeakDetector.java:logLeakMessage(167)) - LEAK: (class
org.apache.ratis.protocol.RaftClientRequest, count=1,
value=RaftClientRequest:client-3DC1C0CC79B3->s3@group-B9908284294E, cid=2,
seq=null, RW, Message:6d30) #TraceInfos=6
CREATION_0: previousRefCount=-1, refCount=0, retainCount=0, releaseCount=0,
Thread_278:grpc-default-executor-1
org.apache.ratis.util.ReferenceCountedLeakDetector$AdvancedTracing.<init>(ReferenceCountedLeakDetector.java:310)
org.apache.ratis.util.ReferenceCountedLeakDetector$Mode$3.create(ReferenceCountedLeakDetector.java:82)
org.apache.ratis.util.ReferenceCountedObject.wrap(ReferenceCountedObject.java:178)
org.apache.ratis.grpc.server.GrpcClientProtocolService$RequestStreamObserver.onNext(GrpcClientProtocolService.java:280)
org.apache.ratis.grpc.server.GrpcClientProtocolService$RequestStreamObserver.onNext(GrpcClientProtocolService.java:205)
org.apache.ratis.thirdparty.io.grpc.stub.ServerCalls$StreamingServerCallHandler$StreamingServerCallListener.onMessage(ServerCalls.java:262)
org.apache.ratis.thirdparty.io.grpc.internal.ServerCallImpl$ServerStreamListenerImpl.messagesAvailableInternal(ServerCallImpl.java:329)
org.apache.ratis.thirdparty.io.grpc.internal.ServerCallImpl$ServerStreamListenerImpl.messagesAvailable(ServerCallImpl.java:314)
org.apache.ratis.thirdparty.io.grpc.internal.ServerImpl$JumpToApplicationThreadServerStreamListener$1MessagesAvailable.runInContext(ServerImpl.java:833)
org.apache.ratis.thirdparty.io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37)
org.apache.ratis.thirdparty.io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:133)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
java.lang.Thread.run(Thread.java:750)
RETAIN_1: previousRefCount=0, refCount=1, retainCount=1, releaseCount=0,
Thread_278:grpc-default-executor-1
org.apache.ratis.util.ReferenceCountedLeakDetector$AdvancedTracing.retain(ReferenceCountedLeakDetector.java:325)
org.apache.ratis.grpc.server.GrpcClientProtocolService$UnorderedRequestStreamObserver.processClientRequest(GrpcClientProtocolService.java:325)
org.apache.ratis.grpc.server.GrpcClientProtocolService$RequestStreamObserver.onNext(GrpcClientProtocolService.java:286)
org.apache.ratis.grpc.server.GrpcClientProtocolService$RequestStreamObserver.onNext(GrpcClientProtocolService.java:205)
...
RETAIN_2: previousRefCount=1, refCount=2, retainCount=2, releaseCount=0,
Thread_278:grpc-default-executor-1
org.apache.ratis.util.ReferenceCountedLeakDetector$AdvancedTracing.retain(ReferenceCountedLeakDetector.java:325)
org.apache.ratis.server.impl.RaftServerProxy.submitClientRequestAsync(RaftServerProxy.java:452)
org.apache.ratis.grpc.server.GrpcClientProtocolService$RequestStreamObserver.processClientRequest(GrpcClientProtocolService.java:262)
org.apache.ratis.grpc.server.GrpcClientProtocolService$UnorderedRequestStreamObserver.processClientRequest(GrpcClientProtocolService.java:328)
org.apache.ratis.grpc.server.GrpcClientProtocolService$RequestStreamObserver.onNext(GrpcClientProtocolService.java:286)
...
RETAIN_3: previousRefCount=2, refCount=3, retainCount=3, releaseCount=0,
Thread_425:s3-client-thread1
org.apache.ratis.util.ReferenceCountedLeakDetector$AdvancedTracing.retain(ReferenceCountedLeakDetector.java:325)
org.apache.ratis.server.impl.RaftServerImpl.submitClientRequestAsync(RaftServerImpl.java:924)
org.apache.ratis.server.impl.RaftServerImpl.lambda$executeSubmitClientRequestAsync$11(RaftServerImpl.java:918)
java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1604)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
...
RELEASE_4: previousRefCount=3, refCount=2, retainCount=3, releaseCount=1,
Thread_278:grpc-default-executor-1
org.apache.ratis.util.ReferenceCountedLeakDetector$AdvancedTracing.release(ReferenceCountedLeakDetector.java:334)
org.apache.ratis.server.impl.RaftServerProxy.submitClientRequestAsync(RaftServerProxy.java:457)
org.apache.ratis.grpc.server.GrpcClientProtocolService$RequestStreamObserver.processClientRequest(GrpcClientProtocolService.java:262)
org.apache.ratis.grpc.server.GrpcClientProtocolService$UnorderedRequestStreamObserver.processClientRequest(GrpcClientProtocolService.java:328)
org.apache.ratis.grpc.server.GrpcClientProtocolService$RequestStreamObserver.onNext(GrpcClientProtocolService.java:286)
org.apache.ratis.grpc.server.GrpcClientProtocolService$RequestStreamObserver.onNext(GrpcClientProtocolService.java:205)
org.apache.ratis.thirdparty.io.grpc.stub.ServerCalls$StreamingServerCallHandler$StreamingServerCallListener.onMessage(ServerCalls.java:262)
org.apache.ratis.thirdparty.io.grpc.internal.ServerCallImpl$ServerStreamListenerImpl.messagesAvailableInternal(ServerCallImpl.java:329)
org.apache.ratis.thirdparty.io.grpc.internal.ServerCallImpl$ServerStreamListenerImpl.messagesAvailable(ServerCallImpl.java:314)
org.apache.ratis.thirdparty.io.grpc.internal.ServerImpl$JumpToApplicationThreadServerStreamListener$1MessagesAvailable.runInContext(ServerImpl.java:833)
org.apache.ratis.thirdparty.io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37)
org.apache.ratis.thirdparty.io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:133)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
...
RELEASE_5: previousRefCount=2, refCount=1, retainCount=3, releaseCount=2,
Thread_278:grpc-default-executor-1
org.apache.ratis.util.ReferenceCountedLeakDetector$AdvancedTracing.release(ReferenceCountedLeakDetector.java:334)
org.apache.ratis.grpc.server.GrpcClientProtocolService$UnorderedRequestStreamObserver.processClientRequest(GrpcClientProtocolService.java:336)
org.apache.ratis.grpc.server.GrpcClientProtocolService$RequestStreamObserver.onNext(GrpcClientProtocolService.java:286)
...
CURRENT_6: previousRefCount=1, refCount=1, retainCount=3, releaseCount=2,
Thread_1:main
org.apache.ratis.util.ReferenceCountedLeakDetector$AdvancedTracing.getTraceString(ReferenceCountedLeakDetector.java:343)
org.apache.ratis.util.ReferenceCountedLeakDetector$SimpleTracing.logLeakMessage(ReferenceCountedLeakDetector.java:166)
org.apache.ratis.util.LeakDetector$LeakTracker.reportLeak(LeakDetector.java:199)
org.apache.ratis.util.LeakDetector$LeakTrackerSet.getNumLeaks(LeakDetector.java:89)
org.apache.ratis.util.LeakDetector.assertNoLeaks(LeakDetector.java:171)
org.apache.ratis.server.impl.MiniRaftCluster.shutdown(MiniRaftCluster.java:894)
org.apache.ratis.grpc.MiniRaftClusterWithGrpc.shutdown(MiniRaftClusterWithGrpc.java:97)
org.apache.ratis.server.impl.MiniRaftCluster$Factory$Get.runWithNewCluster(MiniRaftCluster.java:152)
org.apache.ratis.server.impl.MiniRaftCluster$Factory$Get.runWithNewCluster(MiniRaftCluster.java:121)
org.apache.ratis.RaftBasicTests.testBasicAppendEntries(RaftBasicTests.java:82)
{code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)