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 >>>>>> >>>>>
