This exception appears due to the fact that .NET store can't be initialized on C++ node.
Add the following line to C++ config to run the node in client mode, so it does not store cache data and initialize cache store: <property name="clientMode" value="true"/> Let me know if this helps. Pavel. On Sun, Apr 17, 2016 at 2:35 PM, Murthy Kakarlamudi <[email protected]> wrote: > Hi Pavel...such an obvious thing that I missed. I was always looking at > the .net node config as the error said remote node. Thanks for pointing it > out. I am now getting a different error. I do have a question. As I > mentioned node that gets started from .net acts as server node and loads > the database into cache. So its config has all the CacheStore relation > information. In my c++ node, acting as a client, what should go in its > config? As it does not access DB, I assumed CacheStore related information > is not needed in its config. So I am not sure what should go into my c++ > config. If I do have to have the CacheStore info in the c++ client node, Is > there a c++ cachestore implementation example? > > Below is the error I am getting: > [07:18:03,292][SEVERE][main][IgniteKernal] Got exception while starting > (will rollback startup routine). > PlatformNoCallbackException [] > at > org.apache.ignite.internal.processors.platform.callback.PlatformCallbackUtils.cacheStoreCreate(Native > Method) > at > org.apache.ignite.internal.processors.platform.callback.PlatformCallbackGateway.cacheStoreCreate(PlatformCallbackGateway.java:63) > at > org.apache.ignite.internal.processors.platform.dotnet.PlatformDotNetCacheStore.initialize(PlatformDotNetCacheStore.java:338) > at > org.apache.ignite.internal.processors.platform.PlatformProcessorImpl.registerStore0(PlatformProcessorImpl.java:347) > at > org.apache.ignite.internal.processors.platform.PlatformProcessorImpl.registerStore(PlatformProcessorImpl.java:317) > at > org.apache.ignite.internal.processors.cache.store.CacheOsStoreManager.start0(CacheOsStoreManager.java:60) > at > org.apache.ignite.internal.processors.cache.GridCacheManagerAdapter.start(GridCacheManagerAdapter.java:50) > at > org.apache.ignite.internal.processors.cache.GridCacheProcessor.startCache(GridCacheProcessor.java:1051) > at > org.apache.ignite.internal.processors.cache.GridCacheProcessor.onKernalStart(GridCacheProcessor.java:787) > at > org.apache.ignite.internal.IgniteKernal.start(IgniteKernal.java:946) > at > org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.start0(IgnitionEx.java:1688) > at > org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.start(IgnitionEx.java:1547) > at > org.apache.ignite.internal.IgnitionEx.start0(IgnitionEx.java:1003) > at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:534) > at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:515) > at org.apache.ignite.Ignition.start(Ignition.java:322) > at > org.apache.ignite.internal.processors.platform.PlatformAbstractBootstrap.start(PlatformAbstractBootstrap.java:36) > at > org.apache.ignite.internal.processors.platform.PlatformIgnition.start(PlatformIgnition.java:72) > [07:18:03] Ignite node stopped OK [uptime=00:00:08:267] > An error occurred: Callback handler is not set in native platform. > > On Sun, Apr 17, 2016 at 4:15 AM, Pavel Tupitsyn <[email protected]> > wrote: > >> Hi, >> >> > Remote node has peer class loading enabled flag different from local >> As the error message says, peerClassLoading flag has to be the same on >> all nodes. >> >> Please remove the following line from your C++ config: >> <property name="peerClassLoadingEnabled" value="true"/> >> >> Pavel. >> >> On Sun, Apr 17, 2016 at 2:29 AM, Murthy Kakarlamudi <[email protected]> >> wrote: >> >>> Hi, >>> In my use case, I am starting a node from .net which loads data from >>> SQL Server table into cache upon start up. I have to read those entries >>> from cache from a c++ node that acts as a client. I am getting the below >>> error trying to start the node from c++. >>> >>> [19:08:57] Security status [authentication=off, tls/ssl=off] >>> [19:08:58,163][SEVERE][main][IgniteKernal] Failed to start manager: >>> GridManagerAdapter [enabled=true, >>> name=o.a.i.i.managers.discovery.GridDiscoveryManager] >>> class org.apache.ignite.IgniteCheckedException: Remote node has peer >>> class loading enabled flag different from local [locId8=f02445af, >>> locPeerClassLoading=true, rmtId8=8e52f9c9, rmtPeerClassLoading=false, >>> rmtAddrs=[LAPTOP-QIT4AVOG/0:0:0:0:0:0:0:1, LAPTOP-QIT4AVOG/127.0.0.1, >>> LAPTOP-QIT4AVOG/192.168.0.5, >>> LAPTOP-QIT4AVOG/2001:0:9d38:90d7:145b:5bf:bb9b:11d9, >>> LAPTOP-QIT4AVOG/2600:8806:0:8d00:0:0:0:1, >>> /2600:8806:0:8d00:3ccf:1e94:1ab4:83a9, >>> /2600:8806:0:8d00:f114:bf30:2068:352d]] >>> at >>> org.apache.ignite.internal.managers.discovery.GridDiscoveryManager.checkAttributes(GridDiscoveryManager.java:1027) >>> at >>> org.apache.ignite.internal.managers.discovery.GridDiscoveryManager.start(GridDiscoveryManager.java:680) >>> at >>> org.apache.ignite.internal.IgniteKernal.startManager(IgniteKernal.java:1505) >>> at >>> org.apache.ignite.internal.IgniteKernal.start(IgniteKernal.java:917) >>> at >>> org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.start0(IgnitionEx.java:1688) >>> at >>> org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.start(IgnitionEx.java:1547) >>> at >>> org.apache.ignite.internal.IgnitionEx.start0(IgnitionEx.java:1003) >>> at >>> org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:534) >>> at >>> org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:515) >>> at org.apache.ignite.Ignition.start(Ignition.java:322) >>> at >>> org.apache.ignite.internal.processors.platform.PlatformAbstractBootstrap.start(PlatformAbstractBootstrap.java >>> >>> Below if my config for .net node: >>> <?xml version="1.0" encoding="UTF-8"?> >>> >>> <beans xmlns="http://www.springframework.org/schema/beans" >>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >>> xsi:schemaLocation=" >>> http://www.springframework.org/schema/beans >>> http://www.springframework.org/schema/beans/spring-beans.xsd"> >>> <bean id="ignite.cfg" >>> class="org.apache.ignite.configuration.IgniteConfiguration"> >>> <property name="connectorConfiguration"> >>> <bean >>> class="org.apache.ignite.configuration.ConnectorConfiguration"> >>> <property name="idleTimeout" value="20000"/> >>> </bean> >>> </property> >>> >>> <property name="cacheConfiguration"> >>> <list> >>> <bean class="org.apache.ignite.configuration.CacheConfiguration"> >>> <property name="name" value="BU"/> >>> <property name="writeThrough" value="true"/> >>> <property name="readThrough" value="true"/> >>> <property name="writeBehindEnabled" value="true"/> >>> <property name="writeBehindFlushFrequency" value="120000"/> >>> <property name="cacheStoreFactory"> >>> <bean >>> class="org.apache.ignite.platform.dotnet.PlatformDotNetCacheStoreFactory"> >>> <property name="typeName" >>> value="TestIgniteDAL.SQLServerStore, TestIgniteDAL"/> >>> </bean> >>> </property> >>> <property name ="typeMetadata"> >>> <list> >>> <bean class="org.apache.ignite.cache.CacheTypeMetadata"> >>> <!-- Type to query. --> >>> <property name="valueType" value="BusinessUnit"/> >>> <!-- Fields to be queried. --> >>> <property name="queryFields"> >>> <map> >>> <entry key="BUID" value="java.lang.Integer"/> >>> <entry key="BUName" value="java.lang.String"/> >>> <entry key="CreatedByID" value="java.lang.Integer"/> >>> <entry key="CreatedDate" value="java.util.Date"/> >>> <entry key="ModifiedByID" value="java.lang.Integer"/> >>> <entry key="ModifiedDate" value="java.util.Date"/> >>> </map> >>> </property> >>> <!-- Fields to index in ascending order. --> >>> <property name="ascendingFields"> >>> <map> >>> <entry key="BUID" value="java.lang.Integer"/> >>> </map> >>> </property> >>> </bean> >>> </list> >>> </property> >>> </bean> >>> </list> >>> </property> >>> >>> <property name="communicationSpi"> >>> <bean >>> class="org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi"> >>> <property name="sharedMemoryPort" value="-1"/> >>> </bean> >>> </property> >>> >>> <property name="discoverySpi"> >>> <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi"> >>> <property name="ipFinder"> >>> <bean >>> class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder"> >>> <property name="addresses"> >>> <list> >>> <value>127.0.0.1:47500..47509</value> >>> </list> >>> </property> >>> </bean> >>> </property> >>> </bean> >>> </property> >>> </bean> >>> </beans> >>> >>> >>> Below is my config for node from c++: >>> <?xml version="1.0" encoding="UTF-8"?> >>> >>> <!-- >>> Licensed to the Apache Software Foundation (ASF) under one or more >>> contributor license agreements. See the NOTICE file distributed with >>> this work for additional information regarding copyright ownership. >>> The ASF licenses this file to You under the Apache License, Version 2.0 >>> (the "License"); you may not use this file except in compliance with >>> the License. You may obtain a copy of the License at >>> >>> http://www.apache.org/licenses/LICENSE-2.0 >>> >>> Unless required by applicable law or agreed to in writing, software >>> distributed under the License is distributed on an "AS IS" BASIS, >>> WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or >>> implied. >>> See the License for the specific language governing permissions and >>> limitations under the License. >>> --> >>> >>> <beans xmlns="http://www.springframework.org/schema/beans" >>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >>> xmlns:util="http://www.springframework.org/schema/util" >>> xsi:schemaLocation=" >>> http://www.springframework.org/schema/beans >>> http://www.springframework.org/schema/beans/spring-beans.xsd >>> http://www.springframework.org/schema/util >>> http://www.springframework.org/schema/util/spring-util.xsd"> >>> <bean id="grid.cfg" >>> class="org.apache.ignite.configuration.IgniteConfiguration"> >>> <!-- Set to true to enable distributed class loading for >>> examples, default is false. --> >>> <property name="peerClassLoadingEnabled" value="true"/> >>> >>> <property name="cacheConfiguration"> >>> <list> >>> <!-- >>> Partitioned cache example configuration with binary >>> objects enabled. >>> Used in .NET example that is available only in >>> enterprise edition. >>> --> >>> <bean >>> class="org.apache.ignite.configuration.CacheConfiguration"> >>> <property name="atomicityMode" value="ATOMIC"/> >>> <property name="backups" value="1"/> >>> </bean> >>> >>> <!-- >>> Partitioned cache example configuration. >>> Used in .NET cache store example that is available >>> only in enterprise edition. >>> --> >>> <bean >>> class="org.apache.ignite.configuration.CacheConfiguration"> >>> <property name="name" value="tx"/> >>> <property name="atomicityMode" >>> value="TRANSACTIONAL"/> >>> <property name="backups" value="1"/> >>> </bean> >>> </list> >>> </property> >>> >>> <!-- Explicitly configure TCP discovery SPI to provide list of >>> initial nodes. --> >>> <property name="discoverySpi"> >>> <bean >>> class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi"> >>> <property name="ipFinder"> >>> <!-- >>> Ignite provides several options for automatic >>> discovery that can be used >>> instead os static IP based discovery. >>> --> >>> <!-- Uncomment static IP finder to enable >>> static-based discovery of initial nodes. --> >>> <bean >>> class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder"> >>> <!-- <bean >>> class="org.apache.ignite.spi.discovery.tcp.ipfinder.multicast.TcpDiscoveryMulticastIpFinder"> >>> --> >>> <property name="addresses"> >>> <list> >>> <!-- In distributed environment, replace >>> with actual host IP address. --> >>> <value>127.0.0.1:47500..47501</value> >>> </list> >>> </property> >>> </bean> >>> </property> >>> </bean> >>> </property> >>> </bean> >>> </beans> >>> >>> Below c++ code is trying to access the cache: >>> int main() >>> { >>> IgniteConfiguration cfg; >>> >>> cfg.jvmInitMem = 512; >>> cfg.jvmMaxMem = 512; >>> >>> //cfg.springCfgPath = "platforms/cpp/examples/config/example-cache.xml"; >>> cfg.springCfgPath = "config/example-cache.xml"; >>> try >>> { >>> // Start a node. >>> Ignite grid = Ignition::Start(cfg); >>> std::cout << std::endl; >>> std::cout << ">>> Cache node started." << std::endl; >>> std::cout << std::endl; >>> >>> //string key >>> Cache<std::string, CBusinessObject> cache = grid.GetCache<std::string, >>> CBusinessObject>("BU"); >>> cache.Clear(); >>> CBusinessObject obj("MSFT", 45.23); >>> //save in cache >>> cache.Put("MSFT", obj); >>> >>> //retreive from cache >>> CBusinessObject result = cache.Get("MSFT"); >>> >>> std::cout << result.ToString(); >>> >>> // Stop node. >>> Ignition::StopAll(false); >>> } >>> catch (IgniteError& err) >>> { >>> std::cout << "An error occurred: " << err.GetText() << std::endl; >>> } >>> >>> std::cout << std::endl; >>> std::cout << ">>> Execution finished, press any key to exit ..." << >>> std::endl; >>> std::cout << std::endl; >>> >>> std::cin.get(); >>> >>> return 0; >>> } >>> >>> Thanks for any help. >>> >> >> >
