Uploaded image for project: 'Corda'
  1. CORDA-2742

RPC v4 client unable to subscribe to progress tracker events from Corda 3.3 node

    Details

    • Type: Bug
    • Status: Done (View workflow)
    • Priority: High
    • Resolution: Done
    • Affects versions: Corda 4, Corda Enterprise 4.0 RC04
    • Fix versions: Corda 4.1, Corda 3.4
    • Components: None
    • Labels:
      None

      Description

      Checkout the releases/release-V3 branch of enterprise
      Update the root build.gradle to set the release version to 3.4-SNAPSHOT
      Run gradlew install -x test (if on windows/Mac OS you need to comment out lines 239-242 in node/dist/build.gradle

      git clone https://github.com/anthonykeenan/samples
      cd samples/obligation-cordapp
      git checkout release-V3-enterprise-serialization-repro-2
      gradlew :kotlin-source:deployNodes

      Run kotlin-source/build/nodes/runnodes

      Once all nodes have started

      navigate to Main.kt in the rpc-client project.
      Run fun Main
      This issues cash with an RPC client using the latest enterprise snapshot and the Finance 3.3 cordapp

      It fails to issue cash on the V3.3 node with:

      Exception in thread "main" net.corda.client.rpc.RPCException: net.corda.core.utilities.Try$Success (erased) -> value(*) ->           Cannot construct evolution serializer for remote type net.corda.core.messaging.DataFeed<java.lang.Integer, java.lang.Integer>
      snapshot: int
      updates: rx.Observable<java.lang.Integer>
      
                Local type class java.lang.Integer of property snapshot is not assignable from remote type int
              at net.corda.client.rpc.internal.RPCClientProxyHandler.invoke(RPCClientProxyHandler.kt:279)
              at com.sun.proxy.$Proxy3.startTrackedFlowDynamic(Unknown Source)
              at net.obligation.rpcClient.MainKt.cashIssue(Main.kt:26)
              at net.obligation.rpcClient.MainKt.main(Main.kt:15)
      Caused by: net.corda.serialization.internal.amqp.EvolutionSerializationException: net.corda.core.utilities.Try$Success (erased) -> value(*) ->           Cannot construct evolution serializer for remote type net.corda.core.messaging.DataFeed<java.lang.Integer, java.lang.Integer>
      snapshot: int
      updates: rx.Observable<java.lang.Integer>
      
                Local type class java.lang.Integer of property snapshot is not assignable from remote type int
              at net.corda.serialization.internal.amqp.DefaultEvolutionSerializerFactory.validateCompatibility(EvolutionSerializerFactory.kt:80)
              at net.corda.serialization.internal.amqp.DefaultEvolutionSerializerFactory.getEvolutionSerializer(EvolutionSerializerFactory.kt:56)
              at net.corda.serialization.internal.amqp.DefaultEvolutionSerializerFactory.getEvolutionSerializer(EvolutionSerializerFactory.kt:40)
              at net.corda.serialization.internal.amqp.DefaultRemoteSerializerFactory.getUncached(RemoteSerializerFactory.kt:107)
              at net.corda.serialization.internal.amqp.DefaultRemoteSerializerFactory.access$getUncached(RemoteSerializerFactory.kt:48)
              at net.corda.serialization.internal.amqp.DefaultRemoteSerializerFactory$get$1$$special$$inlined$mapValues$lambda$1.invoke(RemoteSerializerFactory.kt:78)
              at net.corda.serialization.internal.amqp.DefaultRemoteSerializerFactory$get$1$$special$$inlined$mapValues$lambda$1.invoke(RemoteSerializerFactory.kt:48)
              at net.corda.serialization.internal.amqp.DefaultDescriptorBasedSerializerRegistry.getOrBuild(DescriptorBasedSerializerRegistry.kt:28)
              at net.corda.serialization.internal.amqp.DefaultRemoteSerializerFactory$get$1.invoke(RemoteSerializerFactory.kt:77)
              at net.corda.serialization.internal.amqp.DefaultRemoteSerializerFactory$get$1.invoke(RemoteSerializerFactory.kt:48)
              at net.corda.serialization.internal.amqp.DefaultDescriptorBasedSerializerRegistry.getOrBuild(DescriptorBasedSerializerRegistry.kt:28)
              at net.corda.serialization.internal.amqp.DefaultRemoteSerializerFactory.get(RemoteSerializerFactory.kt:67)
              at net.corda.serialization.internal.amqp.ComposedSerializerFactory.get(SerializerFactory.kt)
              at net.corda.serialization.internal.amqp.DeserializationInput.readObject$serialization(DeserializationInput.kt:172)
              at net.corda.serialization.internal.amqp.DeserializationInput.readObjectOrNull$serialization(DeserializationInput.kt:147)
              at net.corda.serialization.internal.amqp.DescribedTypeReadStrategy.readProperty(ComposableTypePropertySerializer.kt:202)
              at net.corda.serialization.internal.amqp.ComposableTypePropertySerializer.readProperty(ComposableTypePropertySerializer.kt)
              at net.corda.serialization.internal.amqp.ComposableObjectReader$readObject$$inlined$ifThrowsAppend$lambda$1.invoke(ObjectSerializer.kt:140)
              at net.corda.serialization.internal.amqp.ComposableObjectReader$readObject$$inlined$ifThrowsAppend$lambda$1.invoke(ObjectSerializer.kt:122)
              at kotlin.sequences.TransformingSequence$iterator$1.next(Sequences.kt:149)
              at net.corda.serialization.internal.amqp.ComposableObjectReader.readObject(ObjectSerializer.kt:219)
              at net.corda.serialization.internal.amqp.ComposableObjectSerializer.readObject(ObjectSerializer.kt:91)
              at net.corda.serialization.internal.amqp.DeserializationInput.readObject$serialization(DeserializationInput.kt:182)
              at net.corda.serialization.internal.amqp.DeserializationInput.readObjectOrNull$serialization(DeserializationInput.kt:147)
              at net.corda.serialization.internal.amqp.DeserializationInput$deserialize$1.invoke(DeserializationInput.kt:124)
              at net.corda.serialization.internal.amqp.DeserializationInput.des(DeserializationInput.kt:99)
              at net.corda.serialization.internal.amqp.DeserializationInput.deserialize(DeserializationInput.kt:119)
              at net.corda.serialization.internal.amqp.AbstractAMQPSerializationScheme.deserialize(AMQPSerializationScheme.kt:225)
              at net.corda.serialization.internal.SerializationFactoryImpl$deserialize$1$1.invoke(SerializationScheme.kt:105)
              at net.corda.core.serialization.SerializationFactory.withCurrentContext(SerializationAPI.kt:71)
              at net.corda.serialization.internal.SerializationFactoryImpl$deserialize$1.invoke(SerializationScheme.kt:105)
              at net.corda.serialization.internal.SerializationFactoryImpl$deserialize$1.invoke(SerializationScheme.kt:73)
              at net.corda.core.serialization.SerializationFactory.asCurrent(SerializationAPI.kt:85)
              at net.corda.serialization.internal.SerializationFactoryImpl.deserialize(SerializationScheme.kt:105)
              at net.corda.nodeapi.RPCApi$ServerToClient$Companion.fromClientMessage(RPCApi.kt:373)
              at net.corda.client.rpc.internal.RPCClientProxyHandler.artemisMessageHandler(RPCClientProxyHandler.kt:309)
              at net.corda.client.rpc.internal.RPCClientProxyHandler.access$artemisMessageHandler(RPCClientProxyHandler.kt:75)
              at net.corda.client.rpc.internal.RPCClientProxyHandler$initSessions$1.invoke(RPCClientProxyHandler.kt:519)
              at net.corda.client.rpc.internal.RPCClientProxyHandler$initSessions$1.invoke(RPCClientProxyHandler.kt:75)
              at net.corda.client.rpc.internal.RPCClientProxyHandlerKt$sam$org_apache_activemq_artemis_api_core_client_MessageHandler$0.onMessage(RPCClientProxyHandler.kt)
              at org.apache.activemq.artemis.core.client.impl.ClientConsumerImpl.callOnMessage(ClientConsumerImpl.java:1002)
              at org.apache.activemq.artemis.core.client.impl.ClientConsumerImpl.access$400(ClientConsumerImpl.java:50)
              at org.apache.activemq.artemis.core.client.impl.ClientConsumerImpl$Runner.run(ClientConsumerImpl.java:1125)
              at org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:42)
              at org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:31)
              at org.apache.activemq.artemis.utils.actors.ProcessorBase.executePendingTasks(ProcessorBase.java:66)
              at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
              at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
              at org.apache.activemq.artemis.utils.ActiveMQThreadFactory$1.run(ActiveMQThreadFactory.java:118)
      

        Attachments

          Issue links

            Activity

              People

              • Assignee:
                Dominic.Fox Dominic.Fox@r3.com
                Reporter:
                Anthony.Keenan Anthony Keenan
              • Votes:
                0 Vote for this issue
                Watchers:
                1 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: