DataSpiderのファイルトリガーは、監視ファイルの新規作成、更新、削除イベント発生時にスクリプトを実行するトリガー機能です。
今回、その中の新規作成のファイルトリガーで想定外に発火しないパターンがあったので備忘録としてメモに残します。
DataSpiderのファイルトリガーについては公式ページを参照してください。
発生した事象
発生した環境はWindowsサーバーです。
ファイルトリガーの監視イベントは「ファイルの新規作成」を使用していました。それ以外のオプションはデフォルト設定です。
プログラムから出力されるトリガーファイルの新規作成をキャッチし、処理を実行、ファイルを削除するという仕組みを構築していました。
DataSpiderでは10秒ごとに監視を行い、ファイルをチェックしていますが、2回の監視ポイントで同名のファイルが存在した場合、2回目の監視でイベントをキャッチしないという事象が発生しました。
具体的には下記のような動きです。
ファイル作成(1回目)、DataSpider監視(1回目、処理する)、ファイル作成(2回目)、DataSpider監視(2回目、処理しない)
DataSpider監視の1回目と2回目は連続した監視感覚なのでつまり、最長20秒以内で同名のファイルが2回作成された場合、2回目のファイルトリガーが発火しない可能性があるということです。
事象発生の理由(推測)
このファイルトリガーの使用制限として、「監視間隔で指定した秒数以内に複数のイベントが発生した場合、変化を検知できない場合がある」とされています。
ただし、今回の事象だけ見ると、この使用制限とは別物のようです。異なる監視間隔であってもファイルの新規作成を検知できていないからです。
私の推測になりますが、1回目の監視の際ファイルを処理して、そのファイルが削除され、2回目の監視の前に同名のファイルが作成されたので、DataSpiderが1回目の監視で感知したファイルがそのまま残っていたと勘違いしたのではないかと考えます。
DataSpiderの中身の仕様は分かりませんが、ファイル名のみでファイルの新規作成を感知する仕組みの場合この事象が発生します。
解消方法
解消方法として3つほど考えました。
(案1)短い間隔でファイルを出力させない:トリガーファイルを出力するプログラムを変更して、ファイル出力は一定間隔(今回の場合20秒)を空けるような制御を加えます。
(案2)トリガーファイル名を変更する:トリガーファイルにタイムスタンプを付与するなど、ファイル名をユニークにすることで事象を回避することができると考えます。
(案3)DataSpiderの取りこぼしを検知する仕組みを導入する:今回の場合、事象が発生するとトリガーファイルが削除されずに残り続けます。そのファイルを別のバッチでキャッチアップし、アラートを発砲したり、ファイルを削除することで対応が可能となります。
最後に
この件について、メーカーに問い合わせをしたり、詳細を調査したわけではありませんが、もし同じ状況になった方がいれば参考になるかと思い記事を作成しました。
DataSpiderは複数のシステムを組み合わせる場合に汎用性が高くとても便利ですね。