[ 
https://issues.apache.org/jira/browse/IGNITE-1526?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14935670#comment-14935670
 ] 

Andrey Gura edited comment on IGNITE-1526 at 9/29/15 7:12 PM:
--------------------------------------------------------------

{{serialVersionUID}} was added to some anonymous classes in {{ignite-core}}. 
Discovery works, but requires additional testing.

{{OptimizedMarshaller}} uses JDK {{serialVersionUID}} for classes that 
implement {{Serializable}} interface. It is incorrect behavior for cases with 
different JVMs in cluster. In order to provide backward compatibility this code 
will execute only if special flag switched on via system properties. Otherwise, 
another mechanism will be used for checksum (based on {{serialVersionUID}}) 
calculation. {{IgniteCacheFullApiMultiJvmSelfTestSuite}} with 
{{OptimizedMarshaller}} passed successfully with Oracle JDK on lolcal node and 
IBM JDK on remote nodes.

{{IgniteCacheFullApiMultiJvmSelfTestSuite}} with {{PortableMarshaller}} passed 
almost successfully with different JDKs. But there is one problem in some tests:

{noformat}
class org.apache.ignite.IgniteException: Duplicate ID [id=-1996663899, 
oldCls=org.apache.ignite.testframework.junits.multijvm.IgniteProcessProxy$LocalNodeCallable,
 
newCls=org.apache.ignite.testframework.junits.multijvm.IgniteClusterProcessProxy$LocalNodeCallable
        at 
org.apache.ignite.internal.util.IgniteUtils.convertException(IgniteUtils.java:881)
        at 
org.apache.ignite.internal.IgniteComputeImpl.call(IgniteComputeImpl.java:355)
        at 
org.apache.ignite.testframework.junits.multijvm.IgniteClusterProcessProxy.localNode(IgniteClusterProcessProxy.java:87)
        at 
org.apache.ignite.internal.processors.cache.GridCacheAbstractFullApiSelfTest.testEvictExpired(GridCacheAbstractFullApiSelfTest.java:3176)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at 
org.apache.ignite.testframework.junits.GridAbstractTest.runTestInternal(GridAbstractTest.java:1670)
        at 
org.apache.ignite.testframework.junits.GridAbstractTest.access$000(GridAbstractTest.java:111)
        at 
org.apache.ignite.testframework.junits.GridAbstractTest$6.run(GridAbstractTest.java:1608)
Caused by: class org.apache.ignite.IgniteCheckedException: Duplicate ID 
[id=-1996663899, 
oldCls=org.apache.ignite.testframework.junits.multijvm.IgniteProcessProxy$LocalNodeCallable,
 
newCls=org.apache.ignite.testframework.junits.multijvm.IgniteClusterProcessProxy$LocalNodeCallable
        at 
org.apache.ignite.internal.MarshallerContextAdapter.registerClass(MarshallerContextAdapter.java:163)
        at 
org.apache.ignite.internal.portable.PortableContext.registerUserClassDescriptor(PortableContext.java:549)
        at 
org.apache.ignite.internal.portable.PortableContext.registerClassDescriptor(PortableContext.java:528)
        at 
org.apache.ignite.internal.portable.PortableContext.descriptorForClass(PortableContext.java:443)
        at 
org.apache.ignite.internal.portable.PortableWriterExImpl.marshal(PortableWriterExImpl.java:194)
        at 
org.apache.ignite.internal.portable.PortableWriterExImpl.doWriteObject(PortableWriterExImpl.java:534)
        at 
org.apache.ignite.internal.portable.PortableWriterExImpl.writeObject(PortableWriterExImpl.java:1471)
        at 
org.apache.ignite.internal.processors.closure.GridClosureProcessor$C2.writeExternal(GridClosureProcessor.java:1803)
        at 
org.apache.ignite.internal.portable.PortableClassDescriptor.write(PortableClassDescriptor.java:543)
        at 
org.apache.ignite.internal.portable.PortableWriterExImpl.marshal(PortableWriterExImpl.java:261)
        at 
org.apache.ignite.internal.portable.GridPortableMarshaller.marshal(GridPortableMarshaller.java:228)
        at 
org.apache.ignite.internal.portable.api.PortableMarshaller.marshal(PortableMarshaller.java:317)
        at 
org.apache.ignite.internal.processors.task.GridTaskWorker.sendRequest(GridTaskWorker.java:1203)
        at 
org.apache.ignite.internal.processors.task.GridTaskWorker.processMappedJobs(GridTaskWorker.java:609)
        at 
org.apache.ignite.internal.processors.task.GridTaskWorker.body(GridTaskWorker.java:501)
        at 
org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:110)
        at 
org.apache.ignite.internal.processors.task.GridTaskProcessor.startTask(GridTaskProcessor.java:678)
        at 
org.apache.ignite.internal.processors.task.GridTaskProcessor.execute(GridTaskProcessor.java:403)
        at 
org.apache.ignite.internal.processors.closure.GridClosureProcessor.callAsync(GridClosureProcessor.java:583)
        at 
org.apache.ignite.internal.processors.closure.GridClosureProcessor.callAsync(GridClosureProcessor.java:423)
        at 
org.apache.ignite.internal.IgniteComputeImpl.call(IgniteComputeImpl.java:352)
        ... 10 more
{noformat}

I think this behaviour should be revisited in order to avoid or resolve 
collisions.


was (Author: agura):
{{serialVersionUID}} was added to some anonymous classes in {{ignite-core}}. 
Discovery works, but requires additional testing.

{{OptimizedMarshaller}} uses JDK {{serialVersionUID}} for classes that 
implement {{Serializable}} interface. It is incorrect behavior for cases with 
different JVMs in cluster. In order to provide backward compatibility this code 
will execute only if special flag switched on via system properties. Otherwise, 
another mechanism will be used for checksum (based on {{serialVersionUID}}) 
calculation. {{IgniteCacheFullApiMultiJvmSelfTestSuite}} with 
{{OptimizedMarshaller}} passed successfully with Oracle JDK on lolcal node and 
IBM JDK on remote nodes.

{{IgniteCacheFullApiMultiJvmSelfTestSuite}} with {{PortableMarshaller}} passed 
almost successfully with different JDKs. But there is one problem in some tests:

{noformat}
class org.apache.ignite.IgniteException: Duplicate ID [id=-1996663899, 
oldCls=org.apache.ignite.testframework.junits.multijvm.IgniteProcessProxy$LocalNodeCallable,
 
newCls=org.apache.ignite.testframework.junits.multijvm.IgniteClusterProcessProxy$LocalNodeCallable
        at 
org.apache.ignite.internal.util.IgniteUtils.convertException(IgniteUtils.java:881)
        at 
org.apache.ignite.internal.IgniteComputeImpl.call(IgniteComputeImpl.java:355)
        at 
org.apache.ignite.testframework.junits.multijvm.IgniteClusterProcessProxy.localNode(IgniteClusterProcessProxy.java:87)
        at 
org.apache.ignite.internal.processors.cache.GridCacheAbstractFullApiSelfTest.testEvictExpired(GridCacheAbstractFullApiSelfTest.java:3176)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at 
org.apache.ignite.testframework.junits.GridAbstractTest.runTestInternal(GridAbstractTest.java:1670)
        at 
org.apache.ignite.testframework.junits.GridAbstractTest.access$000(GridAbstractTest.java:111)
        at 
org.apache.ignite.testframework.junits.GridAbstractTest$6.run(GridAbstractTest.java:1608)
Caused by: class org.apache.ignite.IgniteCheckedException: Duplicate ID 
[id=-1996663899, 
oldCls=org.apache.ignite.testframework.junits.multijvm.IgniteProcessProxy$LocalNodeCallable,
 
newCls=org.apache.ignite.testframework.junits.multijvm.IgniteClusterProcessProxy$LocalNodeCallable
        at 
org.apache.ignite.internal.MarshallerContextAdapter.registerClass(MarshallerContextAdapter.java:163)
        at 
org.apache.ignite.internal.portable.PortableContext.registerUserClassDescriptor(PortableContext.java:549)
        at 
org.apache.ignite.internal.portable.PortableContext.registerClassDescriptor(PortableContext.java:528)
        at 
org.apache.ignite.internal.portable.PortableContext.descriptorForClass(PortableContext.java:443)
        at 
org.apache.ignite.internal.portable.PortableWriterExImpl.marshal(PortableWriterExImpl.java:194)
        at 
org.apache.ignite.internal.portable.PortableWriterExImpl.doWriteObject(PortableWriterExImpl.java:534)
        at 
org.apache.ignite.internal.portable.PortableWriterExImpl.writeObject(PortableWriterExImpl.java:1471)
        at 
org.apache.ignite.internal.processors.closure.GridClosureProcessor$C2.writeExternal(GridClosureProcessor.java:1803)
        at 
org.apache.ignite.internal.portable.PortableClassDescriptor.write(PortableClassDescriptor.java:543)
        at 
org.apache.ignite.internal.portable.PortableWriterExImpl.marshal(PortableWriterExImpl.java:261)
        at 
org.apache.ignite.internal.portable.GridPortableMarshaller.marshal(GridPortableMarshaller.java:228)
        at 
org.apache.ignite.internal.portable.api.PortableMarshaller.marshal(PortableMarshaller.java:317)
        at 
org.apache.ignite.internal.processors.task.GridTaskWorker.sendRequest(GridTaskWorker.java:1203)
        at 
org.apache.ignite.internal.processors.task.GridTaskWorker.processMappedJobs(GridTaskWorker.java:609)
        at 
org.apache.ignite.internal.processors.task.GridTaskWorker.body(GridTaskWorker.java:501)
        at 
org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:110)
        at 
org.apache.ignite.internal.processors.task.GridTaskProcessor.startTask(GridTaskProcessor.java:678)
        at 
org.apache.ignite.internal.processors.task.GridTaskProcessor.execute(GridTaskProcessor.java:403)
        at 
org.apache.ignite.internal.processors.closure.GridClosureProcessor.callAsync(GridClosureProcessor.java:583)
        at 
org.apache.ignite.internal.processors.closure.GridClosureProcessor.callAsync(GridClosureProcessor.java:423)
        at 
org.apache.ignite.internal.IgniteComputeImpl.call(IgniteComputeImpl.java:352)
        ... 10 more
{noformat}

I think this behaviour should be revisited in order to avoid or resole 
collisions.

> IBM JDK is not fully supported by the platfrom
> ----------------------------------------------
>
>                 Key: IGNITE-1526
>                 URL: https://issues.apache.org/jira/browse/IGNITE-1526
>             Project: Ignite
>          Issue Type: Bug
>            Reporter: Denis Magda
>            Assignee: Andrey Gura
>            Priority: Blocker
>             Fix For: ignite-1.5
>
>
> There are several issue related to IBM JDK.
> 1) It's not possible to compile the platform using IBM JDK ver 1.7;
> 2) Besides of the fact that two IBM nodes can connect to each other some 
> functionality still doesn't work. As an example 
> {{CacheClientPortablePutGetExample}} fails with the following stack trace
> {noformat}
> [14:38:56,930][ERROR][grid-nio-worker-0-#26%null%][TcpCommunicationSpi] 
> Caught unhandled exception in NIO worker thread (restart the node).
> class org.apache.ignite.IgniteException: Invalid field type: 0
>       at 
> org.gridgain.grid.internal.communication.PortableDirectMessageReader.readRemovedField(PortableDirectMessageReader.java:670)
>       at 
> org.gridgain.grid.internal.communication.PortableDirectMessageReader.readFieldHeader(PortableDirectMessageReader.java:520)
>       at 
> org.gridgain.grid.internal.communication.PortableDirectMessageReader.readMessage(PortableDirectMessageReader.java:339)
>       at 
> org.apache.ignite.internal.managers.communication.GridIoMessage.readFrom(GridIoMessage.java:248)
>       at 
> org.apache.ignite.internal.util.nio.GridDirectParser.decode(GridDirectParser.java:76)
>       at 
> org.apache.ignite.internal.util.nio.GridNioCodecFilter.onMessageReceived(GridNioCodecFilter.java:103)
>       at 
> org.apache.ignite.internal.util.nio.GridNioFilterAdapter.proceedMessageReceived(GridNioFilterAdapter.java:107)
>       at 
> org.apache.ignite.internal.util.nio.GridConnectionBytesVerifyFilter.onMessageReceived(GridConnectionBytesVerifyFilter.java:122)
>       at 
> org.apache.ignite.internal.util.nio.GridNioFilterAdapter.proceedMessageReceived(GridNioFilterAdapter.java:107)
>       at 
> org.apache.ignite.internal.util.nio.GridNioServer$HeadFilter.onMessageReceived(GridNioServer.java:2078)
>       at 
> org.apache.ignite.internal.util.nio.GridNioFilterChain.onMessageReceived(GridNioFilterChain.java:172)
>       at 
> org.apache.ignite.internal.util.nio.GridNioServer$DirectNioClientWorker.processRead(GridNioServer.java:858)
>       at 
> org.apache.ignite.internal.util.nio.GridNioServer$AbstractNioClientWorker.processSelectedKeys(GridNioServer.java:1397)
>       at 
> org.apache.ignite.internal.util.nio.GridNioServer$AbstractNioClientWorker.bodyInternal(GridNioServer.java:1339)
>       at 
> org.apache.ignite.internal.util.nio.GridNioServer$AbstractNioClientWorker.body(GridNioServer.java:1223)
>       at 
> org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:108)
>       at java.lang.Thread.run(Thread.java:801)
> {noformat}
> 3) Oracle JVM based server node fails to connect to IBM server node producing 
> the stack trace below. Tested with JDK and Portable marshallers.
> {noformat}
> [13:47:33,935][SEVERE][tcp-disco-msg-worker-#2%null][TcpDiscoverySpi] Failed 
> to
> unmarshal discovery data for component: 0
> class org.apache.ignite.IgniteCheckedException: Failed to deserialize object 
> wit
> h given class loader: sun.misc.Launcher$AppClassLoader@56092666
>         at 
> org.apache.ignite.marshaller.jdk.JdkMarshaller.unmarshal(JdkMarshalle
> r.java:105)
>         at 
> org.apache.ignite.marshaller.AbstractMarshaller.unmarshal(AbstractMar
> shaller.java:68)
>         at 
> org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi.onExchange(TcpDis
> coverySpi.java:1697)
>         at 
> org.apache.ignite.spi.discovery.tcp.ServerImpl$RingMessageWorker.proc
> essNodeAddedMessage(ServerImpl.java:3258)
>         at 
> org.apache.ignite.spi.discovery.tcp.ServerImpl$RingMessageWorker.proc
> essMessage(ServerImpl.java:1993)
>         at 
> org.apache.ignite.spi.discovery.tcp.ServerImpl$MessageWorkerAdapter.b
> ody(ServerImpl.java:5206)
>         at org.apache.ignite.spi.IgniteSpiThread.run(IgniteSpiThread.java:62)
> Caused by: java.io.InvalidClassException: 
> org.apache.ignite.internal.util.lang.G
> ridFunc$38; local class incompatible: stream classdesc serialVersionUID = 
> -55433
> 49853748590486, local class serialVersionUID = -5664060422647374863
>         at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:617)
>         at 
> java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:162
> 2)
>         at 
> java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1517)
>         at 
> java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1
> 771)
>         at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
>         at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
>         at 
> org.apache.ignite.internal.processors.continuous.GridContinuousProces
> sor$DiscoveryDataItem.readExternal(GridContinuousProcessor.java:1455)
>         at 
> java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:183
> 7)
>         at 
> java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1
> 796)
>         at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
>         at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
>         at 
> org.apache.ignite.internal.util.IgniteUtils.readList(IgniteUtils.java
> :5109)
>         at 
> org.apache.ignite.internal.util.IgniteUtils.readCollection(IgniteUtil
> s.java:1618)
>         at 
> org.apache.ignite.internal.processors.continuous.GridContinuousProces
> sor$DiscoveryData.readExternal(GridContinuousProcessor.java:1371)
>         at 
> java.io.ObjectInputStream.readExternalData(ObjectInputStream.java:183
> 7)
>         at 
> java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1
> 796)
>         at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
>         at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
>         at 
> org.apache.ignite.marshaller.jdk.JdkMarshaller.unmarshal(JdkMarshalle
> r.java:102)
>         ... 6 more
> {noformat}
> 4) Oracle JVM based client node is partially connected to IBM server node. 
> The server node updates its topology while the client is hanging with the 
> stack trace below. Tested with JDK and Portable marshallers.:
> {noformat}
> "main" prio=6 tid=0x00000000001ee800 nid=0x1f44 waiting on condition 
> [0x00000000025ce000]
>    java.lang.Thread.State: WAITING (parking)
>       at sun.misc.Unsafe.park(Native Method)
>       - parking to wait for  <0x00000007d7ad4478> (a 
> java.util.concurrent.CountDownLatch$Sync)
>       at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
>       at 
> java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:834)
>       at 
> java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:994)
>       at 
> java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1303)
>       at java.util.concurrent.CountDownLatch.await(CountDownLatch.java:236)
>       at 
> org.apache.ignite.spi.discovery.tcp.ClientImpl.spiStart(ClientImpl.java:252)
>       at 
> org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi.spiStart(TcpDiscoverySpi.java:1815)
>       at 
> org.apache.ignite.internal.managers.GridManagerAdapter.startSpi(GridManagerAdapter.java:252)
>       at 
> org.apache.ignite.internal.managers.discovery.GridDiscoveryManager.start(GridDiscoveryManager.java:666)
>       at 
> org.apache.ignite.internal.IgniteKernal.startManager(IgniteKernal.java:1485)
>       at org.apache.ignite.internal.IgniteKernal.start(IgniteKernal.java:908)
>       at 
> org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.start0(IgnitionEx.java:1617)
>       at 
> org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.start(IgnitionEx.java:1484)
>       - locked <0x00000007d7bbb918> (a 
> org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance)
>       at org.apache.ignite.internal.IgnitionEx.start0(IgnitionEx.java:965)
>       at 
> org.apache.ignite.internal.IgnitionEx.startConfigurations(IgnitionEx.java:892)
>       at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:784)
>       at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:705)
>       at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:576)
>       at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:546)
>       at org.apache.ignite.Ignition.start(Ignition.java:346)
> {noformat}
> IBM SDK implements {{sun.misc.Unsafe}}. However there is no guarantee that it 
> works the same way Oracle's does.
> In all the test the following JDK versions were used:
> 1) IBM
> java version "1.7.0"
> Java(TM) SE Runtime Environment (build pwa6470sr8fp10-20141219_01(SR8 FP10))
> IBM J9 VM (build 2.6, JRE 1.7.0 Windows 7 amd64-64 Compressed References 
> 2014121
> 6_227497 (JIT enabled, AOT enabled)
> J9VM - R26_Java726_SR8_20141216_0955_B227497
> JIT  - r11.b07_20141003_74578.05
> GC   - R26_Java726_SR8_20141216_0955_B227497_CMPRSS
> J9CL - 20141216_227497)
> JCL - 20141217_01 based on Oracle jdk7u75-b12
> 2) Oracle
> java version "1.7.0_67"
> Java(TM) SE Runtime Environment (build 1.7.0_67-b01)
> Java HotSpot(TM) 64-Bit Server VM (build 24.65-b04, mixed mode)



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to