From 0ce0baa235e868604148f40065ae1fcf6e27329b Mon Sep 17 00:00:00 2001 From: Shams Asari Date: Wed, 27 Sep 2017 14:12:44 +0100 Subject: [PATCH] Removed initialiseSerialization param from CordaRPCClient, mirroring change in 1.0 branch --- .../net/corda/client/jfx/NodeMonitorModelTest.kt | 6 +++--- .../net/corda/client/jfx/model/NodeMonitorModel.kt | 7 +++---- .../corda/client/rpc/CordaRPCJavaClientTest.java | 13 +++++++------ .../net/corda/client/rpc/CordaRPCClientTest.kt | 4 ++-- .../kotlin/net/corda/client/rpc/CordaRPCClient.kt | 13 ++++--------- .../rpc/internal/KryoClientSerializationScheme.kt | 13 ++++++++++--- .../net/corda/services/messaging/MQSecurityTest.kt | 2 +- .../kotlin/net/corda/irs/IRSDemoTest.kt | 2 +- .../kotlin/net/corda/traderdemo/TraderDemoTest.kt | 8 +++----- .../main/kotlin/net/corda/testing/driver/Driver.kt | 4 ++-- .../net/corda/testing/SerializationTestHelpers.kt | 6 +++--- 11 files changed, 39 insertions(+), 39 deletions(-) diff --git a/client/jfx/src/integration-test/kotlin/net/corda/client/jfx/NodeMonitorModelTest.kt b/client/jfx/src/integration-test/kotlin/net/corda/client/jfx/NodeMonitorModelTest.kt index bf5140fc36..ea0c88189c 100644 --- a/client/jfx/src/integration-test/kotlin/net/corda/client/jfx/NodeMonitorModelTest.kt +++ b/client/jfx/src/integration-test/kotlin/net/corda/client/jfx/NodeMonitorModelTest.kt @@ -27,9 +27,9 @@ import net.corda.finance.flows.CashExitFlow import net.corda.finance.flows.CashIssueFlow import net.corda.finance.flows.CashPaymentFlow import net.corda.node.services.FlowPermissions.Companion.startFlowPermission -import net.corda.nodeapi.internal.ServiceInfo import net.corda.node.services.transactions.SimpleNotaryService import net.corda.nodeapi.User +import net.corda.nodeapi.internal.ServiceInfo import net.corda.testing.* import net.corda.testing.driver.driver import net.corda.testing.node.DriverBasedTest @@ -71,7 +71,7 @@ class NodeMonitorModelTest : DriverBasedTest() { vaultUpdates = monitor.vaultUpdates.bufferUntilSubscribed() networkMapUpdates = monitor.networkMap.bufferUntilSubscribed() - monitor.register(aliceNodeHandle.configuration.rpcAddress!!, cashUser.username, cashUser.password, initialiseSerialization = false) + monitor.register(aliceNodeHandle.configuration.rpcAddress!!, cashUser.username, cashUser.password) rpc = monitor.proxyObservable.value!! notaryParty = notaryHandle.nodeInfo.legalIdentities[1] @@ -79,7 +79,7 @@ class NodeMonitorModelTest : DriverBasedTest() { bobNode = bobNodeHandle.nodeInfo val monitorBob = NodeMonitorModel() stateMachineUpdatesBob = monitorBob.stateMachineUpdates.bufferUntilSubscribed() - monitorBob.register(bobNodeHandle.configuration.rpcAddress!!, cashUser.username, cashUser.password, initialiseSerialization = false) + monitorBob.register(bobNodeHandle.configuration.rpcAddress!!, cashUser.username, cashUser.password) rpcBob = monitorBob.proxyObservable.value!! runTest() } diff --git a/client/jfx/src/main/kotlin/net/corda/client/jfx/model/NodeMonitorModel.kt b/client/jfx/src/main/kotlin/net/corda/client/jfx/model/NodeMonitorModel.kt index 3cde49536e..9bece5edcc 100644 --- a/client/jfx/src/main/kotlin/net/corda/client/jfx/model/NodeMonitorModel.kt +++ b/client/jfx/src/main/kotlin/net/corda/client/jfx/model/NodeMonitorModel.kt @@ -55,13 +55,12 @@ class NodeMonitorModel { * Register for updates to/from a given vault. * TODO provide an unsubscribe mechanism */ - fun register(nodeHostAndPort: NetworkHostAndPort, username: String, password: String, initialiseSerialization: Boolean = true) { + fun register(nodeHostAndPort: NetworkHostAndPort, username: String, password: String) { val client = CordaRPCClient( hostAndPort = nodeHostAndPort, - configuration = CordaRPCClientConfiguration.default.copy( + configuration = CordaRPCClientConfiguration.DEFAULT.copy( connectionMaxRetryInterval = 10.seconds - ), - initialiseSerialization = initialiseSerialization + ) ) val connection = client.start(username, password) val proxy = connection.proxy diff --git a/client/rpc/src/integration-test/java/net/corda/client/rpc/CordaRPCJavaClientTest.java b/client/rpc/src/integration-test/java/net/corda/client/rpc/CordaRPCJavaClientTest.java index 1a6ce172cd..1862324c4f 100644 --- a/client/rpc/src/integration-test/java/net/corda/client/rpc/CordaRPCJavaClientTest.java +++ b/client/rpc/src/integration-test/java/net/corda/client/rpc/CordaRPCJavaClientTest.java @@ -8,12 +8,12 @@ import net.corda.core.utilities.OpaqueBytes; import net.corda.finance.flows.AbstractCashFlow; import net.corda.finance.flows.CashIssueFlow; import net.corda.finance.flows.CashPaymentFlow; -import net.corda.finance.schemas.*; +import net.corda.finance.schemas.CashSchemaV1; import net.corda.node.internal.Node; import net.corda.node.internal.StartedNode; import net.corda.node.services.transactions.ValidatingNotaryService; -import net.corda.nodeapi.internal.ServiceInfo; import net.corda.nodeapi.User; +import net.corda.nodeapi.internal.ServiceInfo; import net.corda.testing.CoreTestUtils; import net.corda.testing.node.NodeBasedTest; import org.junit.After; @@ -24,14 +24,15 @@ import java.io.IOException; import java.util.*; import java.util.concurrent.ExecutionException; -import static java.util.Collections.*; +import static java.util.Collections.emptyMap; +import static java.util.Collections.singletonList; import static java.util.Objects.requireNonNull; import static kotlin.test.AssertionsKt.assertEquals; -import static net.corda.client.rpc.CordaRPCClientConfiguration.getDefault; import static net.corda.finance.Currencies.DOLLARS; import static net.corda.finance.contracts.GetBalances.getCashBalance; import static net.corda.node.services.FlowPermissions.startFlowPermission; -import static net.corda.testing.CoreTestUtils.*; +import static net.corda.testing.CoreTestUtils.setCordappPackages; +import static net.corda.testing.CoreTestUtils.unsetCordappPackages; import static net.corda.testing.TestConstants.getALICE; public class CordaRPCJavaClientTest extends NodeBasedTest { @@ -56,7 +57,7 @@ public class CordaRPCJavaClientTest extends NodeBasedTest { CordaFuture> nodeFuture = startNode(getALICE().getName(), 1, services, singletonList(rpcUser), emptyMap()); node = nodeFuture.get(); node.getInternals().registerCustomSchemas(Collections.singleton(CashSchemaV1.INSTANCE)); - client = new CordaRPCClient(requireNonNull(node.getInternals().getConfiguration().getRpcAddress()), getDefault(), false); + client = new CordaRPCClient(requireNonNull(node.getInternals().getConfiguration().getRpcAddress())); } @After diff --git a/client/rpc/src/integration-test/kotlin/net/corda/client/rpc/CordaRPCClientTest.kt b/client/rpc/src/integration-test/kotlin/net/corda/client/rpc/CordaRPCClientTest.kt index b4c10fa808..32284a970f 100644 --- a/client/rpc/src/integration-test/kotlin/net/corda/client/rpc/CordaRPCClientTest.kt +++ b/client/rpc/src/integration-test/kotlin/net/corda/client/rpc/CordaRPCClientTest.kt @@ -19,9 +19,9 @@ import net.corda.finance.schemas.CashSchemaV1 import net.corda.node.internal.Node import net.corda.node.internal.StartedNode import net.corda.node.services.FlowPermissions.Companion.startFlowPermission -import net.corda.nodeapi.internal.ServiceInfo import net.corda.node.services.transactions.ValidatingNotaryService import net.corda.nodeapi.User +import net.corda.nodeapi.internal.ServiceInfo import net.corda.testing.ALICE import net.corda.testing.chooseIdentity import net.corda.testing.node.NodeBasedTest @@ -54,7 +54,7 @@ class CordaRPCClientTest : NodeBasedTest() { setCordappPackages("net.corda.finance.contracts") node = startNode(ALICE.name, rpcUsers = listOf(rpcUser), advertisedServices = setOf(ServiceInfo(ValidatingNotaryService.type))).getOrThrow() node.internals.registerCustomSchemas(setOf(CashSchemaV1)) - client = CordaRPCClient(node.internals.configuration.rpcAddress!!, initialiseSerialization = false) + client = CordaRPCClient(node.internals.configuration.rpcAddress!!) } @After diff --git a/client/rpc/src/main/kotlin/net/corda/client/rpc/CordaRPCClient.kt b/client/rpc/src/main/kotlin/net/corda/client/rpc/CordaRPCClient.kt index 635db3afea..2def3fbf20 100644 --- a/client/rpc/src/main/kotlin/net/corda/client/rpc/CordaRPCClient.kt +++ b/client/rpc/src/main/kotlin/net/corda/client/rpc/CordaRPCClient.kt @@ -34,8 +34,8 @@ data class CordaRPCClientConfiguration(val connectionMaxRetryInterval: Duration) /** * Returns the default configuration we recommend you use. */ - @JvmStatic - val default = CordaRPCClientConfiguration(connectionMaxRetryInterval = RPCClientConfiguration.default.connectionMaxRetryInterval) + @JvmField + val DEFAULT = CordaRPCClientConfiguration(connectionMaxRetryInterval = RPCClientConfiguration.default.connectionMaxRetryInterval) } } @@ -67,16 +67,11 @@ data class CordaRPCClientConfiguration(val connectionMaxRetryInterval: Duration) */ class CordaRPCClient @JvmOverloads constructor( hostAndPort: NetworkHostAndPort, - configuration: CordaRPCClientConfiguration = CordaRPCClientConfiguration.default, - initialiseSerialization: Boolean = true + configuration: CordaRPCClientConfiguration = CordaRPCClientConfiguration.DEFAULT ) { init { - // Init serialization. It's plausible there are multiple clients in a single JVM, so be tolerant of - // others having registered first. // TODO: allow clients to have serialization factory etc injected and align with RPC protocol version? - if (initialiseSerialization) { - KryoClientSerializationScheme.initialiseSerialization() - } + KryoClientSerializationScheme.initialiseSerialization() } private val rpcClient = RPCClient( diff --git a/client/rpc/src/main/kotlin/net/corda/client/rpc/internal/KryoClientSerializationScheme.kt b/client/rpc/src/main/kotlin/net/corda/client/rpc/internal/KryoClientSerializationScheme.kt index 66ddb33b1d..2275cd0d3f 100644 --- a/client/rpc/src/main/kotlin/net/corda/client/rpc/internal/KryoClientSerializationScheme.kt +++ b/client/rpc/src/main/kotlin/net/corda/client/rpc/internal/KryoClientSerializationScheme.kt @@ -5,6 +5,7 @@ import net.corda.core.serialization.SerializationContext import net.corda.core.serialization.SerializationDefaults import net.corda.core.utilities.ByteSequence import net.corda.nodeapi.internal.serialization.* +import java.util.concurrent.atomic.AtomicBoolean class KryoClientSerializationScheme : AbstractKryoSerializationScheme() { override fun canDeserializeVersion(byteSequence: ByteSequence, target: SerializationContext.UseCase): Boolean { @@ -23,7 +24,9 @@ class KryoClientSerializationScheme : AbstractKryoSerializationScheme() { override fun rpcServerKryoPool(context: SerializationContext): KryoPool = throw UnsupportedOperationException() companion object { + val isInitialised = AtomicBoolean(false) fun initialiseSerialization() { + if (!isInitialised.compareAndSet(false, true)) return try { SerializationDefaults.SERIALIZATION_FACTORY = SerializationFactoryImpl().apply { registerScheme(KryoClientSerializationScheme()) @@ -31,10 +34,14 @@ class KryoClientSerializationScheme : AbstractKryoSerializationScheme() { } SerializationDefaults.P2P_CONTEXT = KRYO_P2P_CONTEXT SerializationDefaults.RPC_CLIENT_CONTEXT = KRYO_RPC_CLIENT_CONTEXT - } catch(e: IllegalStateException) { + } catch (e: IllegalStateException) { // Check that it's registered as we expect - check(SerializationDefaults.SERIALIZATION_FACTORY is SerializationFactoryImpl) { "RPC client encountered conflicting configuration of serialization subsystem." } - check((SerializationDefaults.SERIALIZATION_FACTORY as SerializationFactoryImpl).alreadyRegisteredSchemes.any { it is KryoClientSerializationScheme }) { "RPC client encountered conflicting configuration of serialization subsystem." } + val factory = SerializationDefaults.SERIALIZATION_FACTORY + val checkedFactory = factory as? SerializationFactoryImpl + ?: throw IllegalStateException("RPC client encountered conflicting configuration of serialization subsystem: $factory") + check(checkedFactory.alreadyRegisteredSchemes.any { it is KryoClientSerializationScheme }) { + "RPC client encountered conflicting configuration of serialization subsystem." + } } } } diff --git a/node/src/integration-test/kotlin/net/corda/services/messaging/MQSecurityTest.kt b/node/src/integration-test/kotlin/net/corda/services/messaging/MQSecurityTest.kt index af332fcf21..d6aaeb10a7 100644 --- a/node/src/integration-test/kotlin/net/corda/services/messaging/MQSecurityTest.kt +++ b/node/src/integration-test/kotlin/net/corda/services/messaging/MQSecurityTest.kt @@ -154,7 +154,7 @@ abstract class MQSecurityTest : NodeBasedTest() { } fun loginToRPC(target: NetworkHostAndPort, rpcUser: User): CordaRPCOps { - return CordaRPCClient(target, initialiseSerialization = false).start(rpcUser.username, rpcUser.password).proxy + return CordaRPCClient(target).start(rpcUser.username, rpcUser.password).proxy } fun loginToRPCAndGetClientQueue(): String { diff --git a/samples/irs-demo/src/integration-test/kotlin/net/corda/irs/IRSDemoTest.kt b/samples/irs-demo/src/integration-test/kotlin/net/corda/irs/IRSDemoTest.kt index bc72cc65d7..4d3c92b7dc 100644 --- a/samples/irs-demo/src/integration-test/kotlin/net/corda/irs/IRSDemoTest.kt +++ b/samples/irs-demo/src/integration-test/kotlin/net/corda/irs/IRSDemoTest.kt @@ -98,7 +98,7 @@ class IRSDemoTest : IntegrationTestCategory { } private fun getFixingDateObservable(config: FullNodeConfiguration): Observable { - val client = CordaRPCClient(config.rpcAddress!!, initialiseSerialization = false) + val client = CordaRPCClient(config.rpcAddress!!) val proxy = client.start("user", "password").proxy val vaultUpdates = proxy.vaultTrackBy().updates diff --git a/samples/trader-demo/src/integration-test/kotlin/net/corda/traderdemo/TraderDemoTest.kt b/samples/trader-demo/src/integration-test/kotlin/net/corda/traderdemo/TraderDemoTest.kt index 2625e43280..93034badfe 100644 --- a/samples/trader-demo/src/integration-test/kotlin/net/corda/traderdemo/TraderDemoTest.kt +++ b/samples/trader-demo/src/integration-test/kotlin/net/corda/traderdemo/TraderDemoTest.kt @@ -10,13 +10,11 @@ import net.corda.finance.schemas.CashSchemaV1 import net.corda.finance.schemas.CommercialPaperSchemaV1 import net.corda.node.services.FlowPermissions.Companion.startFlowPermission import net.corda.node.services.transactions.SimpleNotaryService -import net.corda.nodeapi.internal.ServiceInfo import net.corda.nodeapi.User +import net.corda.nodeapi.internal.ServiceInfo import net.corda.testing.* import net.corda.testing.driver.poll import net.corda.testing.node.NodeBasedTest -import net.corda.testing.setCordappPackages -import net.corda.testing.unsetCordappPackages import net.corda.traderdemo.flow.BuyerFlow import net.corda.traderdemo.flow.CommercialPaperIssueFlow import net.corda.traderdemo.flow.SellerFlow @@ -56,11 +54,11 @@ class TraderDemoTest : NodeBasedTest() { nodeB.internals.registerCustomSchemas(setOf(CashSchemaV1, CommercialPaperSchemaV1)) val (nodeARpc, nodeBRpc) = listOf(nodeA, nodeB).map { - val client = CordaRPCClient(it.internals.configuration.rpcAddress!!, initialiseSerialization = false) + val client = CordaRPCClient(it.internals.configuration.rpcAddress!!) client.start(demoUser.username, demoUser.password).proxy } val nodeBankRpc = let { - val client = CordaRPCClient(bankNode.internals.configuration.rpcAddress!!, initialiseSerialization = false) + val client = CordaRPCClient(bankNode.internals.configuration.rpcAddress!!) client.start(bankUser.username, bankUser.password).proxy } diff --git a/testing/node-driver/src/main/kotlin/net/corda/testing/driver/Driver.kt b/testing/node-driver/src/main/kotlin/net/corda/testing/driver/Driver.kt index 3366440b6e..c279e0aa4d 100644 --- a/testing/node-driver/src/main/kotlin/net/corda/testing/driver/Driver.kt +++ b/testing/node-driver/src/main/kotlin/net/corda/testing/driver/Driver.kt @@ -221,7 +221,7 @@ sealed class NodeHandle { } } - fun rpcClientToNode(): CordaRPCClient = CordaRPCClient(configuration.rpcAddress!!, initialiseSerialization = false) + fun rpcClientToNode(): CordaRPCClient = CordaRPCClient(configuration.rpcAddress!!) /** * Stops the referenced node. @@ -635,7 +635,7 @@ class DriverDSL( private fun establishRpc(config: FullNodeConfiguration, processDeathFuture: CordaFuture): CordaFuture { val rpcAddress = config.rpcAddress!! - val client = CordaRPCClient(rpcAddress, initialiseSerialization = false) + val client = CordaRPCClient(rpcAddress) val connectionFuture = poll(executorService, "RPC connection") { try { client.start(config.rpcUsers[0].username, config.rpcUsers[0].password) diff --git a/testing/test-utils/src/main/kotlin/net/corda/testing/SerializationTestHelpers.kt b/testing/test-utils/src/main/kotlin/net/corda/testing/SerializationTestHelpers.kt index 5da78a32af..73884f6cab 100644 --- a/testing/test-utils/src/main/kotlin/net/corda/testing/SerializationTestHelpers.kt +++ b/testing/test-utils/src/main/kotlin/net/corda/testing/SerializationTestHelpers.kt @@ -17,11 +17,11 @@ inline fun withTestSerialization(block: () -> T): T { } fun initialiseTestSerialization() { + // Stop the CordaRPCClient from trying to setup the defaults as we're about to do it now + KryoClientSerializationScheme.isInitialised.set(true) // Check that everything is configured for testing with mutable delegating instances. try { - check(SerializationDefaults.SERIALIZATION_FACTORY is TestSerializationFactory) { - "Found non-test serialization configuration: ${SerializationDefaults.SERIALIZATION_FACTORY}" - } + check(SerializationDefaults.SERIALIZATION_FACTORY is TestSerializationFactory) } catch(e: IllegalStateException) { SerializationDefaults.SERIALIZATION_FACTORY = TestSerializationFactory() }