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)

Reply via email to