GS2-Schedule トランザクションアクション
アクションの組み合わせと同時実行
すべてのサービスに共通する前提は トランザクションアクションの組み合わせ にまとめています。先にそちらを読んでください。この節の残りは GS2-Schedule 固有の内容です。
GS2-Schedule のトランザクションアクションは、ネームスペース・ユーザー・トリガー名の組で決まる 1 つのトリガーを対象にします。トリガーは更新のたびに全体が書き換わります。
| 操作 | 同じ行を重ねたとき | 入れ子越し | 別の対象になる境界 |
|---|---|---|---|
トリガーを引くTriggerByUserId | 1 件に統合される | 失敗する | ネームスペース・ユーザー・トリガー名 |
トリガーの延長ExtendTriggerByUserId | 統合され、秒数が合算される | 失敗する | ネームスペース・ユーザー・トリガー名 |
トリガーの削除DeleteTriggerByUserId | 1 件に統合される | 失敗する | ネームスペース・ユーザー・トリガー名 |
トリガーの検証VerifyTriggerByUserId | 先勝ち | 読み取りだけなので衝突しない | トリガー・検証タイプ・経過時間 |
イベントの検証VerifyEventByUserId | 先勝ち | 読み取りだけなので衝突しない | イベント・検証タイプ・ユーザー |
引く・延長する・削除するは 3 つの異なる行で、境界が同じです。このうち 2 つを 1 つのトリガーに対して指定すると衝突します。トリガーを引いてから延長したいという要求はよくありますが、これにはトランザクションが 2 つ必要です。延長はトランザクション開始時点の状態から動くため、同じトランザクションが引いたトリガーが見えていないからです。
検証アクションはトランザクション開始時点の状態を見ます。同じトランザクションで引いたトリガーや、削除したトリガーを検証することはできません。
イベントが開催中かどうかは時間オフセットに依存し、オフセットはユーザーごとなので、イベントの検証はユーザーごとに別の対象になります。
入れ子になったトランザクションに注意
トリガーは全体が書き換わるため、内側から引かれたトリガーと、外側から延長または削除された同じトリガーが衝突して、トランザクションが失敗します。
制限を回避したい場合
トリガーを引く・延長するは入手アクション、削除は消費アクションです。引くと延長の衝突は acquireActionUseJobQueue を有効にすれば解消できますが、削除との同居は enableAtomicCommit を無効にしないと解消しません。
同時実行とリトライ
トリガーはリビジョンの照合を伴って全体が書き換わるため、同じトリガーを複数のリクエストが同時に更新すると、後から確定した側がコンフリクト (409) になります。リクエストの内容に問題があるわけではないので、リトライすれば成功します。
トリガー名が違えば別の対象なので、違うトリガーへのリクエストどうしはコンフリクトしません。
Verify Action
検証アクション
Gs2Schedule:VerifyTriggerByUserId
ユーザーIDを指定してトリガーが引かれてからの経過時間を検証
指定したユーザーのトリガーの状態に関する条件を検証します。verifyType は ’notTriggerd’、’elapsed’、’notElapsed’ を設定できます。検証条件が満たされない場合はエラーを返します。
数量指定可能なアクション:いいえ
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||||||||||
| userId | string | ✓ | ~ 128文字 | ユーザーID#{userId} と設定することでログイン中のユーザーIDに置換されます。 | ||||||||||
| triggerName | string | ✓ | ~ 128文字 | トリガー名 トリガー固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||||||||||
| verifyType | 文字列列挙型 enum { “notTriggerd”, “elapsed”, “notElapsed” } | ✓ | 検証の種類
| |||||||||||
| elapsedMinutes | int | {verifyType} in [“elapsed”, “notElapsed”] | ✓※ | 0 ~ 2147483646 | 経過時間(分) ※ verifyType が “elapsed”,“notElapsed"であれば 必須 | |||||||||
| timeOffsetToken | string | ~ 1024文字 | タイムオフセットトークン |
{
"action": "Gs2Schedule:VerifyTriggerByUserId",
"request": {
"namespaceName": "[string]ネームスペース名",
"userId": "[string]ユーザーID",
"triggerName": "[string]トリガー名",
"verifyType": "[string]検証の種類",
"elapsedMinutes": "[int]経過時間(分)",
"timeOffsetToken": "[string]タイムオフセットトークン"
}
}action: Gs2Schedule:VerifyTriggerByUserId
request:
namespaceName: "[string]ネームスペース名"
userId: "[string]ユーザーID"
triggerName: "[string]トリガー名"
verifyType: "[string]検証の種類"
elapsedMinutes: "[int]経過時間(分)"
timeOffsetToken: "[string]タイムオフセットトークン"transaction.service("schedule").verify.verify_trigger_by_user_id({
namespaceName="[string]ネームスペース名",
userId="[string]ユーザーID",
triggerName="[string]トリガー名",
verifyType="[string]検証の種類",
elapsedMinutes="[int]経過時間(分)",
timeOffsetToken="[string]タイムオフセットトークン",
})Gs2Schedule:VerifyEventByUserId
ユーザーIDを指定してイベントの開催期間であるかを検証
指定したユーザーにおいて、指定されたイベントが現在アクティブなスケジュール期間内であるかを検証します。verifyType は ‘inSchedule’ または ’notInSchedule’ を設定できます。検証条件が満たされない場合はエラーを返します。
数量指定可能なアクション:いいえ
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||||||||
| userId | string | ✓ | ~ 128文字 | ユーザーID#{userId} と設定することでログイン中のユーザーIDに置換されます。 | ||||||||
| eventName | string | ✓ | ~ 128文字 | イベント名 イベント固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||||||||
| verifyType | 文字列列挙型 enum { “inSchedule”, “notInSchedule” } | ✓ | 検証の種類
| |||||||||
| timeOffsetToken | string | ~ 1024文字 | タイムオフセットトークン |
{
"action": "Gs2Schedule:VerifyEventByUserId",
"request": {
"namespaceName": "[string]ネームスペース名",
"userId": "[string]ユーザーID",
"eventName": "[string]イベント名",
"verifyType": "[string]検証の種類",
"timeOffsetToken": "[string]タイムオフセットトークン"
}
}action: Gs2Schedule:VerifyEventByUserId
request:
namespaceName: "[string]ネームスペース名"
userId: "[string]ユーザーID"
eventName: "[string]イベント名"
verifyType: "[string]検証の種類"
timeOffsetToken: "[string]タイムオフセットトークン"transaction.service("schedule").verify.verify_event_by_user_id({
namespaceName="[string]ネームスペース名",
userId="[string]ユーザーID",
eventName="[string]イベント名",
verifyType="[string]検証の種類",
timeOffsetToken="[string]タイムオフセットトークン",
})Consume Action
消費アクション
Gs2Schedule:DeleteTriggerByUserId
ユーザーIDを指定してトリガーを削除
指定したユーザーの指定されたトリガーを削除します。トリガーを削除すると、関連する相対スケジュールイベントが無効化されます。
数量指定可能なアクション:いいえ
反転可能なアクション:いいえ
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||
| userId | string | ✓ | ~ 128文字 | ユーザーID#{userId} と設定することでログイン中のユーザーIDに置換されます。 | ||
| triggerName | string | ✓ | ~ 128文字 | トリガー名 トリガー固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||
| timeOffsetToken | string | ~ 1024文字 | タイムオフセットトークン |
{
"action": "Gs2Schedule:DeleteTriggerByUserId",
"request": {
"namespaceName": "[string]ネームスペース名",
"userId": "[string]ユーザーID",
"triggerName": "[string]トリガー名",
"timeOffsetToken": "[string]タイムオフセットトークン"
}
}action: Gs2Schedule:DeleteTriggerByUserId
request:
namespaceName: "[string]ネームスペース名"
userId: "[string]ユーザーID"
triggerName: "[string]トリガー名"
timeOffsetToken: "[string]タイムオフセットトークン"transaction.service("schedule").consume.delete_trigger_by_user_id({
namespaceName="[string]ネームスペース名",
userId="[string]ユーザーID",
triggerName="[string]トリガー名",
timeOffsetToken="[string]タイムオフセットトークン",
})Acquire Action
入手アクション
Gs2Schedule:TriggerByUserId
ユーザーIDを指定してトリガーを実行
指定したユーザーのトリガーを引きます。トリガー戦略により動作が決まります:‘renew’ は新しいTTLでリセット、’extend’ は既存のTTLを延長、‘drop’ は既に引かれている場合は無視、‘repeatCycleEnd’/‘repeatCycleNextStart’/‘absoluteEnd’ は指定したイベントのスケジュールに有効期限を合わせます。トリガーを引くと関連する相対スケジュールイベントが有効化されます。
数量指定可能なアクション:いいえ
反転可能なアクション:はい
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||||||||||||||||
| triggerName | string | ✓ | ~ 128文字 | トリガー名 トリガー固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||||||||||||||||
| userId | string | ✓ | ~ 128文字 | ユーザーID#{userId} と設定することでログイン中のユーザーIDに置換されます。 | ||||||||||||||||
| triggerStrategy | 文字列列挙型 enum { “renew”, “extend”, “drop”, “repeatCycleEnd”, “repeatCycleNextStart”, “absoluteEnd” } | ✓ | トリガーの引き方の方針
| |||||||||||||||||
| ttl | int | {triggerStrategy} in [“renew”, “extend”, “drop”] | ✓※ | 0 ~ 2147483646 | トリガーの有効期限(秒) ※ triggerStrategy が “renew”,“extend”,“drop"であれば 必須 | |||||||||||||||
| eventId | string | {triggerStrategy} in [“repeatCycleEnd”, “repeatCycleNextStart”, “absoluteEnd”] | ✓※ | ~ 1024文字 | イベント
GRN
※ triggerStrategy が “repeatCycleEnd”,“repeatCycleNextStart”,“absoluteEnd"であれば 必須 | |||||||||||||||
| timeOffsetToken | string | ~ 1024文字 | タイムオフセットトークン |
{
"action": "Gs2Schedule:TriggerByUserId",
"request": {
"namespaceName": "[string]ネームスペース名",
"triggerName": "[string]トリガー名",
"userId": "[string]ユーザーID",
"triggerStrategy": "[string]トリガーの引き方の方針",
"ttl": "[int]トリガーの有効期限(秒)",
"eventId": "[string]イベントGRN",
"timeOffsetToken": "[string]タイムオフセットトークン"
}
}action: Gs2Schedule:TriggerByUserId
request:
namespaceName: "[string]ネームスペース名"
triggerName: "[string]トリガー名"
userId: "[string]ユーザーID"
triggerStrategy: "[string]トリガーの引き方の方針"
ttl: "[int]トリガーの有効期限(秒)"
eventId: "[string]イベントGRN"
timeOffsetToken: "[string]タイムオフセットトークン"transaction.service("schedule").acquire.trigger_by_user_id({
namespaceName="[string]ネームスペース名",
triggerName="[string]トリガー名",
userId="[string]ユーザーID",
triggerStrategy="[string]トリガーの引き方の方針",
ttl="[int]トリガーの有効期限(秒)",
eventId="[string]イベントGRN",
timeOffsetToken="[string]タイムオフセットトークン",
})Gs2Schedule:ExtendTriggerByUserId
ユーザーIDを指定してトリガーの期間を延長
指定したユーザーの既存のトリガーの有効期限を指定した秒数だけ延長します。トリガーが存在しない場合は、指定した延長期間をTTLとして新しいトリガーが作成されます。
数量指定可能なアクション:はい
反転可能なアクション:いいえ
| 型 | 有効化条件 | 必須 | デフォルト | 値の制限 | 説明 | |
|---|---|---|---|---|---|---|
| namespaceName | string | ✓ | ~ 128文字 | ネームスペース名 ネームスペース固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||
| triggerName | string | ✓ | ~ 128文字 | トリガー名 トリガー固有の名前。英数字および -(ハイフン) _(アンダースコア) .(ピリオド)で指定します。 | ||
| userId | string | ✓ | ~ 128文字 | ユーザーID#{userId} と設定することでログイン中のユーザーIDに置換されます。 | ||
| extendSeconds | int | ✓ | 0 ~ 2147483646 | トリガーを延長する期間(秒) | ||
| timeOffsetToken | string | ~ 1024文字 | タイムオフセットトークン |
{
"action": "Gs2Schedule:ExtendTriggerByUserId",
"request": {
"namespaceName": "[string]ネームスペース名",
"triggerName": "[string]トリガー名",
"userId": "[string]ユーザーID",
"extendSeconds": "[int]トリガーを延長する期間(秒)",
"timeOffsetToken": "[string]タイムオフセットトークン"
}
}action: Gs2Schedule:ExtendTriggerByUserId
request:
namespaceName: "[string]ネームスペース名"
triggerName: "[string]トリガー名"
userId: "[string]ユーザーID"
extendSeconds: "[int]トリガーを延長する期間(秒)"
timeOffsetToken: "[string]タイムオフセットトークン"transaction.service("schedule").acquire.extend_trigger_by_user_id({
namespaceName="[string]ネームスペース名",
triggerName="[string]トリガー名",
userId="[string]ユーザーID",
extendSeconds="[int]トリガーを延長する期間(秒)",
timeOffsetToken="[string]タイムオフセットトークン",
})