[#64517] Fw: Re: Ruby and Rails to become Apache Incubator Project — Tetsuya Kitahata <[email protected]>

What do you think? >> Ruby developers

13 messages 2014/08/23

[#64615] [ruby-trunk - Feature #10181] [Open] New method File.openat() — oss-ruby-lang@...

Issue #10181 has been reported by Technorama Ltd..

10 messages 2014/08/28
[#64616] Re: [ruby-trunk - Feature #10181] [Open] New method File.openat() — Eric Wong <normalperson@...> 2014/08/28

I like this feature.

[#64671] Fwd: [ruby-changes:35240] normal:r47322 (trunk): symbol.c (rb_sym2id): do not return garbage object — SASADA Koichi <ko1@...>

Why this fix solve your problem?

9 messages 2014/08/30
[#64672] Re: Fwd: [ruby-changes:35240] normal:r47322 (trunk): symbol.c (rb_sym2id): do not return garbage object — SASADA Koichi <ko1@...> 2014/08/30

(2014/08/30 8:50), SASADA Koichi wrote:

[ruby-core:64561] [ruby-trunk - 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

From: nobu@...
Date: 2014-08-26 08:13:00 UTC
List: ruby-core #64561
Issue #10153 has been updated by Nobuyoshi Nakada.

Status changed from Assigned to Closed
% Done changed from 0 to 100

Applied in changeset r47288.

----------
io.c: do not swallow exceptions at end of block

* io.c (io_close): ignore only "closed stream" IOError and
  NoMethodError, do not swallow other exceptions at the end of
  block.  [ruby-core:64463] [Bug #10153]

----------------------------------------
Bug #10153: File.open block does not throw "No space left on device (Errno::ENOSPC)" if the data fits the buffer of IO.write 
https://bugs.ruby-lang.org/issues/10153#change-48488

* Author: Marvin Reyes
* Status: Closed
* Priority: Normal
* Assignee: Yukihiro Matsumoto
* Category: core
* Target version: current: 2.2.0
* ruby -v: ruby 1.9.3p484 (2013-11-22) [x86_64-linux]
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------
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:
- I've encountered this in ruby-1.9.2
- I've tested this with ruby-2.1.2
- I'm not sure if the issue is because of File.open usage of c-extension rb_ensure or io_close. reference: (http://ruby-doc.org/core-1.9.3/File.html#method-c-open)




-- 
https://bugs.ruby-lang.org/

In This Thread

Prev Next