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