[
https://issues.apache.org/jira/browse/HDFS-8626?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
kanaka kumar avvaru updated HDFS-8626:
--------------------------------------
Description:
The DataNode reserves disk space for a full block when creating an RBW block
and will release the space when the block is finalized (introduced in
HDFS-6898)
But if the RBW file creation fails, the reserved space is not released back.
In a scenario, when the data node disk is full it causes no space left
{{IOException}}. Eventually even if the disk got cleaned, the reserved space
is not release until the Data Node is restarted
Stacktrace for block creation failure is:
{code} IOException in BlockReceiver constructor. Cause is |
org.apache.hadoop.hdfs.server.datanode.BlockReceiver.<init>(BlockReceiver.java:264)
java.io.IOException: No space left on device
at java.io.UnixFileSystem.createFileExclusively(Native Method)
at java.io.File.createNewFile(File.java:1012)
at
org.apache.hadoop.hdfs.server.datanode.DatanodeUtil.createTmpFile(DatanodeUtil.java:66)
at
org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.BlockPoolSlice.createRbwFile(BlockPoolSlice.java:274)
at
org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsVolumeImpl.createRbwFile(FsVolumeImpl.java:762)
at
org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl.createRbw(FsDatasetImpl.java:1320)
at
org.apache.hadoop.hdfs.server.datanode.BlockReceiver.<init>(BlockReceiver.java:190)
at
org.apache.hadoop.hdfs.server.datanode.DataXceiver.writeBlock(DataXceiver.java:678)
at
org.apache.hadoop.hdfs.protocol.datatransfer.Receiver.opWriteBlock(Receiver.java:137)
at
org.apache.hadoop.hdfs.protocol.datatransfer.Receiver.processOp(Receiver.java:74)
at
org.apache.hadoop.hdfs.server.datanode.DataXceiver.run(DataXceiver.java:250)
at java.lang.Thread.run(Thread.java:745)
{code}
was:
The DataNode reserves disk space for a full block when creating an RBW block
and will release the space when the block is finalized (introduced in
HDFS-6898)
But if the RBW file creation fails, the reserved space is not released back.
In a scenario, when the data node disk is full it causes no space left
{{IOException}}. Eventually even if the disk got cleaned, the reserved space
is not release until the Data Node is restarted
> Reserved RBW space is not released if creation of RBW File fails
> ----------------------------------------------------------------
>
> Key: HDFS-8626
> URL: https://issues.apache.org/jira/browse/HDFS-8626
> Project: Hadoop HDFS
> Issue Type: Bug
> Reporter: kanaka kumar avvaru
> Assignee: kanaka kumar avvaru
> Priority: Blocker
> Attachments: HDFS-8626-01.patch, HDFS-8626-02.patch,
> HDFS-8626-03.patch
>
>
> The DataNode reserves disk space for a full block when creating an RBW block
> and will release the space when the block is finalized (introduced in
> HDFS-6898)
> But if the RBW file creation fails, the reserved space is not released back.
> In a scenario, when the data node disk is full it causes no space left
> {{IOException}}. Eventually even if the disk got cleaned, the reserved space
> is not release until the Data Node is restarted
> Stacktrace for block creation failure is:
> {code} IOException in BlockReceiver constructor. Cause is |
> org.apache.hadoop.hdfs.server.datanode.BlockReceiver.<init>(BlockReceiver.java:264)
> java.io.IOException: No space left on device
> at java.io.UnixFileSystem.createFileExclusively(Native Method)
> at java.io.File.createNewFile(File.java:1012)
> at
> org.apache.hadoop.hdfs.server.datanode.DatanodeUtil.createTmpFile(DatanodeUtil.java:66)
> at
> org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.BlockPoolSlice.createRbwFile(BlockPoolSlice.java:274)
> at
> org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsVolumeImpl.createRbwFile(FsVolumeImpl.java:762)
> at
> org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl.createRbw(FsDatasetImpl.java:1320)
> at
> org.apache.hadoop.hdfs.server.datanode.BlockReceiver.<init>(BlockReceiver.java:190)
> at
> org.apache.hadoop.hdfs.server.datanode.DataXceiver.writeBlock(DataXceiver.java:678)
> at
> org.apache.hadoop.hdfs.protocol.datatransfer.Receiver.opWriteBlock(Receiver.java:137)
> at
> org.apache.hadoop.hdfs.protocol.datatransfer.Receiver.processOp(Receiver.java:74)
> at
> org.apache.hadoop.hdfs.server.datanode.DataXceiver.run(DataXceiver.java:250)
> at java.lang.Thread.run(Thread.java:745)
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)