第13章 操作のシーケンスの実行

目次

シーケンス・エラー
シーケンスの作成
シーケンスの実行

操作対象のレコードがすべて同じメジャー・パス・コンポーネントを共有する場合、書込み操作のシーケンスを1つの原子的単位として実行できます。原子的単位とは、すべての操作が正常に実行されるか、いずれも実行されないということです。

また、シーケンスは単独で実行されます。つまり、非常に長いシーケンスを実行するスレッドがある場合、そのシーケンスで使用されているデータに、別のスレッドが割り込めないということです。長時間実行されているシーケンスが完了するまで、シーケンスで行われた変更を別のスレッドが確認することはできません。長時間実行されているシーケンスで使用されているデータを、別のスレッドが変更することもできません。

シーケンスでは書込み操作のみサポートされることに注意してください。シーケンスを使用する場合、ストアへの格納と削除は行えますが、ストアからの取得は行えません。

操作のシーケンスを使用する場合、次のようになります。

この章の後半で、OperationFactoryおよびKVStore.execute()を使用して操作のシーケンスを作成し、実行する方法を示します。

シーケンス・エラー

シーケンス内の操作でエラーが起きた場合、操作全体が中止されます。この場合、エラーが発生するまでにシーケンスがどこまで実行されたかに関係なく、データは、シーケンスが実行されなかった場合と同じ状態になります。

基本的には、シーケンスが中止される原因は2つあります。

  1. 内部操作で、エラーとみなされる例外が発生します。たとえば、操作がDurabilityExceptionまたはConsistencyExceptionをスローします。また、メッセージの配信またはネットワーク・エラーによる内部エラーがあります。

  2. 各操作から正常に復帰しますが、特定の操作で定義されている不成功です。(たとえば、存在しないキーを削除しようとするなどです)。これが起こり、OperationFactoryを使用して操作を作成したときにabortIfUnsuccessfulパラメータにtrueを指定していた場合、OperationExecutionExceptionがスローされます。この例外には、失敗した操作に関する情報が含まれています。