Project

General

Profile

Feature #11218

File.open FILE_SHARE_DELETE

Added by naruse (Yui NARUSE) about 4 years ago. Updated about 4 years ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-dev:49022]

Description

fluentdという、OSSのログコレクタがあるのですが、これにはin_tailプラグインというものがあります。
これは、ログファイルを監視して、ログがファイルに追記されたらその分を読み込んでJSONにして他に流します。

このログファイルはfluentdではない他の誰か、ApacheだったりRailsだったりします。
この手のログファイルを書いていく流儀はいくつかありますが、ご存じの通りRailsやApacheは基本的に特定のパスにひたすら追記し続け、
それでは肥大化しすぎるのでlogrotateなどと組み合わせて適宜rotateしていく運用が一般的でしょう。
つまり、ログファイルをrenameし、ApacheやRailsなどにsignalで再起動して新しいファイルに書くわけです。

ところで、Windowsは誰かが開いているファイルをrenameすることはできないので通常このようなことは出来ません。
やるにはファイルを開く際のCreateFileFILE_SHARE_DELETEフラッグをつけてやる必要があります。
そんなことやってる人いるのかというご指摘もあるとは思いますが、やる人はやっているようです。
https://issues.apache.org/jira/browse/HADOOP-8564

さて、RubyのWindowsのopen(2)ラッパー、rb_w32_open/rb_w32_wopenはテキストモードの場合は_open/_wopenを使っており、
これはおいておくとして、バイナリモードの場合はCreateFileを使っているものの現状FILE_SHARE_DELETEは渡していないので、
なんらかの手段でFILE_SHARE_DELETEを付けられるようになりませんか。


Files

share_delete.patch (2.9 KB) share_delete.patch usa (Usaku NAKAMURA), 06/04/2015 10:42 AM

Related issues

Related to Ruby master - Feature #11583: Add File#unlinkOpenActions

Associated revisions

Revision 2bc28020
Added by usa (Usaku NAKAMURA) about 4 years ago

  • file.c (File::SHARE_DELETE): new flag to be able to delete opened file
    on Windows.

  • include/win32/win32.c (O_SHARE_DELETE): new pseudo file mode flag.

  • win32/win32.c (rb_w32_{w,}open): support above flag. [EXPERIMENTAL]

  • NEWS: mention about this feature.
    [Feature #11218] [ruby-dev:49022]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50848 b2dd03c8-39d4-4d8f-98ff-823fe69b080e

Revision 50848
Added by usa (Usaku NAKAMURA) about 4 years ago

  • file.c (File::SHARE_DELETE): new flag to be able to delete opened file
    on Windows.

  • include/win32/win32.c (O_SHARE_DELETE): new pseudo file mode flag.

  • win32/win32.c (rb_w32_{w,}open): support above flag. [EXPERIMENTAL]

  • NEWS: mention about this feature.
    [Feature #11218] [ruby-dev:49022]

Revision 50848
Added by usa (Usaku NAKAMURA) about 4 years ago

  • file.c (File::SHARE_DELETE): new flag to be able to delete opened file
    on Windows.

  • include/win32/win32.c (O_SHARE_DELETE): new pseudo file mode flag.

  • win32/win32.c (rb_w32_{w,}open): support above flag. [EXPERIMENTAL]

  • NEWS: mention about this feature.
    [Feature #11218] [ruby-dev:49022]

Revision 50848
Added by usa (Usaku NAKAMURA) about 4 years ago

  • file.c (File::SHARE_DELETE): new flag to be able to delete opened file
    on Windows.

  • include/win32/win32.c (O_SHARE_DELETE): new pseudo file mode flag.

  • win32/win32.c (rb_w32_{w,}open): support above flag. [EXPERIMENTAL]

  • NEWS: mention about this feature.
    [Feature #11218] [ruby-dev:49022]

Revision 50848
Added by usa (Usaku NAKAMURA) about 4 years ago

  • file.c (File::SHARE_DELETE): new flag to be able to delete opened file
    on Windows.

  • include/win32/win32.c (O_SHARE_DELETE): new pseudo file mode flag.

  • win32/win32.c (rb_w32_{w,}open): support above flag. [EXPERIMENTAL]

  • NEWS: mention about this feature.
    [Feature #11218] [ruby-dev:49022]

Revision 50848
Added by usa (Usaku NAKAMURA) about 4 years ago

  • file.c (File::SHARE_DELETE): new flag to be able to delete opened file
    on Windows.

  • include/win32/win32.c (O_SHARE_DELETE): new pseudo file mode flag.

  • win32/win32.c (rb_w32_{w,}open): support above flag. [EXPERIMENTAL]

  • NEWS: mention about this feature.
    [Feature #11218] [ruby-dev:49022]

History

Updated by usa (Usaku NAKAMURA) about 4 years ago

openにそういうオプション引数を追加するのが早いでしょうね。

ちなみに、rubyがrb_w32_(w)openをテキストモードで呼び出すのはかなりレアケースのはずです(ぼくにはすぐにはやり方が思いつかないレベル)。

Updated by usa (Usaku NAKAMURA) about 4 years ago

Usaku NAKAMURA wrote:

ちなみに、rubyがrb_w32_(w)openをテキストモードで呼び出すのはかなりレアケースのはずです(ぼくにはすぐにはやり方が思いつかないレベル)。

あ、ごめんなさい、嘘でした。(バイナリモードでオープンしない限りテキストモードで呼んでた。あれー?)

お詫びの印にパッチつけときます。

Updated by nobu (Nobuyoshi Nakada) about 4 years ago

  • Description updated (diff)

Updated by matz (Yukihiro Matsumoto) about 4 years ago

追加OKです。シンボルで指定するよりはFile::SHARE_DELETE(UNIXでは0)で指定したほうが良さそうな気がします。
シンボル指定を残すかどうかはお任せします。

Matz.

#5

Updated by usa (Usaku NAKAMURA) about 4 years ago

  • Status changed from Open to Closed

Applied in changeset r50848.


  • file.c (File::SHARE_DELETE): new flag to be able to delete opened file
    on Windows.

  • include/win32/win32.c (O_SHARE_DELETE): new pseudo file mode flag.

  • win32/win32.c (rb_w32_{w,}open): support above flag. [EXPERIMENTAL]

  • NEWS: mention about this feature.
    [Feature #11218] [ruby-dev:49022]

Updated by usa (Usaku NAKAMURA) about 4 years ago

File::SHARE_DELETE で入れました。
シンボルによる指定は、自分でもいまいちだと思っていたのでオミットしています。

#7

Updated by nobu (Nobuyoshi Nakada) almost 4 years ago

Also available in: Atom PDF