Feature #11218
closedFile.open FILE_SHARE_DELETE
Description
fluentdという、OSSのログコレクタがあるのですが、これにはin_tail
プラグインというものがあります。
これは、ログファイルを監視して、ログがファイルに追記されたらその分を読み込んでJSONにして他に流します。
このログファイルはfluentdではない他の誰か、ApacheだったりRailsだったりします。
この手のログファイルを書いていく流儀はいくつかありますが、ご存じの通りRailsやApacheは基本的に特定のパスにひたすら追記し続け、
それでは肥大化しすぎるのでlogrotateなどと組み合わせて適宜rotateしていく運用が一般的でしょう。
つまり、ログファイルをrenameし、ApacheやRailsなどにsignalで再起動して新しいファイルに書くわけです。
ところで、Windowsは誰かが開いているファイルをrenameすることはできないので通常このようなことは出来ません。
やるにはファイルを開く際のCreateFile
にFILE_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
Updated by usa (Usaku NAKAMURA) over 9 years ago
openにそういうオプション引数を追加するのが早いでしょうね。
ちなみに、rubyがrb_w32_(w)openをテキストモードで呼び出すのはかなりレアケースのはずです(ぼくにはすぐにはやり方が思いつかないレベル)。
Updated by usa (Usaku NAKAMURA) over 9 years ago
- File share_delete.patch share_delete.patch added
Usaku NAKAMURA wrote:
ちなみに、rubyがrb_w32_(w)openをテキストモードで呼び出すのはかなりレアケースのはずです(ぼくにはすぐにはやり方が思いつかないレベル)。
あ、ごめんなさい、嘘でした。(バイナリモードでオープンしない限りテキストモードで呼んでた。あれー?)
お詫びの印にパッチつけときます。
Updated by nobu (Nobuyoshi Nakada) over 9 years ago
- Description updated (diff)
Updated by matz (Yukihiro Matsumoto) over 9 years ago
追加OKです。シンボルで指定するよりはFile::SHARE_DELETE(UNIXでは0)で指定したほうが良さそうな気がします。
シンボル指定を残すかどうかはお任せします。
Matz.
Updated by usa (Usaku NAKAMURA) over 9 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) over 9 years ago
File::SHARE_DELETE で入れました。
シンボルによる指定は、自分でもいまいちだと思っていたのでオミットしています。
Updated by nobu (Nobuyoshi Nakada) about 9 years ago
- Related to Feature #11583: Add File#unlink added