ignite-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Andrey Kornev (JIRA)" <j...@apache.org>
Subject [jira] [Created] (IGNITE-1899) Incorrect Ignite (IgniteKernal) instance deserialized when multiple Ignite nodes started in the same JVM
Date Thu, 12 Nov 2015 23:37:10 GMT
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)

Mime
View raw message