[
https://issues.apache.org/jira/browse/IGNITE-1899?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Yakov Zhdanov closed IGNITE-1899.
---------------------------------
> 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)