[ 
https://issues.apache.org/jira/browse/RATIS-2510?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Tsz-wo Sze updated RATIS-2510:
------------------------------
    Description: 
{code}
// NettyClientStreamRpc.WorkerGroupGetter.(RaftProperties properties)
        return new WorkerGroupGetter(current.join().retain()) {
{code}
In the code above, the current object may be released completely after join().
{code}
Error:  org.apache.hadoop.ozone.client.rpc.read.TestStreamRead.testReadKey16k 
-- Time elapsed: 28.89 s <<< ERROR!
java.io.IOException: java.lang.IllegalStateException: Failed to retain: object 
has already been completely released.
        at 
org.apache.hadoop.ozone.client.io.KeyDataStreamOutput.handleWrite(KeyDataStreamOutput.java:222)
        at 
org.apache.hadoop.ozone.client.io.KeyDataStreamOutput.write(KeyDataStreamOutput.java:192)
        at 
org.apache.hadoop.ozone.client.io.OzoneDataStreamOutput.write(OzoneDataStreamOutput.java:88)
        at 
org.apache.hadoop.ozone.client.io.ByteBufferOutputStream.write(ByteBufferOutputStream.java:42)
        at 
org.apache.hadoop.ozone.client.rpc.read.TestStreamRead.createKey(TestStreamRead.java:261)
        at 
org.apache.hadoop.ozone.client.rpc.read.TestStreamRead.runTestReadKey(TestStreamRead.java:169)
        at 
org.apache.hadoop.ozone.client.rpc.read.TestStreamRead.testReadKey16k(TestStreamRead.java:120)
        ...
Caused by: java.lang.IllegalStateException: Failed to retain: object has 
already been completely released.
        at 
org.apache.ratis.util.ReferenceCountedObject$2.retain(ReferenceCountedObject.java:138)
        at 
org.apache.ratis.netty.client.NettyClientStreamRpc$WorkerGroupGetter.newInstance(NettyClientStreamRpc.java:97)
        at 
org.apache.ratis.netty.client.NettyClientStreamRpc.<init>(NettyClientStreamRpc.java:316)
        at 
org.apache.ratis.netty.NettyDataStreamFactory.newDataStreamClientRpc(NettyDataStreamFactory.java:48)
        at 
org.apache.ratis.client.DataStreamClient$Builder.build(DataStreamClient.java:73)
        at 
org.apache.ratis.client.impl.RaftClientImpl.lambda$new$5(RaftClientImpl.java:219)
        at org.apache.ratis.util.MemoizedSupplier.get(MemoizedSupplier.java:63)
        at 
org.apache.ratis.client.impl.RaftClientImpl.getDataStreamApi(RaftClientImpl.java:343)
        at 
org.apache.hadoop.hdds.scm.XceiverClientRatis.getDataStreamApi(XceiverClientRatis.java:424)
        at 
org.apache.hadoop.hdds.scm.storage.BlockDataStreamOutput.setupStream(BlockDataStreamOutput.java:228)
        at 
org.apache.hadoop.hdds.scm.storage.BlockDataStreamOutput.<init>(BlockDataStreamOutput.java:173)
        at 
org.apache.hadoop.ozone.client.io.BlockDataStreamOutputEntry.checkStream(BlockDataStreamOutputEntry.java:98)
        at 
org.apache.hadoop.ozone.client.io.BlockDataStreamOutputEntry.write(BlockDataStreamOutputEntry.java:106)
        at 
org.apache.hadoop.ozone.client.io.KeyDataStreamOutput.writeToDataStreamOutput(KeyDataStreamOutput.java:234)
        at 
org.apache.hadoop.ozone.client.io.KeyDataStreamOutput.handleWrite(KeyDataStreamOutput.java:212)
        ... 12 more
{code}

  was:
{code}
Error:  org.apache.hadoop.ozone.client.rpc.read.TestStreamRead.testReadKey16k 
-- Time elapsed: 28.89 s <<< ERROR!
java.io.IOException: java.lang.IllegalStateException: Failed to retain: object 
has already been completely released.
        at 
org.apache.hadoop.ozone.client.io.KeyDataStreamOutput.handleWrite(KeyDataStreamOutput.java:222)
        at 
org.apache.hadoop.ozone.client.io.KeyDataStreamOutput.write(KeyDataStreamOutput.java:192)
        at 
org.apache.hadoop.ozone.client.io.OzoneDataStreamOutput.write(OzoneDataStreamOutput.java:88)
        at 
org.apache.hadoop.ozone.client.io.ByteBufferOutputStream.write(ByteBufferOutputStream.java:42)
        at 
org.apache.hadoop.ozone.client.rpc.read.TestStreamRead.createKey(TestStreamRead.java:261)
        at 
org.apache.hadoop.ozone.client.rpc.read.TestStreamRead.runTestReadKey(TestStreamRead.java:169)
        at 
org.apache.hadoop.ozone.client.rpc.read.TestStreamRead.testReadKey16k(TestStreamRead.java:120)
        at java.base/java.lang.reflect.Method.invoke(Method.java:580)
        at 
java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:387)
        at 
java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1312)
        at 
java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1843)
        at 
java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1808)
        at 
java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:188)
Caused by: java.lang.IllegalStateException: Failed to retain: object has 
already been completely released.
        at 
org.apache.ratis.util.ReferenceCountedObject$2.retain(ReferenceCountedObject.java:138)
        at 
org.apache.ratis.netty.client.NettyClientStreamRpc$WorkerGroupGetter.newInstance(NettyClientStreamRpc.java:97)
        at 
org.apache.ratis.netty.client.NettyClientStreamRpc.<init>(NettyClientStreamRpc.java:316)
        at 
org.apache.ratis.netty.NettyDataStreamFactory.newDataStreamClientRpc(NettyDataStreamFactory.java:48)
        at 
org.apache.ratis.client.DataStreamClient$Builder.build(DataStreamClient.java:73)
        at 
org.apache.ratis.client.impl.RaftClientImpl.lambda$new$5(RaftClientImpl.java:219)
        at org.apache.ratis.util.MemoizedSupplier.get(MemoizedSupplier.java:63)
        at 
org.apache.ratis.client.impl.RaftClientImpl.getDataStreamApi(RaftClientImpl.java:343)
        at 
org.apache.hadoop.hdds.scm.XceiverClientRatis.getDataStreamApi(XceiverClientRatis.java:424)
        at 
org.apache.hadoop.hdds.scm.storage.BlockDataStreamOutput.setupStream(BlockDataStreamOutput.java:228)
        at 
org.apache.hadoop.hdds.scm.storage.BlockDataStreamOutput.<init>(BlockDataStreamOutput.java:173)
        at 
org.apache.hadoop.ozone.client.io.BlockDataStreamOutputEntry.checkStream(BlockDataStreamOutputEntry.java:98)
        at 
org.apache.hadoop.ozone.client.io.BlockDataStreamOutputEntry.write(BlockDataStreamOutputEntry.java:106)
        at 
org.apache.hadoop.ozone.client.io.KeyDataStreamOutput.writeToDataStreamOutput(KeyDataStreamOutput.java:234)
        at 
org.apache.hadoop.ozone.client.io.KeyDataStreamOutput.handleWrite(KeyDataStreamOutput.java:212)
        ... 12 more
{code}


> NettyClientStreamRpc may retain a completely released object.
> -------------------------------------------------------------
>
>                 Key: RATIS-2510
>                 URL: https://issues.apache.org/jira/browse/RATIS-2510
>             Project: Ratis
>          Issue Type: Bug
>          Components: Streaming
>            Reporter: Tsz-wo Sze
>            Assignee: Tsz-wo Sze
>            Priority: Major
>
> {code}
> // NettyClientStreamRpc.WorkerGroupGetter.(RaftProperties properties)
>         return new WorkerGroupGetter(current.join().retain()) {
> {code}
> In the code above, the current object may be released completely after join().
> {code}
> Error:  org.apache.hadoop.ozone.client.rpc.read.TestStreamRead.testReadKey16k 
> -- Time elapsed: 28.89 s <<< ERROR!
> java.io.IOException: java.lang.IllegalStateException: Failed to retain: 
> object has already been completely released.
>       at 
> org.apache.hadoop.ozone.client.io.KeyDataStreamOutput.handleWrite(KeyDataStreamOutput.java:222)
>       at 
> org.apache.hadoop.ozone.client.io.KeyDataStreamOutput.write(KeyDataStreamOutput.java:192)
>       at 
> org.apache.hadoop.ozone.client.io.OzoneDataStreamOutput.write(OzoneDataStreamOutput.java:88)
>       at 
> org.apache.hadoop.ozone.client.io.ByteBufferOutputStream.write(ByteBufferOutputStream.java:42)
>       at 
> org.apache.hadoop.ozone.client.rpc.read.TestStreamRead.createKey(TestStreamRead.java:261)
>       at 
> org.apache.hadoop.ozone.client.rpc.read.TestStreamRead.runTestReadKey(TestStreamRead.java:169)
>       at 
> org.apache.hadoop.ozone.client.rpc.read.TestStreamRead.testReadKey16k(TestStreamRead.java:120)
>       ...
> Caused by: java.lang.IllegalStateException: Failed to retain: object has 
> already been completely released.
>       at 
> org.apache.ratis.util.ReferenceCountedObject$2.retain(ReferenceCountedObject.java:138)
>       at 
> org.apache.ratis.netty.client.NettyClientStreamRpc$WorkerGroupGetter.newInstance(NettyClientStreamRpc.java:97)
>       at 
> org.apache.ratis.netty.client.NettyClientStreamRpc.<init>(NettyClientStreamRpc.java:316)
>       at 
> org.apache.ratis.netty.NettyDataStreamFactory.newDataStreamClientRpc(NettyDataStreamFactory.java:48)
>       at 
> org.apache.ratis.client.DataStreamClient$Builder.build(DataStreamClient.java:73)
>       at 
> org.apache.ratis.client.impl.RaftClientImpl.lambda$new$5(RaftClientImpl.java:219)
>       at org.apache.ratis.util.MemoizedSupplier.get(MemoizedSupplier.java:63)
>       at 
> org.apache.ratis.client.impl.RaftClientImpl.getDataStreamApi(RaftClientImpl.java:343)
>       at 
> org.apache.hadoop.hdds.scm.XceiverClientRatis.getDataStreamApi(XceiverClientRatis.java:424)
>       at 
> org.apache.hadoop.hdds.scm.storage.BlockDataStreamOutput.setupStream(BlockDataStreamOutput.java:228)
>       at 
> org.apache.hadoop.hdds.scm.storage.BlockDataStreamOutput.<init>(BlockDataStreamOutput.java:173)
>       at 
> org.apache.hadoop.ozone.client.io.BlockDataStreamOutputEntry.checkStream(BlockDataStreamOutputEntry.java:98)
>       at 
> org.apache.hadoop.ozone.client.io.BlockDataStreamOutputEntry.write(BlockDataStreamOutputEntry.java:106)
>       at 
> org.apache.hadoop.ozone.client.io.KeyDataStreamOutput.writeToDataStreamOutput(KeyDataStreamOutput.java:234)
>       at 
> org.apache.hadoop.ozone.client.io.KeyDataStreamOutput.handleWrite(KeyDataStreamOutput.java:212)
>       ... 12 more
> {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to