注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
このページでは、競合エラーの一般的な原因と、ワークフローで競合による失敗を減らす方法について説明します。
アクションの実行中に別のアクションが同じオブジェクトを変更すると、Actions:ConcurrentModification または Actions:ObjectVersionChanged でアクションが失敗することがあります。スナップショット分離モードでは、別のアクションによる変更が上書きされないように、プラットフォームが編集を拒否します。これは、アクションが異なるプロパティを編集する場合にも当てはまります。
例: priority と assignee の2個のプロパティを持つ Ticket オブジェクトタイプがあるとします。同じチケットに対して、どちらもスナップショット分離を使用する2個のアクションを同時に実行します。
priority を Low から High に変更します。assignee を Alex から Sam に変更します。アクション A が先にコミットします。その後、アクション B は、チケットが変更されたため競合チェックに失敗します。アクション A が変更したのが別のプロパティであっても同様です。
これらの競合を解消するには、次の方法を使用します。
アクションの実行中にオブジェクトタイプの元データソースが更新されると、Actions:ObjectVersionChanged でアクションが失敗することがあります。競合チェックでは、オブジェクトタイプ全体のデータソースの更新を追跡します。更新されたデータソースの行が、アクションで編集するオブジェクトに対応していない場合でも、アクションが失敗することがあります。
例: スナップショット分離を使用するアクションが、チケット A の assignee を変更しようとします。その実行中に、データソースの更新によってチケット B と C の priority が変更されます。チケット A の値が変更されていなくても、チケット A を編集するアクションが失敗することがあります。
これらの失敗を解消するには、次の方法を使用します。
オブジェクトデータベースは、効率的な動作を維持するために定期的にメンテナンスを実行します。編集が多いオブジェクトタイプでは、このメンテナンスの実行頻度が高くなることがあります。このメンテナンス中に実行されるアクションは、Actions:ConcurrentObjectTypeModification または Actions:ObjectVersionChanged で失敗することがあります。
メンテナンスは、元データソースを持たないオブジェクトタイプにも影響することがあります。
アクションの自動再試行を設定します。メンテナンスの完了後は、再試行が成功するはずです。自動再試行後もこれらの失敗が続く場合は、Palantir サポートにお問い合わせください。
Ontology Manager で、アクションタイプの機能タブを開き、一時的なエラー時の再試行モードで設定を選択します。選択肢は次のとおりです。
プラットフォームは、読み取り専用のリクエストであっても、OSDK アクセスを外部呼び出しとして分類します。そのため、OSDK を使用する TypeScript v2 および Python の関数ベースのアクションは、デフォルトでは再試行されません。これらのアクションで競合エラーが発生する場合は、すべてのアクションの選択を検討します。
アクションが、安全に繰り返せない可能性がある(冪等ではない)外部呼び出しを行う場合は、すべてのアクションを選択しないでください。たとえば、オントロジーを編集する別のアクションを呼び出す Webhook を再試行すると、編集が重複する可能性があります。
再試行の動作については、詳しくはこちらをご覧ください。
再試行が有効な場合、プラットフォームはアクションの実行を最大5回試みます。競合が続く場合は、上記の一般的な原因に関するガイダンスに従います。Automate または API クライアントで再試行回数を増やしても、原因が解消されないまま、遅延やシステムの負荷が増加する可能性があります。
Workshop、OSDK、Actions API、Automate から実行されるアクションを含め、ワークフローで同じオブジェクトを編集するすべての方法を特定します。これらのクライアントから実行されるアクションは、互いに競合する可能性があります。
Workshop を使用している場合は、アクションの失敗後に表示されるエラートーストを確認します。エラー名でエラーを特定でき、オブジェクトの詳細は影響を受けるオブジェクトを見つけるのに役立ちます。

Automate を使用している場合は、自動化の履歴タブを開き、失敗したイベントを選択してから、アクションの効果を選択して実行の詳細を表示します。トレースでは、失敗したアクション実行が示されます。

詳細ビューで、失敗したログエントリのコンテンツフィールドを選択して、ログの詳細を開きます。この例では、Actions:ObjectVersionChanged と HTTP ステータス 409 が表示されています。

OSDK アプリケーションを開発している場合や Actions API を呼び出している場合は、アクションリクエストによって返されたエラーを確認します。この例では、API が ObjectChanged をエラーコード CONFLICT、HTTP ステータス 409 とともに返しています。

Ontology Manager で、オブジェクトタイプのデータソースタブにあるユーザー編集履歴を追跡を有効にします。Workshop または Object View で編集履歴ウィジェットを使用して、失敗したアクションの実行中に同じオブジェクトに対して行われた編集を確認します。これにより、競合の原因となった、成功したアクション実行を特定できます。異なるプロパティへの編集でも競合が発生する可能性があるため、すべてのプロパティを表示します。
編集履歴には、有効にした後に行われた編集が記録されます。元データソースの更新は含まれません。
OSDK アプリケーションを開発している場合や Actions API を直接呼び出している場合は、同じオブジェクトを編集する各アクションが完了するのを待ってから、次のアクションを実行します。
Automate を使用している場合は、アクションが重複する箇所に応じた設定を選択します。
ワークフロー内の複数のアクションが同じオブジェクトを編集する場合は、それらを1つのアクションにまとめることを検討します。まとめたアクションが自身の編集内容を読み取る必要がある場合は、ステージング書き込みを使用します。
たとえば、あるプロジェクトに status が Open に設定された3件のタスクがあるとします。ワークフローでは、タスクごとに1つのアクションを実行して、そのタスクを Completed に設定し、プロジェクトの completedTaskCount を更新します。3つのアクションすべてが同じプロジェクトを共有して編集するため、競合する可能性があります。
これらを、ステージング書き込みを使用する1つの関数ベースのアクションにまとめ、次の処理を行います。
Completed に設定します。completedTaskCount をステップ2の結果に設定します。このアクションはステージング書き込みを使用するため、クエリにはステップ1で設定した3件のタスクが含まれ、件数は 3 になります。ワークフローに次のパターンがないか確認します。