td_wait>:
には Timeout させるようなオプションがないので自分で実装する必要がある。下記は TreasureData に問い合わせたときの回答。
`td_wait>` には現状timeout機能がないため、設定に因るKILLは残念ながらできません。
(1タスクあたりの最大実行時間を24時間と設定しておりますため、24時間実行され続ける場合は自動的にKILL、エラーとなります)
おっしゃる通りshなどのスクリプト系オペレーターが利用できるdigdagサーバーでは digdagコマンドや下記digdagのAPIから操作することでWorkflow自体のKILL対応は可能と思います。
https://github.com/treasure-data/digdag/blob/f225a5c89e10e802c3d2e41e3df62996f4aacc0f/digdag-client/src/main/java/io/digdag/client/DigdagClient.java
ただその場合ポーリングされたTreasure DataのジョブはKILLされませんので、別途KILLするなども考慮頂く必要があるかもしれません。
ということで、下記のような感じで、 sla
とシェルスクリプトを組み合わせて頑張った。
Sample Workflow
60min を超えた場合に session_id
を指定してタスクを kill するシェルを呼び出すワークフロー。
sla:
duration: 00:60:00
fail: true
+kill_task:
sh>: /bin/sh kill_task.sh ${session_id}
タスクを kill するシェルスクリプト
元ネタを grep, xargs, cut とかを駆使してリファクタリングした結果こうなった。
#!/bin/bash
set -e
session_id=$1
attempts=$(digdag attempts $session_id | grep -E "attempt id:|status" | xargs -L 2 | grep running | cut -d " " -f 3)
for attempt_id in $attempts; do
digdag kill $attempt_id
echo Killed the task. Attempt id is $attempt_id.
done