primaryValues的行为与预期不符

时间:2014-12-06 01:24:10

标签: gridgain

在我们的poc中,我们在PARTIONED MODE中有一个缓存,有2个备份,我们启动了3个节点。 100个条目被加载到缓存中,我们在下面的步骤中进行了检索。

public void  perform () throws GridException {
         final  GridCache<Long, Entity> cache= g.cache("cache");
         GridProjection proj= g.forCache("cache");

         Collection< Collection<Entity>> list= proj .compute().broadcast(
                 new GridCallable< Collection<Entity>>() {
             @Override public Collection<Entity> call() throws Exception {

                 Collection<Entity> values= cache.primaryValues();

                 System.out.println("List size on each Node: "+ values.size());
                   // console from each node shows 28,38,34 respectively, which is correct

                 return values;
             }
         }).get(); 

       for (Collection<Entity> e: list){
           System.out.println("list size when arrives on main Node :"+ e.size());
//console shows 28 for three times, which is not correct
       }
}

我假设primaryValues()是将primaryEntrySet()返回的每个元素的值取出并放入Collection中。我也尝试使用primaryEntrySet,它没有这个问题。

1 个答案:

答案 0 :(得分:0)

GridGain序列化缓存集合的方式是参考,可能不是很直观。我已经向Apache Ignite项目提交了一个Jira问题(这是GridGain开源版的下一个版本):https://issues.apache.org/jira/browse/IGNITE-38

同时,请尝试以下GridCallable中的以下内容:

return new ArrayList(cache.primaryValues());