Hello everyone, I've started working on marshaller-related part of IGNITE-4157 <https://issues.apache.org/jira/browse/IGNITE-4157> and think that solution may look like this:
*Storing mapping locally instead of using cache* Instead using marshaller cache for typeId->typeName mapping each node has it's own local copy of mapping in, for instance, ConcurrentHashMap. Each time when a node wants to use new class and therefore to create new mapping it notifies other nodes using DiscoveryCustomMessage; every other node updates its local mapping upon receiving this notification. As DCMs are guaranteed to be delivered to all nodes in the cluster it is possible to keep these local mappings in sync across the cluster. When a node joins the cluster it can obtain current state of mapping using existing collectDiscoveryData/onDiscoveryDataReceived methods in GridCacheProcessor class. *Extended mapping API* Right now marshaller mapping API is very simple and allows only to register or get a single class name under/by a single typeId. This restriction has implications on .NET platform and described in IGNITE-2703 <https://issues.apache.org/jira/browse/IGNITE-2703>. To get rid of this restriction I'm going to add additional byte parameter to registerClass and getClass methods indicating for which platform class is registered or requested. This should allow platforms other than Java to use typeId<->typeName mapping. If you have any suggestions or concerns about proposed solution please reply to this email or comment under corresponding JIRA (IGNITE-4157 <https://issues.apache.org/jira/browse/IGNITE-4157>). Thanks, Sergey.
