/** * @throws Exception If failed. */ private void checkPartitionsWithAffinityBackupFilter() throws Exception { AffinityFunction aff = cacheConfiguration(grid(0).configuration(), DEFAULT_CACHE_NAME).getAffinity(); int partCnt = aff.partitions(); IgniteCache<Object, Object> cache = grid(0).cache(DEFAULT_CACHE_NAME); for (int i = 0; i < partCnt; i++) { Collection<ClusterNode> nodes = affinity(cache).mapKeyToPrimaryAndBackups(i); assertEquals(expectedNodesForEachPartition(), nodes.size()); Map<String, Integer> stat = getAttributeStatistic(nodes); assertEquals(stat.get(FIRST_NODE_GROUP), new Integer(expectedNodesForEachPartition() - 2 )); assertEquals(stat.get("B"), new Integer(1)); assertEquals(stat.get("C"), new Integer(1)); } } }
/** * @throws Exception If failed. */ @Test public void testPartitionDistributionWithAffinityBackupFilter() throws Exception { backups = 3; try { for (int i = 0; i < 2; i++) { splitAttrVal = FIRST_NODE_GROUP; startGrid(4 * i); startGrid(4 * i + 3); splitAttrVal = "B"; startGrid(4 * i + 1); splitAttrVal = "C"; startGrid(4 * i + 2); awaitPartitionMapExchange(); checkPartitionsWithAffinityBackupFilter(); } } finally { stopAllGrids(); } }
/** * @throws Exception If failed. */ @Test public void testPartitionDistribution() throws Exception { backups = 1; try { for (int i = 0; i < 3; i++) { splitAttrVal = "A"; startGrid(2 * i); splitAttrVal = "B"; startGrid(2 * i + 1); awaitPartitionMapExchange(); checkPartitions(); } } finally { stopAllGrids(); } }
/** * @throws Exception If failed. */ @SuppressWarnings("ConstantConditions") private void checkPartitions() throws Exception { AffinityFunction aff = cacheConfiguration(grid(0).configuration(), DEFAULT_CACHE_NAME).getAffinity(); int partCnt = aff.partitions(); IgniteCache<Object, Object> cache = grid(0).cache(DEFAULT_CACHE_NAME); for (int i = 0; i < partCnt; i++) { Collection<ClusterNode> nodes = affinity(cache).mapKeyToPrimaryAndBackups(i); assertEquals(2, nodes.size()); ClusterNode primary = F.first(nodes); ClusterNode backup = F.last(nodes); assertFalse(F.eq(primary.attribute(SPLIT_ATTRIBUTE_NAME), backup.attribute(SPLIT_ATTRIBUTE_NAME))); } }
/** {@inheritDoc} */ @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception { CacheConfiguration cacheCfg = defaultCacheConfiguration(); cacheCfg.setCacheMode(PARTITIONED); cacheCfg.setBackups(backups); if (backups < 2) cacheCfg.setAffinity(affinityFunction()); else cacheCfg.setAffinity(affinityFunctionWithAffinityBackupFilter(SPLIT_ATTRIBUTE_NAME)); cacheCfg.setWriteSynchronizationMode(CacheWriteSynchronizationMode.FULL_SYNC); cacheCfg.setRebalanceMode(SYNC); cacheCfg.setAtomicityMode(TRANSACTIONAL); IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName); cfg.setCacheConfiguration(cacheCfg); cfg.setUserAttributes(F.asMap(SPLIT_ATTRIBUTE_NAME, splitAttrVal)); return cfg; }