SaaS データ書き出し用のフィードロック機構
SaaS Data Export拡張機能では、複数のプロセスが同じフィードを同時に同期しようとすると、競合状態を防ぐためにフィード ロック メカニズムを使用します。 これは、例えば、cron トリガーされた再同期が手動のsaas:resync CLI呼び出しと重複する場合に発生する可能性があります。
フィードロックの仕組み
cron ジョブまたは手動のsaas:resync CLI呼び出しによってトリガーされる各フィード同期操作は、同じ順序に従います。
-
プロセスはフィードロックを取得しようとします。 ロック試行は非ブロッキングであり、ロックが別のプロセスによって既に保持されている場合はすぐに返されます。
-
ロックが 利用できない 場合、[操作はスキップされ、ログに記録されます]。
データは失われません。 現在のプロセスが完了すると、次のcron実行で保留中の変更が取得されます。
-
ロックが 獲得 の場合、プロセスは診断目的でその名前とPIDを記録し、同期を実行します。
-
同期が完了または失敗すると、ロックが無条件で解除され、次にスケジュールされたcron ジョブが正常に処理されます。
cronまたはCLIによって起動されたかどうかに関係なく、一度に1つの同期操作のみがフィードロックを保持できます。 フィードロックはAdobe CommerceのLockManagerInterfaceを通じて実装されます。 デフォルトのバックエンドはMySQLで、GET_LOCK関数とRELEASE_LOCK関数を使用します。 別のロックプロバイダーを設定するには、 ロックプロバイダーの設定を参照してください。
予想されるログメッセージ
commerce-data-export.logの次のメッセージは正常であり、問題を示していません:
{"feed":"products","operation":"partial sync","status":"operation skipped - process locked by \"full sync(1234)\"", ...}
このメッセージは、完全な再インデックスまたはsaas:resyncが既に進行中の間に、クロントリガーによる部分同期が実行を試みたときに表示されます。 スキップされた操作は失われません。 実行中のプロセスが完了してロックを解除すると、次のcron実行が取得され、保留中の変更が同期されます。
commerce-data-export.logに記録されたログ形式と操作タイプの一般的な情報については、 ログの確認とトラブルシューティング を参照してください。