Hello! I doubt we have expertise on karaf/OSGi here. I'm afraid you will have to file ticket and propose a solution.
Can you also determine when did it break? Regards, -- Ilya Kasnacheev пт, 29 мар. 2019 г. в 17:42, <[email protected]>: > Hello > > > > I’m running Ignite node (v. 2.7.0) inside Karaf 4.2.0 as part of my > application. > > > > The problem that I discovered that I’m unable to join multiple such nodes > into a cluster. > > > > When a new node is joining an existing node it sends its node data which > is supposed to be unmarshalled and validated in > org.apache.ignite.internal.processors.cluster.GridClusterStateProcessor.validateNode(). > The thing is that existing node cannot unmarshal the data and therefore > rejects join request from new node. Error is: > > > > Error on unmarshalling discovery data from node 10.0.2.15,127.0.0.1, > 172.17.0.1:47501: Failed to find class with given class loader for > unmarshalling (make sure same versions of all classes are available on all > nodes or enable peer-class-loading) > [clsLdr=jdk.internal.loader.ClassLoaders$AppClassLoader@5c0369c4, > cls=org.apache.ignite.internal.processors.cluster.DiscoveryDataClusterState]; > node is not allowed to join > > > > This is the code that does unmarshalling: > > > > joiningNodeState = marsh.unmarshal((byte[]) discoData.joiningNodeData(), > Thread.currentThread().getContextClassLoader()); > > > > (link to line > https://github.com/apache/ignite/blob/924139d0a8929e46634f91c5be87c9b9dc2cbb11/modules/core/src/main/java/org/apache/ignite/internal/processors/cluster/GridClusterStateProcessor.java#L967 > ) > > > > Apparently jdk.internal.loader.ClassLoaders$AppClassLoader@ is returned > from Thread.currentThread().getContextClassLoader(). > > > > But *this won’t work for OSGI* because classes of ignite-osgi are only > available in bundle classloader and none of them are available in any other > classloader! > > > > There’s special classloader created for Ignite in ignite-osgi module in > IgniteAbstractOsgiContextActivator.start() and propagated to > IgniteConfiguration object ( line > https://github.com/apache/ignite/blob/924139d0a8929e46634f91c5be87c9b9dc2cbb11/modules/osgi/src/main/java/org/apache/ignite/osgi/IgniteAbstractOsgiContextActivator.java#L102 > ) > > > > Question is what this special classloader is used for and why it doesn’t > appear in output from Thread.currentThread().getContextClassLoader()in > GridClusterStateProcessor.validateNode(). > > > > Just in case, here is link to my project on GitHub: > https://github.com/leshkm/karaf-ignite-test > > > > Best regards, > > Oleksii >
