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

Shilun Fan updated HDFS-17184:
------------------------------
    Component/s: datanode

> Improve BlockReceiver to throws DiskOutOfSpaceException when initialize
> -----------------------------------------------------------------------
>
>                 Key: HDFS-17184
>                 URL: https://issues.apache.org/jira/browse/HDFS-17184
>             Project: Hadoop HDFS
>          Issue Type: Improvement
>          Components: datanode
>            Reporter: Haiyang Hu
>            Assignee: Haiyang Hu
>            Priority: Major
>              Labels: pull-request-available
>             Fix For: 3.4.0
>
>
> BlockReceiver class will receives a block and writes to its disk,
> in the constructor method, createTemporary and createRbw will execute 
> chooseVolume, and DiskOutOfSpaceException may occur in chooseVolume.
> current in the processing logic, if the exception occurs will be cacth by 
> BlockReceiver.java line_282 catch(IOException ioe) here, and cleanupBlock() 
> will be executed here.
> since the replica of the current block has not been added to ReplicaMap, 
> executing cleanupBlock will throw ReplicaNotFoundException.
> the ReplicaNotFoundException exception will overwrite the actual 
> DiskOutOfSpaceException, resulting in inaccurate exception information.
> {code:java}
> BlockReceiver(final ExtendedBlock block, final StorageType storageType,
>       final DataInputStream in,
>       final String inAddr, final String myAddr,
>       final BlockConstructionStage stage, 
>       final long newGs, final long minBytesRcvd, final long maxBytesRcvd, 
>       final String clientname, final DatanodeInfo srcDataNode,
>       final DataNode datanode, DataChecksum requestedChecksum,
>       CachingStrategy cachingStrategy,
>       final boolean allowLazyPersist,
>       final boolean pinning,
>       final String storageId) throws IOException {
>     try{
>       ...
>      } catch (ReplicaAlreadyExistsException bae) {
>        throw bae;
>      } catch (ReplicaNotFoundException bne) {
>        throw bne;
>      } catch(IOException ioe) {
>       if (replicaInfo != null) {
>         replicaInfo.releaseAllBytesReserved();
>       }
>       IOUtils.closeStream(this); 
>       cleanupBlock();// if ReplicaMap does not exist  replica  will throw 
> ReplicaNotFoundException
>       ...
>       throw ioe;
>     }
>   }
> {code}



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

---------------------------------------------------------------------
To unsubscribe, e-mail: hdfs-issues-unsubscr...@hadoop.apache.org
For additional commands, e-mail: hdfs-issues-h...@hadoop.apache.org

Reply via email to