Hi,
I am trying to handle lost partition scenario.
I have written event listener listening to
EventType.EVT_CACHE_REBALANCE_PART_DATA_LOST event.
I want to reset lost partition state of cache after cache loading is done.
*Issue:* ignite.resetLostPartitions(caheName) is getting blocked and not
completing.
Please find the code for Event Listener. Someone can help on this. *Why
this resetLostPartitions getting blocked.*
public class IgniteEventListner implements
IgnitePredicate<CacheRebalancingEvent> {
private static final Logger LOGGER =
LoggerFactory.getLogger(IgniteEventListner.class);
private final Ignite ignite;
public IgniteEventListner(Ignite ignite) {
this.ignite = ignite;
}
@Override
public boolean apply(CacheRebalancingEvent evt) {
IgniteCache<DefaultDataAffinityKey, AssetGroupData> cache =
ignite.getOrCreateCache(CacheName.ASSET_GROUP_CACHE.name());
Collection<Integer> lostPartitions = cache.lostPartitions();
reloadCache(lostPartitions); //perform partition based cache loading
*
ignite.resetLostPartitions(Arrays.asList(CacheName.ASSET_GROUP_CACHE.name()));
//Reset partitions*
System.out.println("Check-1, Partition lost event processed");
return true;
}
}
*Cache Configuration*
private CacheConfiguration assetGroupCacheCfg() {
CacheConfiguration assetGroupCacheCfg = new
CacheConfiguration<>(CacheName.ASSET_GROUP_CACHE.name());
assetGroupCacheCfg.setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL);
assetGroupCacheCfg.setWriteThrough(false);
assetGroupCacheCfg.setReadThrough(false);
assetGroupCacheCfg.setRebalanceMode(CacheRebalanceMode.ASYNC);
assetGroupCacheCfg.setBackups(0);
assetGroupCacheCfg.setCacheMode(CacheMode.PARTITIONED);
assetGroupCacheCfg.setIndexedTypes(DefaultDataAffinityKey.class,
AssetGroupData.class);
assetGroupCacheCfg.setSqlIndexMaxInlineSize(100);
RendezvousAffinityFunction affinityFunction = new
RendezvousAffinityFunction();
assetGroupCacheCfg.setAffinity(affinityFunction);
assetGroupCacheCfg.setStatisticsEnabled(true);
assetGroupCacheCfg.setPartitionLossPolicy(PartitionLossPolicy.READ_WRITE_SAFE);
return assetGroupCacheCfg;
}
*Ignite Configuration*
private IgniteConfiguration getIgniteConfiguration() {
TcpDiscoveryVmIpFinder ipFinder = new TcpDiscoveryVmIpFinder();
String[] hosts = {"127.0.0.1:47500..47509"};
ipFinder.setAddresses(Arrays.asList(hosts));
TcpDiscoverySpi discoSpi = new TcpDiscoverySpi();
discoSpi.setIpFinder(ipFinder);
IgniteConfiguration cfg = new IgniteConfiguration();
cfg.setDiscoverySpi(discoSpi);
cfg.setIgniteInstanceName("springDataNode");
cfg.setPeerClassLoadingEnabled(false);
cfg.setRebalanceThreadPoolSize(4);
DataStorageConfiguration storageCfg = new DataStorageConfiguration();
DataRegionConfiguration regionConfiguration = new DataRegionConfiguration();
regionConfiguration.setInitialSize(3L * 1024 * 1024 * 1024);
regionConfiguration.setMaxSize(3L * 1024 * 1024 * 1024);
regionConfiguration.setMetricsEnabled(true);
storageCfg.setDefaultDataRegionConfiguration(regionConfiguration);
storageCfg.setStoragePath("c:/ignite-storage/storage");
storageCfg.setWalPath("c:/ignite-storage/storage/wal");
storageCfg.setWalArchivePath("c:/ignite-storage/storage/wal-archive");
storageCfg.setMetricsEnabled(true);
cfg.setDataStorageConfiguration(storageCfg);
cfg.setIncludeEventTypes(EventType.EVT_CACHE_REBALANCE_PART_DATA_LOST,EventType.EVT_NODE_FAILED);
cfg.setCacheConfiguration(getCacheConfigurations());
return cfg;
}
Thanks,
Akash