Actually I wanted to start near cache only on client node using getOrCreateNearCache method. But somehow it didn't work.
So now. I have configured near cache using cache.setNearCacheConfig method in cache configuration. But this starts near cache on client as well as on server node. On Mon 1 Jul, 2019, 8:53 PM Ilya Kasnacheev <[email protected] wrote: > Hello! > > I think the cache would start if listed in node's configuration (via XML > or Java). Make sure you also have near caches there. > > Regards, > -- > Ilya Kasnacheev > > > чт, 27 июн. 2019 г. в 10:32, Prasad Bhalerao <[email protected] > >: > >> Hi, >> >> I am getting following error on ignite client nodes. >> >> *class org.apache.ignite.IgniteCheckedException: Failed to start near >> cache (a cache with the same name without near cache is already started* >> >> To solve this issue I added following code in ApplicationRunner's run() >> method to explicitly start the cache. Application runner Interface is >> provided by spring boot to execute required code just before server startup. >> >> But even after doing this I am still getting error "a cache with the same >> name without near cache is already started". >> >> I see following info messages in my log file *multiple times*. First >> time it is logged when ApplicationRunner.run() method is invoked during >> server startup. >> >> *o.a.i.i.p.cache.GridCacheProcessor - Started cache [name=DOMAIN_CACHE, >> id=-2139013081, memoryPolicyName=null, mode=PARTITIONED, >> atomicity=TRANSACTIONAL, backups=1]* >> >> On which events GridCacheProcessor starts the cache? >> >> Can this event be intercepted or handled to start near cache? >> >> What is the reason behind getting "GridCacheProcessor - Started cache" >> info messages *multiple* *times *in log files? >> >> Is near cache is destroyed/invalidate when client node is reconnected to >> the cluster? >> >> Can some please advise? >> >> *CODE TO START caches explicitly:* >> >> @Override >> public void run(ApplicationArguments args) throws Exception { >> for (CacheName cacheName : CacheName.values()) { >> //We are configuring few caches only on client node for fast lookup >> during validations. >> if (ignite.configuration().isClientMode() && >> CacheName.isNearCache(cacheName)) { >> NearCacheConfiguration<K, T> nearCfg = new NearCacheConfiguration<>(); >> nearCfg.setNearEvictionPolicyFactory(new >> LruEvictionPolicyFactory<>(nearCacheSize)); >> ignite.getOrCreateNearCache(cacheName, nearCfg); >> } else { >> ignite.cache(cacheName); >> } >> } >> LOGGER.info("Caches Started...."); >> } >> >> >> Thanks, >> Prasad >> >> On Mon, Apr 29, 2019 at 5:34 PM Prasad Bhalerao < >> [email protected]> wrote: >> >>> Yes, I found the issue. Actually it was in my Junit. I had accidently >>> added following line in my junit case. This was starting the cache and I >>> was trying to get it using my service call. >>> >>> //final IgniteCache<Object, Object> cache = >>> ignite.cache(CacheName.ASSET_GROUP_CACHE.name()); >>> >>> Thanks, >>> Prasad >>> >>> >>> >>> On Mon, Apr 29, 2019 at 5:10 PM Ilya Kasnacheev < >>> [email protected]> wrote: >>> >>>> Hello! >>>> >>>> As this error points out, you can't have near cache with same name as >>>> already existing regular cache. >>>> >>>> Regards, >>>> -- >>>> Ilya Kasnacheev >>>> >>>> >>>> пн, 29 апр. 2019 г. в 13:52, Prasad Bhalerao < >>>> [email protected]>: >>>> >>>>> Hi, >>>>> >>>>> I am getting "*Failed to start near cache* exception" while starting >>>>> near cache only on client node. Near cache is not configured on server >>>>> nodes. >>>>> >>>>> Cache configuration on server is node is as follows: >>>>> >>>>> private CacheConfiguration agCacheCfg() { >>>>> >>>>> CacheConfiguration agCacheCfg = new >>>>> CacheConfiguration<>(CacheName.AG_CACHE.name()); >>>>> agCacheCfg.setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL); >>>>> agCacheCfg.setWriteThrough(ENABLE_WRITE_THROUGH); >>>>> agCacheCfg.setReadThrough(false); >>>>> agCacheCfg.setRebalanceMode(CacheRebalanceMode.ASYNC); >>>>> >>>>> agCacheCfg.setWriteSynchronizationMode(CacheWriteSynchronizationMode.FULL_SYNC); >>>>> agCacheCfg.setBackups(1); >>>>> agCacheCfg.setIndexedTypes(DefaultDataAffinityKey.class, AgData.class); >>>>> Factory<AgDataCacheStore> storeFactory = >>>>> FactoryBuilder.factoryOf(AgDataCacheStore.class); >>>>> agCacheCfg.setCacheStoreFactory(storeFactory); >>>>> >>>>> agCacheCfg.setCacheStoreSessionListenerFactories(cacheStoreSessionListenerFactory()); >>>>> agCacheCfg.setSqlIndexMaxInlineSize(100); >>>>> RendezvousAffinityFunction affinityFunction = new >>>>> RendezvousAffinityFunction(); >>>>> affinityFunction.setExcludeNeighbors(true); >>>>> agCacheCfg.setAffinity(affinityFunction); >>>>> agCacheCfg.setStatisticsEnabled(true); >>>>> >>>>> >>>>> return agCacheCfg; >>>>> } >>>>> >>>>> >>>>> I am using following code to get the Near cache on client node only >>>>> for configured cache names. >>>>> Can some please help me with this? >>>>> >>>>> protected IgniteCache<K, T> cache() { >>>>> String cacheName = getCacheName(); >>>>> if (this.cache == null) { >>>>> //We are configuring few caches only on client node for fast lookup >>>>> during validations. >>>>> if (ignite.configuration().isClientMode() && >>>>> NearCacheName.isNearCache(cacheName)) { >>>>> NearCacheConfiguration<K, T> nearCfg = new >>>>> NearCacheConfiguration<>(); >>>>> nearCfg.setNearEvictionPolicyFactory(new >>>>> LruEvictionPolicyFactory<>(10_000)); >>>>> this.cache = ignite.createNearCache(cacheName, nearCfg); >>>>> } else { >>>>> this.cache = ignite.cache(cacheName); >>>>> } >>>>> } >>>>> return this.cache; >>>>> } >>>>> >>>>> >>>>> *EXCEPTION:* >>>>> >>>>> *javax.cache.CacheException: class >>>>> org.apache.ignite.IgniteCheckedException: Failed to start near cache (a >>>>> cache with the same name without near cache is already started)* >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> * at >>>>> org.apache.ignite.internal.processors.cache.GridCacheUtils.convertToCacheException(GridCacheUtils.java:1303) >>>>> at >>>>> org.apache.ignite.internal.IgniteKernal.createNearCache(IgniteKernal.java:2960) >>>>> at >>>>> org.apache.ignite.IgniteSpringBean.createNearCache(IgniteSpringBean.java:382) >>>>> at >>>>> com.qualys.agms.grid.dao.AbstractDataGridDAO.cache(AbstractDataGridDAO.java:112) >>>>> at >>>>> com.qualys.agms.grid.dao.AbstractDataGridDAO.putData(AbstractDataGridDAO.java:47) >>>>> at >>>>> com.qualys.agms.grid.dao.AbstractDataGridDAO.putData(AbstractDataGridDAO.java:31) >>>>> at >>>>> com.qualys.agms.grid.dataservice.DefaultDataGridService.putData(DefaultDataGridService.java:27) >>>>> at >>>>> com.qualys.agms.grid.dataservice.DefaultDataGridService.putData(DefaultDataGridService.java:10) >>>>> at >>>>> com.qualys.agms.IgniteClientTester.testGet(IgniteClientTester.java:382) >>>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at >>>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) >>>>> at >>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) >>>>> at java.lang.reflect.Method.invoke(Method.java:498) at >>>>> org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) >>>>> at >>>>> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) >>>>> at >>>>> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) >>>>> at >>>>> org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) >>>>> at >>>>> org.springframework.test.context.junit4.statements.RunBeforeTestExecutionCallbacks.evaluate(RunBeforeTestExecutionCallbacks.java:74) >>>>> at >>>>> org.springframework.test.context.junit4.statements.RunAfterTestExecutionCallbacks.evaluate(RunAfterTestExecutionCallbacks.java:84) >>>>> at >>>>> org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75) >>>>> at >>>>> org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86) >>>>> at >>>>> org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84) >>>>> at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) at >>>>> org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:251) >>>>> at >>>>> org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) >>>>> at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at >>>>> org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at >>>>> org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at >>>>> org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at >>>>> org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at >>>>> org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) >>>>> at >>>>> org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) >>>>> at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at >>>>> org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190) >>>>> at org.junit.runner.JUnitCore.run(JUnitCore.java:137) at >>>>> com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68) >>>>> at >>>>> com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47) >>>>> at >>>>> com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242) >>>>> at >>>>> com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)Caused >>>>> by: class org.apache.ignite.IgniteCheckedException: Failed to start near >>>>> cache (a cache with the same name without near cache is already started) >>>>> at >>>>> org.apache.ignite.internal.IgniteKernal.checkNearCacheStarted(IgniteKernal.java:3019) >>>>> at >>>>> org.apache.ignite.internal.IgniteKernal.createNearCache(IgniteKernal.java:2955) >>>>> ... 37 more* >>>>> >>>>> >>>>> Thanks, >>>>> Prasad >>>>> >>>>> On Sat, Apr 20, 2019 at 9:05 AM Denis Magda <[email protected]> wrote: >>>>> >>>>>> Hi Prasad, >>>>>> >>>>>> It's required to define a NearCacheConfiguration on a node you'd like >>>>>> to have it one. Use one of the approaches defined in the docs: >>>>>> https://apacheignite.readme.io/docs/near-caches >>>>>> >>>>>> Near caches can be created directly on *client* nodes by passing >>>>>> NearCacheConfiguration to the >>>>>> Ignite.createNearCache(NearCacheConfiguration) or >>>>>> Ignite.getOrCreateNearCache(NearCacheConfiguration) methods. Use the >>>>>> Ignite.getOrCreateCache(CacheConfiguration, >>>>>> NearCacheConfiguration) method if you need to both start a >>>>>> distributed cache dynamically and create a near cache for it. >>>>>> >>>>>> - >>>>>> Denis >>>>>> >>>>>> >>>>>> On Fri, Apr 19, 2019 at 5:53 AM Prasad Bhalerao < >>>>>> [email protected]> wrote: >>>>>> >>>>>>> Hi, >>>>>>> >>>>>>> Is there any to enable near cache only on client nodes? >>>>>>> >>>>>>> I am using partitioned cache and using colocation to submit the >>>>>>> ignite jobs. But in my code I do few lookups on client node to validate >>>>>>> the >>>>>>> data. To improve this lookup performance I want to enable near cache. >>>>>>> >>>>>>> I saw the example on GitHub and in ignite docs. But I am still >>>>>>> struggling to configure near cache on client nodes only. >>>>>>> >>>>>>> This my Ignite configuration on client node. All the cache >>>>>>> configurations are defined only on ignite server nodes. >>>>>>> >>>>>>> Can some please tell me where to include near cache configuration in >>>>>>> following config? >>>>>>> >>>>>>> private IgniteConfiguration getIgniteConfiguration(IgniteSpringBean >>>>>>> ignite) { >>>>>>> >>>>>>> String[] hosts = appConfigProperties.getHosts().split(","); >>>>>>> TcpDiscoveryVmIpFinder ipFinder = new TcpDiscoveryVmIpFinder(); >>>>>>> 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); >>>>>>> cfg.setClientFailureDetectionTimeout(failureDetectionTimeout); >>>>>>> //cfg.setLifecycleBeans(new IgniteLifeCycleBean()); >>>>>>> cfg.setClientMode(true); >>>>>>> HashMap<String, String> attributeMap = new HashMap<>(); >>>>>>> attributeMap.put(NODE_TYPE,NODE_TYPE_WEB); >>>>>>> cfg.setUserAttributes(attributeMap); >>>>>>> >>>>>>> return cfg; >>>>>>> } >>>>>>> >>>>>>> >>>>>>> >>>>>>> Thanks, >>>>>>> Prasad >>>>>>> >>>>>>
