HighRepJobPolicy

com.google.appengine.api.datastore.dev

インターフェース HighRepJobPolicy

  • すべての既知の実装クラス:
    DefaultHighRepJobPolicy


    public interface HighRepJobPolicy
    高レプリケーション ジョブ アプリケーションのポリシー。実装の中では、新しいジョブを適用するかどうか、適用に失敗したジョブを以降の試行でロール フォワードするかどうかを設定できます。

    実装の詳細情報のうち、このインターフェースの実装に関係するものを次に示します。

    ユーザーが非トランザクション型の Put() または非トランザクション型の Delete() を実行するとき、またはトランザクション型の Put() または Delete() が少なくとも 1 つ追加されたトランザクションの Commit() を実行するときに、LocalDatastoreService は変異のエンティティ グループに関連付けられたジョブを使用してその変異の適用を試みます。ジョブを適用するかどうかの判断は、shouldApplyNewJob(Key) に委任されます。

    未適用ジョブのロール フォワードの方法は 2 つあります。1 つは整合性モデルが必要としているとき、もう 1 つはエンティティ グループがグルーミングされるときです。これらについて、順に説明します。

    高レプリケーション整合性モデルがエンティティ グループの最新の値をユーザーに提示することを保証しているときは、そのエンティティ グループからデータが返される前に未適用のジョブがロール フォワードされます。具体的には、トランザクション型の Get() はエンティティ グループ内の未適用のジョブをロール フォワードします。非トランザクション型の Get() の読み取りポリシーが STRONG(デフォルト)に設定されているときも同様です。トランザクション型の Query も(本質的に祖先クエリであり、したがって単一エンティティ グループ内のすべてのエンティティをスキャンします)、クエリのエンティティ グループに関連付けられた未適用のジョブをロール フォワードしてからクエリを実行します。

    未適用のジョブのロール フォワードは、未適用ジョブを持つエンティティ グループがグルーミングされるときにも行われます。本番環境では、グルーミングを行うのはバックグラウンド プロセスであり、未適用ジョブのスキャンとロール フォワードを継続的に行います。これに似た機能の実装も検討されましたが、永続化状態がバックグラウンド プロセスによってランダムに調整されるような環境では、テストを書くことがほぼ不可能です。したがって、別のアプローチが選ばれました。それは、ローカル データストアでグルーミングするときにそれぞれの Get() とそれぞれの Query() の際にすべての未適用ジョブを見て、それぞれの未適用ジョブについて shouldRollForwardExistingJob(Key) を調べ、そのジョブをロール フォワードするかどうかを決定するというものです。これはグルーミングをシミュレートするものですが、決定論的であるため、テストがはるかに単純明快になります。

    ただし、グルーミングによってジョブがロール フォワードされるときに、実行中のオペレーションの結果にはその影響が及ばないことに注意してください。これが重要であるのは、ジョブの適用に失敗したときに、エンティティ グループを読み取るユーザーに対して強整合性が保証されていない場合は、そのエンティティ グループの「古い」バージョンのデータが必ず、少なくとも 1 回はユーザーに提示されることが保証されるからです。この保証がなかったとしたら、ジョブの適用に失敗してもその失敗が認識されないことになり、シミュレートしようとしている機能の目的を果たせなくなってしまいます。

    • メソッドの詳細

      • shouldApplyNewJob

        boolean shouldApplyNewJob(com.google.appengine.api.datastore.Key entityGroup)
        パラメータ:
        entityGroup - エンティティ グループの一意の識別子。
        戻り値:
        ポリシーに従って新しいジョブを適用する必要がある場合は true、それ以外の場合は false
      • shouldRollForwardExistingJob

        boolean shouldRollForwardExistingJob(com.google.appengine.api.datastore.Key entityGroup)
        パラメータ:
        entityGroup - エンティティ グループの一意の識別子。
        戻り値:
        ポリシーに従って既存のジョブをロール フォワードする必要がある場合は true、それ以外の場合は false
このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Java の App Engine スタンダード環境