You are viewing a plain text version of this content. The canonical link for it is here.
Posted to hdfs-dev@hadoop.apache.org by "Xiaoqiao He (Jira)" <ji...@apache.org> on 2023/09/21 13:47:00 UTC

[jira] [Resolved] (HDFS-17184) Improve BlockReceiver to throws DiskOutOfSpaceException when initialize

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

Xiaoqiao He resolved HDFS-17184.
--------------------------------
    Fix Version/s: 3.4.0
     Hadoop Flags: Reviewed
       Resolution: Fixed

> 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
>            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-dev-unsubscribe@hadoop.apache.org
For additional commands, e-mail: hdfs-dev-help@hadoop.apache.org