LoginSignup
6
5

More than 5 years have passed since last update.

digdagのschedule機能について調査メモ

Last updated at Posted at 2017-07-21

以下のようなprojectを作る。

$ tree
.
└── test.dig

あらかじめserverを起動しておく。

$ digdag server --memory
2017-07-21 15:26:52 +0900: Digdag v0.9.13
2017-07-21 15:26:53 +0900 [INFO] (main): secret encryption engine: disabled
2017-07-21 15:26:54 +0900 [INFO] (main): XNIO version 3.3.6.Final
2017-07-21 15:26:54 +0900 [INFO] (main): XNIO NIO Implementation Version 3.3.6.Final
2017-07-21 15:26:54 +0900 [INFO] (main): Starting server on 127.0.0.1:65432
2017-07-21 15:26:54 +0900 [INFO] (main): Bound on 127.0.0.1:65432 (api)

schedule:を指定しないworkflowの場合

test.dig
timezone: Asia/Tokyo

_export:
  A: 1000
  B: 2000

+echo_A:
  echo>: ${A}

+echo_B:
  echo>: ${B}

test-projectとしてpushする。

$ digdag push test-project
2017-07-21 15:43:41 +0900: Digdag v0.9.13
Creating .digdag/tmp/archive-227388074632667374.tar.gz...
  Archiving test.dig
Workflows:
  test.dig
Uploaded:
  id: 1
  name: test-project
  revision: 875fbaa9-eddd-4ae7-a424-76d591655b87
  archive type: db
  project created at: 2017-07-21T06:43:43Z
  revision updated at: 2017-07-21T06:43:43Z

Use `digdag workflows` to show all workflows.

workflow一覧を見てみる。
test-projectがproject名、testがworkflow名(.digファイルの名前と同じ)である。

$ digdag workflows
2017-07-21 15:45:04 +0900: Digdag v0.9.13
  test-project
    test

Use `digdag workflows <project-name> <name>` to show details.

schedule一覧を見てみる。
登録が無い。

$ digdag schedules
2017-07-21 15:45:23 +0900: Digdag v0.9.13
Schedules:
0 entries.
Use `digdag workflows [project-name] [workflow-name]` to show workflow details.

--session hourlyとしてstartしてみる。

$ digdag start test-project test --session hourly
2017-07-21 15:45:54 +0900: Digdag v0.9.13
Started a session attempt:
  session id: 1
  attempt id: 1
  uuid: 5e3ee879-d376-404f-81af-ab67c53d7e93
  project: test-project
  workflow: test
  session time: 2017-07-21 15:00:00 +0900
  retry attempt name:
  params: {}
  created at: 2017-07-21 15:45:55 +0900

* Use `digdag session 1` to show session status.
* Use `digdag task 1` and `digdag log 1` to show task status and logs.

serverの出力は以下。

2017-07-21 15:45:56 +0900 [INFO] (0057@[0:test-project]+test+echo_A): echo>: 1000
1000
2017-07-21 15:45:57 +0900 [INFO] (0057@[0:test-project]+test+echo_B): echo>: 2000
2000

再度実行しても、当時間のsessionが既に存在するためスキップされる。

$ digdag start test-project test --session hourly
2017-07-21 15:47:11 +0900: Digdag v0.9.13
error: A session for the requested session_time already exists (session_id=1, attempt_id=1, session_time=2017-07-21T15:00+09:00)
hint: use `digdag retry 1 --latest-revision --all` command to run the session again for the samesession_time

start --session hourlyしたことでscheduleに登録されるのか?と思いつつ
再度schedule一覧を見てみるが、やはり登録は無い。

$ digdag schedules
2017-07-21 15:50:05 +0900: Digdag v0.9.13
Schedules:
0 entries.
Use `digdag workflows [project-name] [workflow-name]` to show workflow details.

結論

schedule一覧に載せるためにはschedule:をworkflow(=.digファイル)に指定する必要がある。
schedule:無しでpushしても定期実行はできない。

schedule:を指定したworkflowの場合

$ cat test.dig
timezone: Asia/Tokyo

schedule:
  hourly>: 55:00

_export:
  A: 1000
  B: 2000

+echo_A:
  echo>: ${A}

+echo_B:
  echo>: ${B}

pushする。

$ digdag push test-project
2017-07-21 15:54:28 +0900: Digdag v0.9.13
Creating .digdag/tmp/archive-2310627203464168029.tar.gz...
  Archiving test.dig
Workflows:
  test.dig
Uploaded:
  id: 1
  name: test-project
  revision: 002718e7-4a55-4e08-8f06-de4854d0ad70
  archive type: db
  project created at: 2017-07-21T06:54:30Z
  revision updated at: 2017-07-21T06:54:30Z

Use `digdag workflows` to show all workflows.

schedule一覧を見てみると、登録がある。
毎時55分に実行されるよう指定したので次回実行は15:55になっている。

$ digdag schedules
2017-07-21 15:54:34 +0900: Digdag v0.9.13
Schedules:
  id: 1
  project: test-project
  workflow: test
  disabled at:
  next session time: 2017-07-21 15:00:00 +0900
  next scheduled to run at: 2017-07-21 15:55:00 +0900 (in 25s)

1 entries.
Use `digdag workflows [project-name] [workflow-name]` to show workflow details.

15:55になったら自動で実行される。

2017-07-21 15:55:00 +0900 [INFO] (scheduler-0): Starting a new session project id=1 workflow name=test session_time=2017-07-21T15:00:00+09:00
2017-07-21 15:55:02 +0900 [INFO] (0050@[0:test-project]+test+echo_A): echo>: 1000
1000
2017-07-21 15:55:02 +0900 [INFO] (0050@[0:test-project]+test+echo_B): echo>: 2000
2000

再度schedule一覧を見てみると、次回実行が16:55に更新されている。

$ digdag schedules
2017-07-21 15:55:06 +0900: Digdag v0.9.13
Schedules:
  id: 1
  project: test-project
  workflow: test
  disabled at:
  next session time: 2017-07-21 16:00:00 +0900
  next scheduled to run at: 2017-07-21 16:55:00 +0900 (in 59m 52s)

1 entries.
Use `digdag workflows [project-name] [workflow-name]` to show workflow details.

結論

schedule:をworkflowに指定するとpushするだけでschedule一覧に登録される。

schedule:を指定しているが-pでパラメータ指定が必要な場合。

$ cat test.dig
timezone: Asia/Tokyo

schedule:
  hourly>: 05:00

_export:
  A: 1000
  B: 2000

+echo_A:
  echo>: ${A}

+echo_B:
  echo>: ${B}

+echo_C:
  echo>: ${C}

pushする。

$ digdag push test-project
2017-07-21 16:06:49 +0900: Digdag v0.9.13
Creating .digdag/tmp/archive-644867903567847050.tar.gz...
  Archiving test.dig
Workflows:
  test.dig
Uploaded:
  id: 1
  name: test-project
  revision: 14a36033-9bf5-48f3-a932-2a98b92fa40d
  archive type: db
  project created at: 2017-07-21T07:06:51Z
  revision updated at: 2017-07-21T07:06:51Z

Use `digdag workflows` to show all workflows.

scheduleに登録がある。次回実行は16:05にセットされている。

$ digdag schedules
2017-07-21 16:06:54 +0900: Digdag v0.9.13
Schedules:
  id: 1
  project: test-project
  workflow: test
  disabled at:
  next session time: 2017-07-21 16:00:00 +0900
  next scheduled to run at: 2017-07-21 16:08:00 +0900 (in 1m 4s)

1 entries.
Use `digdag workflows [project-name] [workflow-name]` to show workflow details.

しかし-p C=3000できないので定期実行はコケる。

2017-07-21 16:08:02 +0900 [INFO] (0050@[0:test-project]+test+echo_A): echo>: 1000
1000
2017-07-21 16:08:02 +0900 [INFO] (0050@[0:test-project]+test+echo_B): echo>: 2000
2000
2017-07-21 16:08:02 +0900 [ERROR] (0050@[0:test-project]+test+C): Configuration error at task +test+C: Failed to evaluate a variable ${C} (ReferenceError: "C" is not defined) (config)
2017-07-21 16:08:03 +0900 [INFO] (0050@[0:test-project]+test^failure-alert): type: notify

しかもretryしようとしてもretryコマンドは-pを受け付けないのでやはりコケる。

$ digdag retry 1 --latest-revision --resume -p C=3000
2017-07-21 16:10:22 +0900: Digdag v0.9.13
Started a session attempt:
  session id: 1
  attempt id: 4
  uuid: 3a81c73c-08cb-493b-8842-26a9c6595367
  project: test-project
  workflow: test
  session time: 2017-07-21 16:00:00 +0900
  retry attempt name: c4389ddd-97ac-408e-8f53-926115368cb0
  params: {"last_session_time":"2017-07-21T15:00:00+09:00","next_session_time":"2017-07-21T17:00:00+09:00"}
  created at: 2017-07-21 16:10:23 +0900

* Use `digdag session 1` to show session status.
* Use `digdag task 4` and `digdag log 4` to show task status and logs.
2017-07-21 16:10:13 +0900 [INFO] (XNIO-1 task-13): Starting a new session project id=1 workflow name=test session_time=2017-07-21T16:00:00+09:00
2017-07-21 16:10:14 +0900 [ERROR] (0069@[0:test-project]+test+C): Configuration error at task +test+C: Failed to evaluate a variable ${C} (ReferenceError: "C" is not defined) (config)
2017-07-21 16:10:23 +0900 [INFO] (XNIO-1 task-17): Starting a new session project id=1 workflow name=test session_time=2017-07-21T16:00:00+09:00
2017-07-21 16:10:23 +0900 [ERROR] (0069@[0:test-project]+test+C): Configuration error at task +test+C: Failed to evaluate a variable ${C} (ReferenceError: "C" is not defined) (config)

既存のsessionを消すためにserverを再起動して再度pushする。
hourly>: 20:00に変更。

$ digdag push test-project
2017-07-21 16:18:50 +0900: Digdag v0.9.13
Creating .digdag/tmp/archive-5989548799081272140.tar.gz...
  Archiving test.dig
Workflows:
  test.dig
Uploaded:
  id: 1
  name: test-project
  revision: 9d7c1996-00f8-4e96-b2b8-564bb3439c2f
  archive type: db
  project created at: 2017-07-21T07:18:52Z
  revision updated at: 2017-07-21T07:18:52Z

Use `digdag workflows` to show all workflows.

次回実行は16:20にセットされている。

$ digdag schedules
2017-07-21 16:18:55 +0900: Digdag v0.9.13
Schedules:
  id: 1
  project: test-project
  workflow: test
  disabled at:
  next session time: 2017-07-21 16:00:00 +0900
  next scheduled to run at: 2017-07-21 16:20:00 +0900 (in 1m 3s)

1 entries.
Use `digdag workflows [project-name] [workflow-name]` to show workflow details.

ここで、定期実行を待たずに-pでパラメータを指定してstartしてみる。
するとエラー無く実行され、paramsの情報が入ったsessionが作成される。

$ digdag start test-project test --session hourly -p C=3000
2017-07-21 16:19:26 +0900: Digdag v0.9.13
Started a session attempt:
  session id: 1
  attempt id: 1
  uuid: 184cd3b0-4fd1-4b7e-bd80-10078b2724ad
  project: test-project
  workflow: test
  session time: 2017-07-21 16:00:00 +0900
  retry attempt name:
  params: {"C":"3000","last_session_time":"2017-07-21T15:00:00+09:00","next_session_time":"2017-07-21T17:00:00+09:00"}
  created at: 2017-07-21 16:19:28 +0900

* Use `digdag session 1` to show session status.
* Use `digdag task 1` and `digdag log 1` to show task status and logs.
2017-07-21 16:19:28 +0900 [INFO] (XNIO-1 task-9): Starting a new session project id=1 workflow name=test session_time=2017-07-21T16:00:00+09:00
2017-07-21 16:19:29 +0900 [INFO] (0055@[0:test-project]+test+echo_A): echo>: 1000
1000
2017-07-21 16:19:30 +0900 [INFO] (0055@[0:test-project]+test+echo_B): echo>: 2000
2000
2017-07-21 16:19:30 +0900 [INFO] (0055@[0:test-project]+test+C): echo>: 3000
3000

ただし、-pで渡す値を変えてもsessionが存在すると言われ、実行できない。

$ digdag start test-project test --session hourly -p C=4000
2017-07-21 16:24:48 +0900: Digdag v0.9.13
error: A session for the requested session_time already exists (session_id=1, attempt_id=1, session_time=2017-07-21T16:00+09:00)
hint: use `digdag retry 1 --latest-revision --all` command to run the session again for the same session_time

結論

  • -pでパラメータの指定が必要なworkflowはpushするだけでは定期実行されず、startコマンドで-pを指定する必要がある。
  • ただし、-pで渡す値を変えて別々のsessionのような扱いにすることはできない。

所感

はじめは-pで渡す値を変え、それぞれを別々のworkflowのような扱いで定期実行させようとしていたが、-pで渡す値を変えても作成されるsessionは1つなので無理だということがわかった。

-p-Pは.digに直接定義するのが憚られるもの(例えばawsのsecret access keyのような機密情報的なもの)をコマンドラインorファイルから渡すようにするためのものなのかな。

-pなしだとpushするだけでscheduleに登録されるので、-pなしでworkflowを作成できると楽そうだ。

6
5
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
6
5