我在ignite 2.8.1版本上遇到了一致性数据问题。我有三个节点作为集群运行,缓存配置为:
CacheConfiguration<String, Balance> cacheConfiguration = new CacheConfiguration<>(Balance.class.getSimpleName());
cacheConfiguration.setIndexedTypes(String.class, Balance.class);
cacheConfiguration.setSqlIndexMaxInlineSize(100);
cacheConfiguration.setSqlSchema("PUBLIC");
cacheConfiguration.setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL);
cacheConfiguration.setCacheMode(CacheMode.PARTITIONED);
cacheConfiguration.setBackups(4);
cacheConfiguration.setWriteSynchronizationMode(CacheWriteSynchronizationMode.FULL_SYNC);
然后我有一个非常简单的代码来添加循环中的余额:
for (int i = 0; i < 10000; i++) {
balance = balanceDao.findByKey(accountId, "USD");
balance.setQuantity(balance.getQuantity().add(BigDecimal.ONE));
balanceDao.save(balance);
}
当在主节点上运行时,我的余额总是正确地增加了10000,但当在备份节点上运行它时,有时我的余额增加了8k左右,有时增加了9k。
如果setWriteSynchronizationMode设置为PRIMARY_SYNC,setReadFromBackup设置为false,那么我可以在所有节点上获得正确的平衡。
这是2.8.1上的错误还是我的配置有什么问题?
如果是readFromBackup == true
(默认值(,则可以读取备份节点上的过时值。将其设置为false
以避免过时的读取。