LoginSignup
3
3

More than 3 years have passed since last update.

Digdag の td_wait>: を Timeout させる

Last updated at Posted at 2019-06-25

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 するシェルを呼び出すワークフロー。

sample_timeout.dig
sla:
  duration: 00:60:00
  fail: true
  +kill_task:
    sh>: /bin/sh kill_task.sh ${session_id}

タスクを kill するシェルスクリプト

元ネタを grep, xargs, cut とかを駆使してリファクタリングした結果こうなった。

kill_task.sh
#!/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

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3