Embulk-plugin-input-pcapng-files書いた にコメント。
本来的にはinputプラグインではなくFile input内のparser/decoderプラグインとして造るべきでは?
その通りで、本来はparserプラグインでしょう。Java側にはParserプラグインを書くAPIがあるのですが、まだそれをJRubyで書く仕組みが無いのです。書きます。 (https://github.com/embulk/embulk/issues/33)
処理対象のファイル一覧→スレッドへの分配あたりを再開発してる感
ファイルを読み込むタイプのプラグインはスレッド数を考えなくても良くて、基本的にファイル数 = タスク数にすればOKです(example_input.rbがまぎらわしいかもしれませんが…)。なぜなら、設定ファイルのexec:のところにスレッド数を書けるからです。 pull-requestしたので、確認してみてください!: enukane/embulk-plugin-input-pcapng-files#1
input/output以外のプラグインがどの程度rubyで差し込みできるのかよく見えない. 要調査.
このあたりに、JavaからRubyのプラグインを呼べるようにしているコードがあります:
- Java側:https://github.com/embulk/embulk/blob/master/embulk-core/src/main/java/org/embulk/jruby/JRubyPluginSource.java#L36
- Ruby側:https://github.com/embulk/embulk/blob/master/lib/embulk/input_plugin.rb#L24
task to threadsのベストプラクティスが欲しい…
ファイルを読み込むタイプなら、ファイル数 = タスク数でOKだと思いますが、Parserプラグインではなく、FileInputPlugin側に実装されているべき機能でしょう…まだ無いです。
transactionとrunの間のデータ受け渡し, これでいいのかな感
OKです! オブジェクトの受け渡し部分が隠蔽されているのは、分散処理できるようにするためです。 transactionがrunを呼ぶ前に、間にexecutorが挟まっていて、executorはtaskをシリアライズ & デシリアライズしてから(さらに必要なら別のサーバに渡してから)runに渡しています。
ありがとうございます!なるほどなるほど。