1

オブジェクト化と結果整合性に関連する奇妙な動作が見られます。App Engine Java 開発サーバーに HTTP リクエストを行ういくつかの統合テストを実行しているときに、この動作に気付きました。

これらのテストが実際のアプリ エンジン環境に対して実行されたときにも機能することを望んでいたため、最終的に整合性のあるクエリに基づいて結果を返す要求を繰り返すことで、最終的な整合性を処理しています。

以前、誤って ObjectifyFilter を web.xml の間違った場所に配置したため、ObjectifyFilter が実行されませんでした。実際に実行できるようにフィルタ チェーンの先頭に移動したので、すべてのクエリが常に一貫した結果を返すように見えます。つまり、結果整合性はもうありません。

たとえば、あるテストでは次のことが行われます。

  1. ユーザー名を持つユーザーを追加するリクエスト
  2. ユーザー名とパスワードでユーザーを承認しようとするリクエスト。これにより、指定されたユーザー名を持つユーザーのグローバル クエリが作成され、クエリは結果的に一貫性が保たれますが、常にユーザー エンティティが検出されます。

何が起こっているのかわかりません。

より詳しい情報:

  • ofy().toString がリクエストごとに異なる値を返すことを確認しました。
  • -Ddatastore.default_high_rep_job_policy_unapplied_job_pct=50 を使用しています
  • Appengine SDK バージョン 1.8.6
  • トランザクション内ですべての書き込みを行っています
4

1 に答える 1

0

テストで結果整合性を無効にします。再試行とスリープを追加しても、コードのロジックは変わりません。テストが複雑になるだけです。結果整合性の動作をテストしようとしても意味がありません。存在することに注意してください。

それは実際にはテスト ハーネスの特定の動作に関するものであるため、特定の質問に対する答えはわかりません。単体テスト ガイドをよく読み直してください。未適用のジョブは、クエリが 2 回目に実行されたときなど、奇妙な時点で適用されます。これは、サーバー環境の最終的に一貫性のある動作の非常に大まかな概算にすぎません。

于 2013-11-09T08:22:20.873 に答える