Details
-
Bug
-
Status: Closed
-
Blocker
-
Resolution: Fixed
-
None
-
None
-
None
-
Reviewed
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:
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)
Attachments
Attachments
Issue Links
- is broken by
-
HDFS-6898 DN must reserve space for a full block when an RBW block is created
- Closed