Project

General

Profile

Actions

Bug #10153

closed

File.open block does not throw "No space left on device (Errno::ENOSPC)" if the data fits the buffer of IO.write

Bug #10153: File.open block does not throw "No space left on device (Errno::ENOSPC)" if the data fits the buffer of IO.write

Added by butching314 (Marvin Reyes) about 11 years ago. Updated about 11 years ago.

Status:
Closed
Target version:
ruby -v:
ruby 1.9.3p484 (2013-11-22) [x86_64-linux]
[ruby-core:64463]

Description

When writing to file in disk using File.open with a block as an argument, if the diskspace is full and IO.write does not flush right away, the block just exits successfully instead of throwing Errno:ENOSPC.

Setup: Drive partition needs to be full

Eg. of a write that will succeed normally with no exception given that the drive is full (this means that the expected failure is being swallowed)

File.open('/full_drive/test.txt','wb') do |file| file.write("test") end #This will complete normally because the "test" data does not get flushed #This will leave a 0kb file on the disk 

Eg. force a flush to see the error

File.open('/full_drive/test.txt','wb') do |file| file.write("test") file.flush end #This will throw Errno::ENOSPC #This will leave a 0kb file on the disk 

Eg. write a large enough data that file.write will flush by itself (most likely it hits the buffer cap)

fills = '1'*1048576 File.open('/full_drive/test.txt','wb') do |file| file.write(fills) end #This will throw Errno::ENOSPC #This will leave a 0kb file on the disk 

Eg. When not using File.open block argument and closing the IO with an ensure block

begin io = File.open('/full_drive/test.txt', 'wb') io.write("test") ensure io.close end #This will throw Errno::ENOSPC #This will leave a 0kb file on the disk 

Currently tested in RHEL5.

Notes:


Related issues 1 (0 open1 closed)

Actions

Also available in: PDF Atom