Andrey Kornev created IGNITE-1899:
-------------------------------------

             Summary: Incorrect Ignite (IgniteKernal) instance deserialized 
when multiple Ignite nodes started in the same JVM
                 Key: IGNITE-1899
                 URL: https://issues.apache.org/jira/browse/IGNITE-1899
             Project: Ignite
          Issue Type: Bug
          Components: general
            Reporter: Andrey Kornev


The current approach to serialization/deserialization of {{IgniteKernal}} is 
flawed as it relies on the grid name. However, in a situation when a single JVM 
instance has multiple Ignite instances started (as is often the case in unit 
tests) this approach doesn't work. Ignite requires that each Ignite instance 
started within the same JVM be assigned different names. Thus, during 
deserialization on another node a wrong instance of {{IgniteKernal}} gets 
looked up.

Say, the JVM instance has 2 nodes started: node A and node B. Then, when the 
node A serializes {{IgniteKernal}} it'll write the grid name "A" to the wire. 
Then, during deserialization of the {{IgniteKernal}} instance on the node B, 
the name "A" will be read from the wire and used to look up the Ignite instance 
uisng {{Ignition.ignite("A");}}. Clearly the class (holding a reference to 
{{IgniteKernal}}) ends up with a wrong instance of Ignite. If the class also 
retrieves the node-local resources by doing 
{{Ignition.ignite(deserializedGridName).cluster().nodeLocalMap()}} then it may 
end up with incorrect data.

As of Ignite 1.4, {{ClusterGroupAdapter}} class or any other class that 
serialize the instance of {{IgniteKernal}} suffer from this issue. The fix 
would be to simply stop serializing the grid name altogether and during 
deserialization rely on the thread local instead, as per IGNITE-1898.



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

Reply via email to