操作対象のレコードがすべて同じメジャー・パス・コンポーネントを共有する場合、書込み操作の順序を1つの原子的単位として実行できます。原子的単位とは、すべての操作が正常に実行されるか、いずれも実行されないということです。
また、順序は単独で実行されます。つまり、非常に長い順序を実行するスレッドがある場合、その順序で使用されているデータに、別のスレッドが割り込めないということです。長時間実行されている順序が完了するまで、順序で行われた変更を別のスレッドが確認することはできません。長時間実行されている順序で使用されているデータを、別のスレッドが変更することもできません。
順序では書込み操作のみサポートされることに注意してください。順序を使用する場合、格納と削除は行えますが、データの取得は行えません。
操作の順序を使用する場合、次のようになります。
順序で使用されるキーはすべて、同じメジャー・パス・コンポーネントを共有する必要があります。
操作はリスト化されますが、必ずしもリスト上の順序で実行されるわけではありません。むしろ、内部的に定義された、デッドロックが起こらない順序で実行されます。
同じキーを操作する複数の操作は作成できません。これを行うと、例外が発生し、操作全体が中止されます。
この章の後半で、OperationFactory
およびKVStore.execute()
を使用して操作の順序を作成し、実行する方法を示します。
順序内の操作でエラーが起きた場合、操作全体が中止されます。この場合、エラーが発生するまでに順序がどこまで実行されたかに関係なく、データは、順序が実行されなかった場合と同じ状態になります。
基本的には、順序が中止される原因は2つあります。
内部操作で、エラーとみなされる例外が発生します。たとえば、操作によってDurabilityException
がスローされます。また、メッセージの配信またはネットワーク・エラーによる内部エラーがあります。
各操作から正常に復帰しますが、特定の操作で定義されている不成功です。(たとえば、存在しないキーを削除しようとするなどです)。これが起こると、OperationFactoryを使用して操作を作成したときにabortIfUnsuccessful
パラメータにtrue
を指定していた場合、OperationExecutionException
がスローされます。この例外には、失敗した操作に関する情報が含まれています。