[
https://issues.apache.org/jira/browse/RATIS-2077?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Duong updated RATIS-2077:
-------------------------
Description:
When getEntry gets timed out, the StateMachine reference count is released
twice.
{code:java}
java.util.concurrent.TimeoutException
at
java.base/java.util.concurrent.CompletableFuture.timedGet(CompletableFuture.java:1886)
at
java.base/java.util.concurrent.CompletableFuture.get(CompletableFuture.java:2021)
at
org.apache.ratis.server.raftlog.RaftLogBase$EntryWithDataImpl.getEntry(RaftLogBase.java:497)
at org.apache.ratis.util.DataQueue.pollList(DataQueue.java:137)
at
org.apache.ratis.server.leader.LogAppenderBase.nextAppendEntriesRequest(LogAppenderBase.java:274)
at
org.apache.ratis.grpc.server.GrpcLogAppender.appendLog(GrpcLogAppender.java:387)
at
org.apache.ratis.grpc.server.GrpcLogAppender.run(GrpcLogAppender.java:262)
at
org.apache.ratis.server.leader.LogAppenderDaemon.run(LogAppenderDaemon.java:80)
at java.base/java.lang.Thread.run(Thread.java:834)
{code}
it results in a ISE:
{code:java}
java.lang.IllegalStateException: Failed to release: object has already been
completely released.
at
org.apache.ratis.util.ReferenceCountedLeakDetector$Impl.release(ReferenceCountedLeakDetector.java:130)
at
org.apache.ratis.util.ReferenceCountedLeakDetector$AdvancedTracing.release(ReferenceCountedLeakDetector.java:203)
at
org.apache.ratis.server.raftlog.RaftLogBase$1.lambda$updateFuture$0(RaftLogBase.java:439)
at
java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
at
java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:837)
at
java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
at
java.base/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2073)
at
org.apache.hadoop.ozone.container.common.transport.server.ratis.ContainerStateMachine.lambda$retainRead$8(ContainerStateMachine.java:846)
at
java.base/java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1736)
at
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)
Object is already released at:
org.apache.ratis.server.raftlog.RaftLogBase$EntryWithDataImpl.lambda$discardData$0(RaftLogBase.java:528)
java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:837)
java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
java.base/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2073)
org.apache.hadoop.ozone.container.common.transport.server.ratis.ContainerStateMachine.lambda$retainRead$8(ContainerStateMachine.java:846)
java.base/java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1736)
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
java.base/java.lang.Thread.run(Thread.java:834){code}
was:
When getEntry gets timed out, the StateMachine reference count is released
twice.
{code:java}
java.util.concurrent.TimeoutException
at
java.base/java.util.concurrent.CompletableFuture.timedGet(CompletableFuture.java:1886)
at
java.base/java.util.concurrent.CompletableFuture.get(CompletableFuture.java:2021)
at
org.apache.ratis.server.raftlog.RaftLogBase$EntryWithDataImpl.getEntry(RaftLogBase.java:497)
at org.apache.ratis.util.DataQueue.pollList(DataQueue.java:137)
at
org.apache.ratis.server.leader.LogAppenderBase.nextAppendEntriesRequest(LogAppenderBase.java:274)
at
org.apache.ratis.grpc.server.GrpcLogAppender.appendLog(GrpcLogAppender.java:387)
at
org.apache.ratis.grpc.server.GrpcLogAppender.run(GrpcLogAppender.java:262)
at
org.apache.ratis.server.leader.LogAppenderDaemon.run(LogAppenderDaemon.java:80)
at java.base/java.lang.Thread.run(Thread.java:834)
{code}
it results in a ISE:
{code:java}
java.lang.IllegalStateException: Failed to release: object has already been
completely released.
at
org.apache.ratis.util.ReferenceCountedLeakDetector$Impl.release(ReferenceCountedLeakDetector.java:130)
at
org.apache.ratis.util.ReferenceCountedLeakDetector$AdvancedTracing.release(ReferenceCountedLeakDetector.java:203)
at
org.apache.ratis.server.raftlog.RaftLogBase$1.lambda$updateFuture$0(RaftLogBase.java:439)
at
java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
at
java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:837)
at
java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
at
java.base/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2073)
at
org.apache.hadoop.ozone.container.common.transport.server.ratis.ContainerStateMachine.lambda$retainRead$8(ContainerStateMachine.java:846)
at
java.base/java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1736)
at
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834) {code}
> Timedout StateMachine retainRead is released twice.
> ---------------------------------------------------
>
> Key: RATIS-2077
> URL: https://issues.apache.org/jira/browse/RATIS-2077
> Project: Ratis
> Issue Type: Sub-task
> Reporter: Duong
> Priority: Major
>
> When getEntry gets timed out, the StateMachine reference count is released
> twice.
> {code:java}
> java.util.concurrent.TimeoutException
> at
> java.base/java.util.concurrent.CompletableFuture.timedGet(CompletableFuture.java:1886)
> at
> java.base/java.util.concurrent.CompletableFuture.get(CompletableFuture.java:2021)
> at
> org.apache.ratis.server.raftlog.RaftLogBase$EntryWithDataImpl.getEntry(RaftLogBase.java:497)
> at org.apache.ratis.util.DataQueue.pollList(DataQueue.java:137)
> at
> org.apache.ratis.server.leader.LogAppenderBase.nextAppendEntriesRequest(LogAppenderBase.java:274)
> at
> org.apache.ratis.grpc.server.GrpcLogAppender.appendLog(GrpcLogAppender.java:387)
> at
> org.apache.ratis.grpc.server.GrpcLogAppender.run(GrpcLogAppender.java:262)
> at
> org.apache.ratis.server.leader.LogAppenderDaemon.run(LogAppenderDaemon.java:80)
> at java.base/java.lang.Thread.run(Thread.java:834)
> {code}
>
> it results in a ISE:
> {code:java}
> java.lang.IllegalStateException: Failed to release: object has already been
> completely released.
> at
> org.apache.ratis.util.ReferenceCountedLeakDetector$Impl.release(ReferenceCountedLeakDetector.java:130)
> at
> org.apache.ratis.util.ReferenceCountedLeakDetector$AdvancedTracing.release(ReferenceCountedLeakDetector.java:203)
> at
> org.apache.ratis.server.raftlog.RaftLogBase$1.lambda$updateFuture$0(RaftLogBase.java:439)
> at
> java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
> at
> java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:837)
> at
> java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
> at
> java.base/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2073)
> at
> org.apache.hadoop.ozone.container.common.transport.server.ratis.ContainerStateMachine.lambda$retainRead$8(ContainerStateMachine.java:846)
> at
> java.base/java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1736)
> at
> java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
> at
> java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
> at java.base/java.lang.Thread.run(Thread.java:834)
> Object is already released at:
> org.apache.ratis.server.raftlog.RaftLogBase$EntryWithDataImpl.lambda$discardData$0(RaftLogBase.java:528)
> java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
> java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:837)
> java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
> java.base/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2073)
> org.apache.hadoop.ozone.container.common.transport.server.ratis.ContainerStateMachine.lambda$retainRead$8(ContainerStateMachine.java:846)
> java.base/java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1736)
> java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
> java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
> java.base/java.lang.Thread.run(Thread.java:834){code}
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)