ODCのTimerとO11のTimerの相違点

ODCのTimerは、OutSystems 11と比べていくつかの点で相違点があるようなので、主にドキュメントからまとめてみる。

:::note info
2024/07/07時点では、まだ[OutSystems Training Catalog | OutSystems](https://learn.outsystems.com/training/catalog)にはODCのTimerを説明したものは無さそう
:::

# 相違点まとめ
|  | O11 | ODC | 備考 |
|:-:|:-:|:-:|:-:|
| 動作する場所  | Front-endサーバー  | Timer専用の独立したコンテナ |   |
| 制御  | Schedulerサービス  | スケジュールによる実行はコンテナ基盤<br>リクエストによる実行はTimer managerサービス | リクエストによる実行はWake ActionかODC Portalで  |
| メタデータ  | (System)の下にあるEntity  | 一部はTimerのコンテナ。それ以外はODC Portal  |   |
| ログ  | テーブルで管理。Service Centerでも閲覧可能。クラウドならログストリーミングもある  | ODC Portalで閲覧のみ  | ODCのログストリーミングは当初発表時にはあったが未リリース（2024/07/07時点）  |
| エラー時のリトライ回数  | デフォルト3回（Service Centerで変更可能）  | リトライ回数は3回（変更不可能）  |   |
| Timeout  | デフォルト20分。上限については特に記載がない。  | デフォルト20分。上限60分。  |   |
| 同時実行可能なTimer数  | Front-end毎にデフォルト3回。変更するのは、Configuration Tool  | 記載なし  | Timer毎に別コンテナなら制限する理由もないはずだが……  |

# 動作する場所
## O11
Front-end Server上で動作する。
いくつかのドキュメントで裏付けを取れるが、例えば[Timer > How Timers are executed - OutSystems 11 Documentation](https://success.outsystems.com/documentation/11/reference/outsystems_language/processes/timer/#how-timers-are-executed)に

> The Web Service checks first whether the Timer is already executing in any Front-end Server node. 

とあることから、TimerはFront-endの上で動作することがわかる。

## ODC
Timer専用の独立したコンテナが作られ、そこで動作する。
[Use Timers > How Timers work - ODC Documentation](https://success.outsystems.com/documentation/outsystems_developer_cloud/building_apps/use_timers/#how-timers-work)

> When you first publish an application, ODC creates a background job and the associated container resources for each timer.

# 制御
## O11
動作する場所 > O11のセクションで示したリンクに、Timer動作のアーキテクチャを示した図がある。
この図から明らかに（また、ドキュメント中で何度か言及もあるように）Schedulerサービスが、Timerの実行を制御している。

Schedulerサービスとは、OutSystems 11のPlatform Serverをインストールする際に選択するロールの1つで、Timer・BPT・メール送信の役割を担う。通常はFront-endロールを配置したサーバーではデフォルトで有効。

## ODC
スケジュールによる実行はコンテナ基盤によって、リクエストによる実行はTimer managerサービスによって実行される。

[Use Timers > How Timers work - ODC Documentation](https://success.outsystems.com/documentation/outsystems_developer_cloud/building_apps/use_timers/#how-timers-work)
> The container infrastructure triggers the background jobs that have the schedule type of scheduled. The Timer manager service triggers jobs that have the schedule type of on-demand.

# メタデータ
## O11
https://qiita.com/jyunji_watanabe/items/71557153b93d7b3e3bfb

に書いた通り、(System)の下にあるEntityでTimerのメタデータやスケジュールを管理しており、プログラムからもアクセスできる（変更は一部の属性のみ可能）。

## ODC
一部の情報は、Timer用に作られるコンテナ内で管理されるようす。
[Use Timers > How Timers work - ODC Documentation](https://success.outsystems.com/documentation/outsystems_developer_cloud/building_apps/use_timers/#how-timers-work)

> Timers schedule
Timer type (scheduled or on demand)
Startup date
Status of other control properties

（順に、スケジュール、Timerの種類、開始日、ステータス）

これ以外は必要なら、ODC Portalで見ることになるか。

# ログ
## O11
テーブルで管理されている。

https://qiita.com/jyunji_watanabe/items/f7eb9912eb927874fba6

に以前書いた。Platform LogsやLogs Manager (Forgeコンポーネント）経由でアクセス可能。
もちろん、Servcice Centerでの検索も可能。

https://blog.house-soft.info/archives/2210

に書いたように、比較的最近になってログストリーミング機能もリリースされている（クラウド）。

## ODC
Entityは公開されていない。ODC PortalのLogs, Tracesでの閲覧。
2024/07/07時点ではログストリーミングは未リリース。

# エラー時のリトライ回数
## O11
デフォルト3回。Service Centerで変更可能。
[Timer > Retrying after an execution error - OutSystems 11 Documentation](https://success.outsystems.com/documentation/11/reference/outsystems_language/processes/timer/#retrying-after-an-execution-error)に記載がある。

> Whenever a Timer has an execution error, OutSystems may execute the Timer again for a number of retries. You can set this number of retries in Service Center, in the Environment Configuration screen, under the Administration folder. By default, it's set to 3 retries.

## ODC
リトライ回数は3回。構成不可能。
[Use Timers > Timers timeout - ODC Documentation](https://success.outsystems.com/documentation/outsystems_developer_cloud/building_apps/use_timers/#timers-timeout)に記載がある。

> ...This is an error. The timer tries to execute three more times. The number of retries isn't configurable.

# Timeout
指定分数が経過すると、Timer実行が例外になる。
## O11
デフォルト20分。上限については特に記載がない。

## ODC
デフォルト20分。上限60分。

[OutSystems system requirements for ODC > Timers timeout - ODC Documentation](https://success.outsystems.com/documentation/outsystems_developer_cloud/getting_started/outsystems_system_requirements_for_odc/#timers-timeout)

> The maximum value of the Timeout in Minutes property is 60 minutes.

# 同時実行可能なTimer数
## O11
Front-end毎にデフォルト3回。変更するのは、Configuration Tool（インストール用ソフトウェア）。

[Timer > Architecture - OutSystems 11 Documentation](https://success.outsystems.com/documentation/11/reference/outsystems_language/processes/timer/#architecture)の表中で、Configuration Toolの説明として、以下の記載がある。

> This is the tool that allows configuring the maximum number of Timers that may execute at the same time in each front-end server node.

## ODC
ドキュメントには記載が見当たらない。
ただし、上で見たように、Timer1つ毎に別コンテナならば、この制約を課す必要はないはず。

なぜなら、O11のときにこの制約があったのは、[Using Timers > How Timers Are Handled - OutSystems 11 Documentation](https://success.outsystems.com/documentation/11/building_apps/using_timers/#how-timers-are-handled)に以下のように記載されている通り、Front-endサーバーのリソース使いすぎを防ぐためなので。

> Since Timers usually invoke actions that take a while to run and are processor intensive, the OutSystems Scheduler Service only runs a fixed number of Timers at the same time. By default only three Timers can run at the same time per front-end server.