夏時間を変更すると一部のBPTアクティビティが処理されなくなる可能性がある
概要
OutSystemsは、夏時間の切り替え時に表面化する潜在的に重大なバグを特定しました。これにより、OutSystemsプラットフォームで一部のBPTアクティビティを処理できなくなる可能性があります。深刻な場合、BPTシステムが完全にロックダウンして、アクティビティをまったく処理できなくなる可能性があります。
この問題は、存在していない時刻に実行がスケジュールされていたアクティビティは決して開始されないにもかかわらず、実行スケジュールが設定されたままになるというものです。さらに深刻な場合、BPTシステムはこれらのアクティビティを実行しようとするのみであり、その他のアクティビティを開始することができなくなることがあります。
これによりアクティビティの実行に遅延が発生しますが、繰り返されないため、データの破損は発生しないと考えられています。
影響を受けるスタックとバージョン
.NET: このスタックは問題の影響を受けます。
Java: このスタックは問題の影響を受けません。
クラウド: デフォルトのクラウド構成ではUTCを使用するため、この問題の影響を受けません。インフラのタイムゾーンの変更をリクエストしたユーザーがBPT機能を使用している場合は、この問題の影響を受ける可能性があります。
バージョン:
- 7.0.1.25+
- 8.0.1.8+
- 9.0(すべてのバージョン)
- 9.1(すべてのバージョン)
この問題の影響を受けるかどうかを確認する方法
[Service Center > Monitoring > Environment Health]に移動したときに保留中アクティビティがない場合、問題は発生していません。
しかし、保留中アクティビティが絶えず表示される場合は、この問題の影響を受けている可能性があります。
影響を受けているかどうかを確認するには、OutSystemsプラットフォームのデータベースで以下のクエリを実行し、結果が返されるかどうかを確認します。なお、関連するタイムゾーンに合わせて日付を調整する必要があります。
SELECT OSSYS_ESPACE.NAME ESPACE_NAME, OSSYS_TENANT.NAME TENANT_NAME, OSSYS_BPM_PROCESS_DEFINITION.NAME PROCESS_NAME, OSSYS_BPM_ACTIVITY_DEFINITION.NAME ACTIVITY_NAME, OSSYS_BPM_ACTIVITY.ID ACTIVITY_ID, OSSYS_BPM_ACTIVITY.PROCESS_ID, OSSYS_BPM_ACTIVITY.NEXT_RUN FROM OSSYS_BPM_ACTIVITY INNER JOIN OSSYS_BPM_PROCESS ON OSSYS_BPM_PROCESS.ID = OSSYS_BPM_ACTIVITY.PROCESS_ID INNER JOIN OSSYS_BPM_ACTIVITY_DEFINITION ON OSSYS_BPM_ACTIVITY_DEFINITION.ID = OSSYS_BPM_ACTIVITY.ACTIVITY_DEF_ID AND OSSYS_BPM_ACTIVITY_DEFINITION.IS_ACTIVE = 1 INNER JOIN OSSYS_BPM_PROCESS_DEFINITION ON OSSYS_BPM_PROCESS_DEFINITION.ID = OSSYS_BPM_ACTIVITY_DEFINITION.PROCESS_DEF_ID AND OSSYS_BPM_PROCESS_DEFINITION.IS_ACTIVE = 1 AND OSSYS_BPM_PROCESS_DEFINITION.IS_LOCKED = 0 INNER JOIN OSSYS_ESPACE ON OSSYS_ESPACE.ID = OSSYS_BPM_PROCESS_DEFINITION.ESPACE_ID AND OSSYS_ESPACE.IS_ACTIVE = 1 AND OSSYS_ESPACE.IS_LOCKED = 0 INNER JOIN OSSYS_TENANT ON OSSYS_TENANT.ID = OSSYS_BPM_PROCESS.TENANT_ID AND OSSYS_TENANT.IS_ACTIVE = 1 WHERE (IS_RUNNING_SINCE IS NULL OR IS_RUNNING_SINCE = '1900-01-01 00:00:00') AND (NEXT_RUN IS NOT NULL AND NEXT_RUN <> '1900-01-01 00:00:00' AND NEXT_RUN <= GETDATE()) AND OSSYS_BPM_ACTIVITY.STATUS_ID NOT IN (5, 11, 12, 13) AND OSSYS_BPM_PROCESS.STATUS_ID NOT IN (2, 4, 5) -- 該当するタイムゾーンの存在していない時刻に置き換えます。GMTの例です。AND NEXT_RUN BETWEEN '2016-03-27 01:00:00' AND '2016-03-27 02:00:00' ORDER BY NEXT_RUN ASC
影響を受ける場合の解決策
この問題の影響を受ける場合は、夏時間で存在していない時刻以外にアクティビティが実行されるように、スケジュールを設定する必要があります。そのためには、以下のクエリを実行します。
update ossys_bpm_activity set next_run = getdate() where next_run between '<開始日>' and '<終了日>'
何らかの理由でこれらのアクティビティを今後処理しない場合は、「この問題の影響を受けるかどうかを確認する方法」セクションのクエリの情報を使用して問題のアクティビティが含まれるプロセスを特定し、Service Centerでターミネートすることができます。また、この状態のプロセスが大量にあり、Service Centerでこれらをターミネートすることが現実的ではない場合は、BPT APIを使用することができます。
OutSystemsの次のステップ
- この問題は、問題の影響を受けているすべてのクラウドユーザーに向けに修正されます。
- OutSystemsでは、現在サポートされているOutSystemsプラットフォームのすべてのバージョン(8.0、9.0、9.1)について、この問題を修正する作業を進めています。
修正が提供される時期を確認するには、欠陥ID #1188860の変更ログをご覧ください。
この改定バージョンが提供され次第、すべてのユーザーが更新することを推奨します。
OutSystemsは、プラットフォーム7(7.0.1.25)を実行するユーザー向けの修正は公開しません。これらのユーザーについては、上記の回避策により正常な動作に戻すことができます。今後この問題が発生しないようにするため、サポート対象バージョンへのアップグレードを計画することを推奨します。
最終注記
この問題に関してさらに質問がある場合は、通常の方法でOutSystems Supportまでお気軽にお問い合わせください。