Hi, Backups are configured, please recheck cacheconfig. Its set to 1, thats why node 3 has backups from node 1 and node two as shown in pic attached to my previous reply.
On Mon, Jan 31, 2022, 20:46 Stephen Darlington < stephen.darling...@gridgain.com> wrote: > According to the configuration you shared, you don’t have backups. > > I would expect to see something like: > > CacheConfiguration<Integer, Department> deptCacheConfig = new > CacheConfiguration<>(DEPT_CACHE); > deptCacheConfig.setCacheMode(CacheMode.PARTITIONED); > *deptCacheConfig.setBackups(1);* > IgniteCache<Integer, Department> deptCache = > ignite.getOrCreateCache(deptCacheConfig); > > The default is zero backups, so loss of a single node results in lost > partitions. > > Note, that since you have persistence enabled, you’ll have to drop and > recreate the table for the change to take effect. > > On 31 Jan 2022, at 11:16, Surinder Mehra <redni...@gmail.com> wrote: > > Hi, thanks for pointing out the problem of why data is being stored on the > same machine. > The 2nd point: > As I mentioned in steps, we are getting the same exception even with > backups. > Could you please point out other problems with configuration as you > mentioned > > > On Mon, Jan 31, 2022 at 4:35 PM Stephen Darlington < > stephen.darling...@gridgain.com> wrote: > >> There’s a lot to unpack here, but there are (at least) two problems with >> your configuration. >> >> First, you should not be activating your cluster in your startup script. >> That’s an operation that needs to be completed only once, not every time >> the cluster (or node) starts. This is probably why all the data is being >> stored on a single machine. >> >> Second, you create a cache but without any backups. That means that when >> a node dies, you lose access to all the data. >> >> > On 31 Jan 2022, at 10:57, Surinder Mehra <redni...@gmail.com> wrote: >> > >> > >> > Hi Guys, >> > I observed below behavior with persistence enabled. Could you please >> check and confirm if it's a bug or I missed some configuration. >> > >> > Steps: >> > 1. Start ignite node1 and 2 with persistence enabled >> > 2. Step 1 will write few entries to ignite cache >> > 3. All entries go to one node >> > 4. Stop node containing the data >> > 5. Run a query to get data, below exception will be thrown. I guess >> this is expected because the node containing the data is down >> > 6. Restart killed node, exception shouldn’t be thrown because data is >> back in caches >> > 7. Run a query to get data, below exception will be thrown again. This >> looks weird. >> > 8. Kill node2 and try to query again, still the same exception >> > 9. Restart only the left node(data owning node). After restart, the >> query starts working again. >> > 10. I checked the cache directory under node1, it didn't have part0.bin >> ever. files start from part1 and so on. >> > 11. From the exception, it looks like it is trying to read non existent >> file >> > 12. Tried setting consistent Id for each node, still same exception. >> > >> > >> > Another observation : When backup is enabled, shouldn't the backup node >> serve the query. Why it throws same below exception when node1(primary) is >> down >> > >> > This exception is only thrown if data containing node goes down >> > >> > Caused by: class >> org.apache.ignite.internal.processors.cache.CacheInvalidStateException: >> Failed to execute query because cache partition has been lostParts >> [cacheName=deptCache, part=0] >> > >> > Node2{ >> > >> > DataStorageConfiguration storageCfg = new DataStorageConfiguration(); >> > >> storageCfg.getDefaultDataRegionConfiguration().setPersistenceEnabled(true); >> > IgniteConfiguration cfg = new IgniteConfiguration(); >> > cfg.setDataStorageConfiguration(storageCfg); >> > >> > try (Ignite ignite = Ignition.start(cfg)) { >> > ignite.cluster().state(ClusterState.ACTIVE); >> > CacheConfiguration<Integer, Department> deptCacheConfig = >> new CacheConfiguration<>(DEPT_CACHE); >> > deptCacheConfig.setCacheMode(CacheMode.PARTITIONED); >> > IgniteCache<Integer, Department> deptCache = >> ignite.getOrCreateCache(deptCacheConfig); >> > >> > Department d1 = new Department(1, "CS"); >> > Department d2 = new Department(2, "ECE"); >> > Department d3 = new Department(3, "CIVIL"); >> > >> > if(deptCache.size(CachePeekMode.ALL) == 0){ >> > System.out.println("Adding dept data to cache"); >> > deptCache.put(d1.getDeptId(), d1); >> > deptCache.put(d2.getDeptId(), d2); >> > deptCache.put(d3.getDeptId(), d3); >> > } >> > >> > } >> > >> > } >> > >> > Node1{ >> > >> > DataStorageConfiguration storageCfg = new DataStorageConfiguration(); >> > >> storageCfg.getDefaultDataRegionConfiguration().setPersistenceEnabled(true); >> > IgniteConfiguration cfg = new IgniteConfiguration(); >> > cfg.setDataStorageConfiguration(storageCfg); >> > >> > try (Ignite ignite = Ignition.start(cfg)) { >> > ignite.cluster().state(ClusterState.ACTIVE); >> > CacheConfiguration<Integer, Department> deptCacheConfig = >> new CacheConfiguration<>(DEPT_CACHE); >> > deptCacheConfig.setCacheMode(CacheMode.PARTITIONED); >> > IgniteCache<Integer, Department> deptCache = >> ignite.getOrCreateCache(deptCacheConfig); >> > >> > Department d1 = new Department(1, "CS"); >> > Department d2 = new Department(2, "ECE"); >> > Department d3 = new Department(3, "CIVIL"); >> > >> > if(deptCache.size(CachePeekMode.ALL) == 0){ >> > System.out.println("Adding dept data to cache"); >> > deptCache.put(d1.getDeptId(), d1); >> > deptCache.put(d2.getDeptId(), d2); >> > deptCache.put(d3.getDeptId(), d3); >> > } >> > >> > } >> > } >> > >> > Client{ >> > >> > IgniteConfiguration cfg = new IgniteConfiguration(); >> > cfg.setDataStorageConfiguration(storageCfg); >> > >> > try (Ignite ignite = Ignition.start(cfg)) { >> > IgniteCache<Integer, Department> deptCache = >> ignite.getOrCreateCache(DEPT_CACHE); >> > List<Cache.Entry<Object, Object>> depts = deptCache.query(new >> ScanQuery<>()).getAll(); >> > depts.stream().forEach(entry -> >> System.out.println(entry.getValue())); >> > } >> > } >> >> >