2017-01-22 7 views
1

Hazelcast 3.7.4を使用していますが、ライトメンバーと非ライトメンバーの両方があります。Hazelcastニアキャッチエビクションが動作しません

次のように私は近くのキャッシュ設定てる私liteのメンバーで

 NearCacheConfig nearCacheConfig = new NearCacheConfig(0, cacheSize, EvictionPolicy.LRU.name(), 0, true, InMemoryFormat.OBJECT); 
     config.getMapConfig(mapName).setNearCacheConfig(nearCacheConfig); 

を私はliteの部材にエントリーリスナーを設定しているし、それは変化に呼び出されたことを確認できました。さらに、古い値と新しい値の内容は正しいです。

しかし、マップから値を取得しようとしても、私はまだ古い値を得ています。

デバッグ中にマップの内容を調べようとしましたが、新しい値が表示されていましたが、私が呼び出しているときに:map.get(key)古い値が返されます。明らかにバグです

+0

IMapとそれに近いキャッシュは分離された追い出しメカニズムを持っています。エントリが「IMap」から追い出されるとき、これはニア・キャッシュ上での追い出しを必要とせず、逆もまた同様である。したがって、それがまだそれを所有しているため、キャッシュの近くで追い出されたエントリが返されることが予想されます。追い出しはデータの正確さに影響しないので、最新の状態がまだ観察可能であれば、それをニア・キャッシュから戻しても 'IMap'はそれを持っていなくても問題はありません。 – mrck

+0

キー 'a'が '1'の値にマップされていたが、 '2'に変更されたとしたら、 'a'のマップを照会しているときに '1' '? 私はここでの退去については言及していませんが、価値のある更新です。 さらに、near-cacheコンストラクタの1つは '' invalidateOnChange''です。これは自分のコードで '' true''に設定されています。 – danieln

+0

あなたは完全な例を共有できますか?ありがとうございました –

答えて

0

、私はHZチームから得た答え:これを報告するための

おかげで、確かにそれは3.7バージョンのためのバグです。 3.8-EAにはこの問題はありません。 キャッシュの近くに他のメンバーも設定されていない場合、問題の根本原因が無効になります。

現時点では、回避策として、他のメンバーのニアキャッシュを有効にすることができます。 おそらく、次の3.7パッチリリースでこの問題を修正できます。これは 3.7.6になります。

提案されているように、私は他のメンバー(このマップのみ)の近くのキャッシュを有効にして、問題を解決しました。

https://github.com/hazelcast/hazelcast/issues/9723

関連する問題