Michael Griggs created IGNITE-1903:
--------------------------------------

             Summary: CacheStore implementation is serialised to grid clients 
whether they require it or not
                 Key: IGNITE-1903
                 URL: https://issues.apache.org/jira/browse/IGNITE-1903
             Project: Ignite
          Issue Type: Bug
    Affects Versions: 1.5
            Reporter: Michael Griggs


See User discussion thread:  
http://apache-ignite-users.70518.x6.nabble.com/CacheStore-being-serialized-to-client-td1931.html

Brief summary:  When a grid client joins the grid (clientMode=true) it receives 
a message from the server node(s) on the grid that contains the serialized 
CacheStore implementation object.  If the client does not have this class on 
its CLASSPATH (and there is no reason it should, as it is a client) then the 
de-serialization of this message will fail, causing this exception:

{{SEVERE: Failed to unmarshal discovery data for component: 1 
class org.apache.ignite.IgniteCheckedException: Failed to find class with given 
class loader for unmarshalling (make sure same versions of all classes are 
available on all nodes or enable peer-class-loading): 
sun.misc.Launcher$AppClassLoader@14dad5dc 
        at 
org.apache.ignite.marshaller.jdk.JdkMarshaller.unmarshal(JdkMarshaller.java:104)
 
        at 
org.apache.ignite.marshaller.AbstractMarshaller.unmarshal(AbstractMarshaller.java:67)
 
        at 
org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi.onExchange(TcpDiscoverySpi.java:1529)
 
        at 
org.apache.ignite.spi.discovery.tcp.ClientImpl$MessageWorker.processNodeAddFinishedMessage(ClientImpl.java:1317)
 
        at 
org.apache.ignite.spi.discovery.tcp.ClientImpl$MessageWorker.processDiscoveryMessage(ClientImpl.java:1229)
 
        at 
org.apache.ignite.spi.discovery.tcp.ClientImpl$MessageWorker.body(ClientImpl.java:1199)
 
        at org.apache.ignite.spi.IgniteSpiThread.run(IgniteSpiThread.java:62) 
Caused by: java.lang.ClassNotFoundException: 
c.g.r.cachewrapper.ignite.CacheMissHandlerIgnite}}

where {{c.g.r.cachewrapper.ignite.CacheMissHandlerIgnite}} is the CacheStore 
implementation.

The ostensible reason for the CacheStore serialization is so that clients of a 
TRANSACTIONAL cache can begin the transaction on the underlying store.  

The only current solution to this is to add the grid node's CacheStore 
implementation class definition to the CLASSPATH of the client.  This creates 
an *undesirable coupling* between server and client.




--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to