You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ignite.apache.org by "Andrey Kornev (JIRA)" <ji...@apache.org> on 2015/11/13 00:37:10 UTC

[jira] [Created] (IGNITE-1899) Incorrect Ignite (IgniteKernal) instance deserialized when multiple Ignite nodes started in the same JVM

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)