[JAVA]データストア更新後のデータを取得すると、更新前のデータが取得される

114 views
Skip to first unread message

kimishima

unread,
Dec 18, 2017, 2:33:48 AM12/18/17
to Google-App-Engine-Japan
お世話になります君島と申します。 

環境はJAVAになります。

データストアを更新して数秒後に当該データを読み出すと、
取得できる値が<更新前の値>だったり「更新後の値」だったり、さらにその後<更新前の値>が取得できたりします。


操作内容
※エンティティ更新・読み込みのJSPを作成して、同じブラウザ・セッションから以下のテストしました。
・まずエンティティを更新
・1~2秒待ち、当該エンティティを取得すると・・・・・・・・「更新後」のデータが取得されます。
・さらに1~2秒待ち、再度当該エンティティを取得すると・・・<更新前>のデータが取得されます。
・さらに1~2秒待ち、再度当該エンティティを取得すると・・・「更新後」のデータが取得されます。
・さらに1~2秒待ち、再度当該エンティティを取得すると・・・<更新前>のデータが取得されます。

この状況が10分以上続いています。

この現象が何度も再現可能であり、現在も確認できる状況です。


多少の遅延がおこるのは理解しておりますが、
一度「更新後」が取得できた後に、次の操作で<更新前>の値が取得できる。
というのは問題ない動きでしょうか?


現在、特定のプロジェクトのみに発生しており、同じソースコードで他のプロジェクトでは発生しておりません。

何か同様の状況や解決の情報などあれいば思い投稿させていただきました。
ご教授いただけますと助かります。
宜しくお願い致します。


tomoyuki nagai

unread,
Dec 18, 2017, 6:13:07 AM12/18/17
to Google-App-Engine-Japan
永井です。

数年前の知識なので今もそうかは知りませんが
クエリを使ってエンティティを取得する場合は更新前のデータが取得されることがあるかと思います。
※memcacheを使えば極力なくせますが、絶対ではありません。
キーを使ってエンティティを取得する場合は更新後のデータが取得されるはずです。


2017/12/18 午後4:33 "kimishima" <sg.kim...@gmail.com>:

--
このメールは Google グループのグループ「Google-App-Engine-Japan」に登録しているユーザーに送られています。
このグループから退会し、グループからのメールの配信を停止するには google-app-engine-japan+unsub...@googlegroups.com にメールを送信してください。
このグループに投稿するには google-app-engine-japan@googlegroups.com にメールを送信してください。
https://groups.google.com/group/google-app-engine-japan からこのグループにアクセスしてください。
その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。

kimishima

unread,
Dec 18, 2017, 6:42:56 AM12/18/17
to Google-App-Engine-Japan
永井 様

ご回答ありがとうございます。

説明不足で申し訳ございません。
永井様ご記載の内容につきましては、私の方でも数年前に既知の事象でございました。
今回につきましては、キーで更新して、キーで読み取るという単純な操作をしております。
そしてキー読取操作だけを繰り返すと、更新前の値→更新後の値→更新前の値・・・と取得する値が変わっていくのです。。

あと、こちらで使用しているのが「JDOのgetObjectById/makePersistant」というのが気になりるところではありますが、
「JDOのgetObjectById/makePersistant」だと「更新後の値」が読めたあとに、「更新前の値」が読めるということが
GAE上では正常な動きと理解すべきか・・と困惑している次第でございます。


ありがとうございます。


















2017年12月18日月曜日 20時13分07秒 UTC+9 nagai:
このグループに投稿するには google-app-...@googlegroups.com にメールを送信してください。

unread,
Dec 18, 2017, 6:53:42 AM12/18/17
to Google-App-Engine-Japan
JDOをまったく使ったことがないので、自分では確認できないので、よく分からないですが、
基本的にKeyを指定したGetを行った場合、Strong Consistencyなので、最新の値が取得できます。

なので、JDOの中でローカルキャッシュなどを持っておらず、Getが発行されているにも関わらず、最新の値が返ってこない場合、Datastoreの挙動がおかしいです。
特定のProjectでのみ発生するのであれば、再現できる最小のコードを書き、Googleのサポートに問い合わせてみるのがよいのではないかと思います。

2017年12月18日月曜日 20時42分56秒 UTC+9 kimishima:

kimishima

unread,
Dec 18, 2017, 8:09:58 AM12/18/17
to Google-App-Engine-Japan
真様

ご回答ありがとうございます。
またGoogleサポートへのお問い合わせのご提案ありがとうございます。

私もそのように考えております。
先週金曜日から挙動がおかしいため、最小コードでシンプルなJSPを作成してテストした結果でも当該現象が発生している状況でございました。

ありがとうございます。







2017年12月18日月曜日 16時33分48秒 UTC+9 kimishima:
Reply all
Reply to author
Forward
0 new messages