Apache Ignite: режим REPLICATION, счетчик кажется непоследовательным - PullRequest
0 голосов
/ 02 марта 2019

Я создал реплицированный кэш Apache Ignite (V2.7) из 200 записей.Я запускаю 2 экземпляра этого кода.Когда я печатаю cache.localSizeLong, он не печатает 200 на обоих узлах.Он печатает что-то вроде 120 в узле 1, 80 в узле 2. Число меняется при повторном запуске.Похоже, это создает разделенный кеш?

Код для инициализации кеша:

private void initCache() {
    IgniteConfiguration configuration = new IgniteConfiguration();
    configuration.setIncludeEventTypes(EventType.EVT_CACHE_OBJECT_PUT);//Can take multiple

    CacheConfiguration cacheCfg = new CacheConfiguration("myCacheConfig");
    //https://apacheignite.readme.io/docs/cache-modes

    cacheCfg.setCacheMode(CacheMode.REPLICATED);

    System.out.println("Default cache mode:----" + cacheCfg.getCacheMode());
    log.debug("Default cache mode:----" + cacheCfg.getCacheMode());

    configuration.setCacheConfiguration(cacheCfg);
    cacheCfg.setCopyOnRead(false);
    cacheCfg.setBackups(0);


    Ignite ignite = Ignition.start(configuration);
    cache = ignite.getOrCreateCache("myIgniteCache");       
}

1 Ответ

0 голосов
/ 03 марта 2019

По умолчанию cache.localSizeLong возвращает количество записей, для которых основным является узел.Несмотря на то, что кэш реплицируется, он все же реализован как секционированный - каждый узел является основным для некоторых данных и сохраняет резервную копию остальных.

Используйте cache.localSizeLong(CachePeekMode.ALL) для учета как основного, так и резервного объектов.

...