Removed the network map service type as it's no longer needed.

The absence or presence of the networkMapService config is what determines if a node is the network map or not.
This commit is contained in:
Shams Asari 2017-10-03 09:38:12 +01:00
parent 24b773eec1
commit 457f95f188
27 changed files with 56 additions and 99 deletions

View File

@ -11,7 +11,6 @@ import net.corda.core.messaging.SingleMessageRecipient
import net.corda.core.utilities.getOrThrow import net.corda.core.utilities.getOrThrow
import net.corda.node.internal.StartedNode import net.corda.node.internal.StartedNode
import net.corda.node.services.config.NodeConfiguration import net.corda.node.services.config.NodeConfiguration
import net.corda.node.services.network.NetworkMapService
import net.corda.node.services.persistence.NodeAttachmentService import net.corda.node.services.persistence.NodeAttachmentService
import net.corda.node.services.transactions.SimpleNotaryService import net.corda.node.services.transactions.SimpleNotaryService
import net.corda.node.utilities.DatabaseTransactionManager import net.corda.node.utilities.DatabaseTransactionManager
@ -45,7 +44,7 @@ class AttachmentTests {
mockNet.stopNodes() mockNet.stopNodes()
} }
fun fakeAttachment(): ByteArray { private fun fakeAttachment(): ByteArray {
val bs = ByteArrayOutputStream() val bs = ByteArrayOutputStream()
val js = JarOutputStream(bs) val js = JarOutputStream(bs)
js.putNextEntry(ZipEntry("file1.txt")) js.putNextEntry(ZipEntry("file1.txt"))
@ -127,7 +126,7 @@ class AttachmentTests {
override fun start() = super.start().apply { attachments.checkAttachmentsOnLoad = false } override fun start() = super.start().apply { attachments.checkAttachmentsOnLoad = false }
} }
} }
}, advertisedServices = *arrayOf(ServiceInfo(NetworkMapService.type), ServiceInfo(SimpleNotaryService.type))) }, advertisedServices = *arrayOf(ServiceInfo(SimpleNotaryService.type)))
val bobNode = mockNet.createNode(aliceNode.network.myAddress, legalName = BOB.name) val bobNode = mockNet.createNode(aliceNode.network.myAddress, legalName = BOB.name)
// Ensure that registration was successful before progressing any further // Ensure that registration was successful before progressing any further

View File

@ -14,11 +14,10 @@ import net.corda.core.utilities.getOrThrow
import net.corda.core.utilities.unwrap import net.corda.core.utilities.unwrap
import net.corda.node.internal.InitiatedFlowFactory import net.corda.node.internal.InitiatedFlowFactory
import net.corda.node.internal.StartedNode import net.corda.node.internal.StartedNode
import net.corda.nodeapi.internal.ServiceInfo
import net.corda.node.services.config.NodeConfiguration import net.corda.node.services.config.NodeConfiguration
import net.corda.node.services.network.NetworkMapService
import net.corda.node.services.persistence.NodeAttachmentService import net.corda.node.services.persistence.NodeAttachmentService
import net.corda.node.utilities.DatabaseTransactionManager import net.corda.node.utilities.DatabaseTransactionManager
import net.corda.nodeapi.internal.ServiceInfo
import net.corda.testing.chooseIdentity import net.corda.testing.chooseIdentity
import net.corda.testing.node.MockNetwork import net.corda.testing.node.MockNetwork
import org.junit.After import org.junit.After
@ -70,7 +69,7 @@ class AttachmentSerializationTest {
@Before @Before
fun setUp() { fun setUp() {
mockNet = MockNetwork() mockNet = MockNetwork()
server = mockNet.createNode(advertisedServices = ServiceInfo(NetworkMapService.type)) server = mockNet.createNode()
client = mockNet.createNode(server.network.myAddress) client = mockNet.createNode(server.network.myAddress)
client.internals.disableDBCloseOnStop() // Otherwise the in-memory database may disappear (taking the checkpoint with it) while we reboot the client. client.internals.disableDBCloseOnStop() // Otherwise the in-memory database may disappear (taking the checkpoint with it) while we reboot the client.
mockNet.runNetwork() mockNet.runNetwork()

View File

@ -7,11 +7,10 @@ import net.corda.core.utilities.getOrThrow
import net.corda.finance.* import net.corda.finance.*
import net.corda.finance.contracts.getCashBalances import net.corda.finance.contracts.getCashBalances
import net.corda.finance.flows.CashIssueFlow import net.corda.finance.flows.CashIssueFlow
import net.corda.node.internal.StartedNode
import net.corda.finance.schemas.CashSchemaV1 import net.corda.finance.schemas.CashSchemaV1
import net.corda.nodeapi.internal.ServiceInfo import net.corda.node.internal.StartedNode
import net.corda.node.services.network.NetworkMapService
import net.corda.node.services.transactions.ValidatingNotaryService import net.corda.node.services.transactions.ValidatingNotaryService
import net.corda.nodeapi.internal.ServiceInfo
import net.corda.testing.* import net.corda.testing.*
import net.corda.testing.node.MockNetwork import net.corda.testing.node.MockNetwork
import org.junit.After import org.junit.After
@ -36,7 +35,7 @@ class CustomVaultQueryTest {
notaryNode = mockNet.createNode( notaryNode = mockNet.createNode(
legalName = DUMMY_NOTARY.name, legalName = DUMMY_NOTARY.name,
overrideServices = mapOf(notaryService to DUMMY_NOTARY_KEY), overrideServices = mapOf(notaryService to DUMMY_NOTARY_KEY),
advertisedServices = *arrayOf(ServiceInfo(NetworkMapService.type), notaryService)) advertisedServices = *arrayOf(notaryService))
nodeA = mockNet.createPartyNode(notaryNode.network.myAddress) nodeA = mockNet.createPartyNode(notaryNode.network.myAddress)
nodeB = mockNet.createPartyNode(notaryNode.network.myAddress) nodeB = mockNet.createPartyNode(notaryNode.network.myAddress)

View File

@ -9,7 +9,6 @@ import net.corda.finance.contracts.getCashBalances
import net.corda.finance.flows.CashIssueFlow import net.corda.finance.flows.CashIssueFlow
import net.corda.finance.schemas.CashSchemaV1 import net.corda.finance.schemas.CashSchemaV1
import net.corda.node.internal.StartedNode import net.corda.node.internal.StartedNode
import net.corda.node.services.network.NetworkMapService
import net.corda.node.services.transactions.ValidatingNotaryService import net.corda.node.services.transactions.ValidatingNotaryService
import net.corda.nodeapi.internal.ServiceInfo import net.corda.nodeapi.internal.ServiceInfo
import net.corda.testing.* import net.corda.testing.*
@ -34,7 +33,7 @@ class FxTransactionBuildTutorialTest {
notaryNode = mockNet.createNode( notaryNode = mockNet.createNode(
legalName = DUMMY_NOTARY.name, legalName = DUMMY_NOTARY.name,
overrideServices = mapOf(notaryService to DUMMY_NOTARY_KEY), overrideServices = mapOf(notaryService to DUMMY_NOTARY_KEY),
advertisedServices = *arrayOf(ServiceInfo(NetworkMapService.type), notaryService)) advertisedServices = *arrayOf(notaryService))
nodeA = mockNet.createPartyNode(notaryNode.network.myAddress) nodeA = mockNet.createPartyNode(notaryNode.network.myAddress)
nodeB = mockNet.createPartyNode(notaryNode.network.myAddress) nodeB = mockNet.createPartyNode(notaryNode.network.myAddress)
nodeA.internals.registerCustomSchemas(setOf(CashSchemaV1)) nodeA.internals.registerCustomSchemas(setOf(CashSchemaV1))

View File

@ -9,7 +9,6 @@ import net.corda.core.node.services.vault.QueryCriteria
import net.corda.core.toFuture import net.corda.core.toFuture
import net.corda.core.utilities.getOrThrow import net.corda.core.utilities.getOrThrow
import net.corda.node.internal.StartedNode import net.corda.node.internal.StartedNode
import net.corda.node.services.network.NetworkMapService
import net.corda.node.services.transactions.ValidatingNotaryService import net.corda.node.services.transactions.ValidatingNotaryService
import net.corda.nodeapi.internal.ServiceInfo import net.corda.nodeapi.internal.ServiceInfo
import net.corda.testing.* import net.corda.testing.*
@ -39,7 +38,7 @@ class WorkflowTransactionBuildTutorialTest {
notaryNode = mockNet.createNode( notaryNode = mockNet.createNode(
legalName = DUMMY_NOTARY.name, legalName = DUMMY_NOTARY.name,
overrideServices = mapOf(Pair(notaryService, DUMMY_NOTARY_KEY)), overrideServices = mapOf(Pair(notaryService, DUMMY_NOTARY_KEY)),
advertisedServices = *arrayOf(ServiceInfo(NetworkMapService.type), notaryService)) advertisedServices = *arrayOf(notaryService))
nodeA = mockNet.createPartyNode(notaryNode.network.myAddress) nodeA = mockNet.createPartyNode(notaryNode.network.myAddress)
nodeB = mockNet.createPartyNode(notaryNode.network.myAddress) nodeB = mockNet.createPartyNode(notaryNode.network.myAddress)
nodeA.internals.registerInitiatedFlow(RecordCompletionFlow::class.java) nodeA.internals.registerInitiatedFlow(RecordCompletionFlow::class.java)

View File

@ -27,7 +27,6 @@ class ServiceType private constructor(val id: String) {
} }
val notary: ServiceType = corda.getSubType("notary") val notary: ServiceType = corda.getSubType("notary")
val networkMap: ServiceType = corda.getSubType("network_map")
fun parse(id: String): ServiceType = ServiceType(id) fun parse(id: String): ServiceType = ServiceType(id)

View File

@ -18,7 +18,6 @@ import net.corda.core.utilities.Try
import net.corda.core.utilities.getOrThrow import net.corda.core.utilities.getOrThrow
import net.corda.node.internal.StartedNode import net.corda.node.internal.StartedNode
import net.corda.node.services.config.BFTSMaRtConfiguration import net.corda.node.services.config.BFTSMaRtConfiguration
import net.corda.node.services.network.NetworkMapService
import net.corda.node.services.transactions.BFTNonValidatingNotaryService import net.corda.node.services.transactions.BFTNonValidatingNotaryService
import net.corda.node.services.transactions.minClusterSize import net.corda.node.services.transactions.minClusterSize
import net.corda.node.services.transactions.minCorrectReplicas import net.corda.node.services.transactions.minCorrectReplicas
@ -42,7 +41,7 @@ class BFTNotaryServiceTests {
} }
private val mockNet = MockNetwork() private val mockNet = MockNetwork()
private val node = mockNet.createNode(advertisedServices = ServiceInfo(NetworkMapService.type)) private val node = mockNet.createNode()
@After @After
fun stopNodes() { fun stopNodes() {

View File

@ -484,7 +484,7 @@ abstract class AbstractNode(open val configuration: NodeConfiguration,
private fun makeNetworkServices(tokenizableServices: MutableList<Any>) { private fun makeNetworkServices(tokenizableServices: MutableList<Any>) {
val serviceTypes = advertisedServices.map { it.type } val serviceTypes = advertisedServices.map { it.type }
inNodeNetworkMapService = if (NetworkMapService.type in serviceTypes) makeNetworkMapService() else NullNetworkMapService inNodeNetworkMapService = if (configuration.networkMapService == null) makeNetworkMapService() else NullNetworkMapService
val notaryServiceType = serviceTypes.singleOrNull { it.isNotary() } val notaryServiceType = serviceTypes.singleOrNull { it.isNotary() }
if (notaryServiceType != null) { if (notaryServiceType != null) {
val service = makeCoreNotaryService(notaryServiceType) val service = makeCoreNotaryService(notaryServiceType)
@ -526,9 +526,6 @@ abstract class AbstractNode(open val configuration: NodeConfiguration,
* updates) if one has been supplied. * updates) if one has been supplied.
*/ */
protected open fun registerWithNetworkMap(): CordaFuture<Unit> { protected open fun registerWithNetworkMap(): CordaFuture<Unit> {
require(networkMapAddress != null || NetworkMapService.type in advertisedServices.map { it.type }) {
"Initial network map address must indicate a node that provides a network map service"
}
val address: SingleMessageRecipient = networkMapAddress ?: val address: SingleMessageRecipient = networkMapAddress ?:
network.getAddressOfParty(PartyInfo.SingleNode(services.myInfo.legalIdentitiesAndCerts.first().party, info.addresses)) as SingleMessageRecipient network.getAddressOfParty(PartyInfo.SingleNode(services.myInfo.legalIdentitiesAndCerts.first().party, info.addresses)) as SingleMessageRecipient
// Register for updates, even if we're the one running the network map. // Register for updates, even if we're the one running the network map.

View File

@ -73,7 +73,7 @@ open class NodeStartup(val args: Array<String>) {
cmdlineOptions.baseDirectory.createDirectories() cmdlineOptions.baseDirectory.createDirectories()
startNode(conf, versionInfo, startTime, cmdlineOptions) startNode(conf, versionInfo, startTime, cmdlineOptions)
} catch (e: Exception) { } catch (e: Exception) {
if (e.message?.startsWith("Unknown named curve:") ?: false) { if (e.message?.startsWith("Unknown named curve:") == true) {
logger.error("Exception during node startup - ${e.message}. " + logger.error("Exception during node startup - ${e.message}. " +
"This is a known OpenJDK issue on some Linux distributions, please use OpenJDK from zulu.org or Oracle JDK.") "This is a known OpenJDK issue on some Linux distributions, please use OpenJDK from zulu.org or Oracle JDK.")
} else } else
@ -150,13 +150,12 @@ open class NodeStartup(val args: Array<String>) {
} }
open protected fun loadConfigFile(cmdlineOptions: CmdLineOptions): FullNodeConfiguration { open protected fun loadConfigFile(cmdlineOptions: CmdLineOptions): FullNodeConfiguration {
val conf = try { try {
cmdlineOptions.loadConfig() return cmdlineOptions.loadConfig()
} catch (e: ConfigException) { } catch (e: ConfigException) {
println("Unable to load the configuration file: ${e.rootCause.message}") println("Unable to load the configuration file: ${e.rootCause.message}")
exitProcess(2) exitProcess(2)
} }
return conf
} }
open protected fun banJavaSerialisation(conf: FullNodeConfiguration) { open protected fun banJavaSerialisation(conf: FullNodeConfiguration) {
@ -167,13 +166,12 @@ open class NodeStartup(val args: Array<String>) {
// Manifest properties are only available if running from the corda jar // Manifest properties are only available if running from the corda jar
fun manifestValue(name: String): String? = if (Manifests.exists(name)) Manifests.read(name) else null fun manifestValue(name: String): String? = if (Manifests.exists(name)) Manifests.read(name) else null
val versionInfo = VersionInfo( return VersionInfo(
manifestValue("Corda-Platform-Version")?.toInt() ?: 1, manifestValue("Corda-Platform-Version")?.toInt() ?: 1,
manifestValue("Corda-Release-Version") ?: "Unknown", manifestValue("Corda-Release-Version") ?: "Unknown",
manifestValue("Corda-Revision") ?: "Unknown", manifestValue("Corda-Revision") ?: "Unknown",
manifestValue("Corda-Vendor") ?: "Unknown" manifestValue("Corda-Vendor") ?: "Unknown"
) )
return versionInfo
} }
private fun enforceSingleNodeIsRunning(baseDirectory: Path) { private fun enforceSingleNodeIsRunning(baseDirectory: Path) {
@ -260,10 +258,10 @@ open class NodeStartup(val args: Array<String>) {
} }
private fun printPluginsAndServices(node: Node) { private fun printPluginsAndServices(node: Node) {
node.configuration.extraAdvertisedServiceIds.filter { it.startsWith("corda.notary.") || it.startsWith("corda.network_map") }.let { node.configuration.extraAdvertisedServiceIds.filter { it.startsWith("corda.notary.") }.let {
if (it.isNotEmpty()) Node.printBasicNodeInfo("Providing additional services", it.joinToString()) if (it.isNotEmpty()) Node.printBasicNodeInfo("Providing additional services", it.joinToString())
} }
Node.printBasicNodeInfo("Loaded CorDapps", node.cordappProvider.cordapps.map { it.name }.joinToString()) Node.printBasicNodeInfo("Loaded CorDapps", node.cordappProvider.cordapps.joinToString { it.name })
} }
open fun drawBanner(versionInfo: VersionInfo) { open fun drawBanner(versionInfo: VersionInfo) {

View File

@ -3,12 +3,11 @@ package net.corda.node.services.config
import net.corda.core.identity.CordaX500Name import net.corda.core.identity.CordaX500Name
import net.corda.core.utilities.NetworkHostAndPort import net.corda.core.utilities.NetworkHostAndPort
import net.corda.node.internal.NetworkMapInfo import net.corda.node.internal.NetworkMapInfo
import net.corda.nodeapi.internal.ServiceInfo
import net.corda.node.services.messaging.CertificateChainCheckPolicy import net.corda.node.services.messaging.CertificateChainCheckPolicy
import net.corda.node.services.network.NetworkMapService
import net.corda.nodeapi.User import net.corda.nodeapi.User
import net.corda.nodeapi.config.NodeSSLConfiguration import net.corda.nodeapi.config.NodeSSLConfiguration
import net.corda.nodeapi.config.OldConfig import net.corda.nodeapi.config.OldConfig
import net.corda.nodeapi.internal.ServiceInfo
import java.net.URL import java.net.URL
import java.nio.file.Path import java.nio.file.Path
import java.util.* import java.util.*
@ -22,6 +21,10 @@ interface NodeConfiguration : NodeSSLConfiguration {
// myLegalName should be only used in the initial network registration, we should use the name from the certificate instead of this. // myLegalName should be only used in the initial network registration, we should use the name from the certificate instead of this.
// TODO: Remove this so we don't accidentally use this identity in the code? // TODO: Remove this so we don't accidentally use this identity in the code?
val myLegalName: CordaX500Name val myLegalName: CordaX500Name
/**
* If null then configure the node to run as the netwok map service, otherwise use this to connect to the network map
* service.
*/
val networkMapService: NetworkMapInfo? val networkMapService: NetworkMapInfo?
val minimumPlatformVersion: Int val minimumPlatformVersion: Int
val emailAddress: String val emailAddress: String
@ -93,12 +96,10 @@ data class FullNodeConfiguration(
} }
fun calculateServices(): Set<ServiceInfo> { fun calculateServices(): Set<ServiceInfo> {
val advertisedServices = extraAdvertisedServiceIds return extraAdvertisedServiceIds
.filter(String::isNotBlank) .filter(String::isNotBlank)
.map { ServiceInfo.parse(it) } .map { ServiceInfo.parse(it) }
.toMutableSet() .toSet()
if (networkMapService == null) advertisedServices += ServiceInfo(NetworkMapService.type)
return advertisedServices
} }
} }

View File

@ -19,7 +19,6 @@ import net.corda.core.serialization.deserialize
import net.corda.core.serialization.serialize import net.corda.core.serialization.serialize
import net.corda.core.utilities.debug import net.corda.core.utilities.debug
import net.corda.core.utilities.loggerFor import net.corda.core.utilities.loggerFor
import net.corda.nodeapi.internal.ServiceType
import net.corda.node.services.api.AbstractNodeService import net.corda.node.services.api.AbstractNodeService
import net.corda.node.services.api.ServiceHubInternal import net.corda.node.services.api.ServiceHubInternal
import net.corda.node.services.messaging.MessageHandlerRegistration import net.corda.node.services.messaging.MessageHandlerRegistration
@ -72,8 +71,6 @@ interface NetworkMapService {
const val PUSH_TOPIC = "platform.network_map.push" const val PUSH_TOPIC = "platform.network_map.push"
// Base topic for messages acknowledging pushed updates // Base topic for messages acknowledging pushed updates
const val PUSH_ACK_TOPIC = "platform.network_map.push_ack" const val PUSH_ACK_TOPIC = "platform.network_map.push_ack"
val type = ServiceType.networkMap
} }
data class FetchMapRequest(val subscribe: Boolean, data class FetchMapRequest(val subscribe: Boolean,

View File

@ -1,6 +1,7 @@
package net.corda.node package net.corda.node
import co.paralleluniverse.fibers.Suspendable import co.paralleluniverse.fibers.Suspendable
import net.corda.client.rpc.PermissionException
import net.corda.core.contracts.Amount import net.corda.core.contracts.Amount
import net.corda.core.contracts.ContractState import net.corda.core.contracts.ContractState
import net.corda.core.contracts.Issued import net.corda.core.contracts.Issued
@ -24,14 +25,12 @@ import net.corda.finance.flows.CashIssueFlow
import net.corda.finance.flows.CashPaymentFlow import net.corda.finance.flows.CashPaymentFlow
import net.corda.node.internal.CordaRPCOpsImpl import net.corda.node.internal.CordaRPCOpsImpl
import net.corda.node.internal.StartedNode import net.corda.node.internal.StartedNode
import net.corda.node.services.FlowPermissions.Companion.startFlowPermission
import net.corda.node.services.messaging.CURRENT_RPC_CONTEXT import net.corda.node.services.messaging.CURRENT_RPC_CONTEXT
import net.corda.node.services.messaging.RpcContext import net.corda.node.services.messaging.RpcContext
import net.corda.node.services.network.NetworkMapService
import net.corda.node.services.FlowPermissions.Companion.startFlowPermission
import net.corda.nodeapi.internal.ServiceInfo
import net.corda.node.services.transactions.SimpleNotaryService import net.corda.node.services.transactions.SimpleNotaryService
import net.corda.client.rpc.PermissionException
import net.corda.nodeapi.User import net.corda.nodeapi.User
import net.corda.nodeapi.internal.ServiceInfo
import net.corda.testing.* import net.corda.testing.*
import net.corda.testing.node.MockNetwork import net.corda.testing.node.MockNetwork
import net.corda.testing.node.MockNetwork.MockNode import net.corda.testing.node.MockNetwork.MockNode
@ -68,7 +67,7 @@ class CordaRPCOpsImplTest {
setCordappPackages("net.corda.finance.contracts.asset") setCordappPackages("net.corda.finance.contracts.asset")
mockNet = MockNetwork() mockNet = MockNetwork()
val networkMap = mockNet.createNode(advertisedServices = ServiceInfo(NetworkMapService.type)) val networkMap = mockNet.createNode()
aliceNode = mockNet.createNode(networkMapAddress = networkMap.network.myAddress) aliceNode = mockNet.createNode(networkMapAddress = networkMap.network.myAddress)
notaryNode = mockNet.createNode(advertisedServices = ServiceInfo(SimpleNotaryService.type), networkMapAddress = networkMap.network.myAddress) notaryNode = mockNet.createNode(advertisedServices = ServiceInfo(SimpleNotaryService.type), networkMapAddress = networkMap.network.myAddress)
rpc = CordaRPCOpsImpl(aliceNode.services, aliceNode.smm, aliceNode.database) rpc = CordaRPCOpsImpl(aliceNode.services, aliceNode.smm, aliceNode.database)

View File

@ -1,10 +1,8 @@
package net.corda.node.messaging package net.corda.node.messaging
import net.corda.nodeapi.internal.ServiceInfo
import net.corda.node.services.messaging.Message import net.corda.node.services.messaging.Message
import net.corda.node.services.messaging.TopicStringValidator import net.corda.node.services.messaging.TopicStringValidator
import net.corda.node.services.messaging.createMessage import net.corda.node.services.messaging.createMessage
import net.corda.node.services.network.NetworkMapService
import net.corda.testing.node.MockNetwork import net.corda.testing.node.MockNetwork
import net.corda.testing.resetTestSerialization import net.corda.testing.resetTestSerialization
import org.junit.After import org.junit.After
@ -49,7 +47,7 @@ class InMemoryMessagingTests {
@Test @Test
fun basics() { fun basics() {
val node1 = mockNet.createNode(advertisedServices = ServiceInfo(NetworkMapService.type)) val node1 = mockNet.createNode()
val node2 = mockNet.createNode(networkMapAddress = node1.network.myAddress) val node2 = mockNet.createNode(networkMapAddress = node1.network.myAddress)
val node3 = mockNet.createNode(networkMapAddress = node1.network.myAddress) val node3 = mockNet.createNode(networkMapAddress = node1.network.myAddress)
@ -78,7 +76,7 @@ class InMemoryMessagingTests {
@Test @Test
fun broadcast() { fun broadcast() {
val node1 = mockNet.createNode(advertisedServices = ServiceInfo(NetworkMapService.type)) val node1 = mockNet.createNode()
val node2 = mockNet.createNode(networkMapAddress = node1.network.myAddress) val node2 = mockNet.createNode(networkMapAddress = node1.network.myAddress)
val node3 = mockNet.createNode(networkMapAddress = node1.network.myAddress) val node3 = mockNet.createNode(networkMapAddress = node1.network.myAddress)
@ -97,9 +95,9 @@ class InMemoryMessagingTests {
*/ */
@Test @Test
fun `skip unhandled messages`() { fun `skip unhandled messages`() {
val node1 = mockNet.createNode(advertisedServices = ServiceInfo(NetworkMapService.type)) val node1 = mockNet.createNode()
val node2 = mockNet.createNode(networkMapAddress = node1.network.myAddress) val node2 = mockNet.createNode(networkMapAddress = node1.network.myAddress)
var received: Int = 0 var received = 0
node1.network.addMessageHandler("valid_message") { _, _ -> node1.network.addMessageHandler("valid_message") { _, _ ->
received++ received++

View File

@ -12,7 +12,6 @@ import net.corda.core.transactions.WireTransaction
import net.corda.core.utilities.getOrThrow import net.corda.core.utilities.getOrThrow
import net.corda.core.utilities.seconds import net.corda.core.utilities.seconds
import net.corda.node.internal.StartedNode import net.corda.node.internal.StartedNode
import net.corda.node.services.network.NetworkMapService
import net.corda.node.services.transactions.ValidatingNotaryService import net.corda.node.services.transactions.ValidatingNotaryService
import net.corda.nodeapi.internal.ServiceInfo import net.corda.nodeapi.internal.ServiceInfo
import net.corda.testing.* import net.corda.testing.*
@ -42,7 +41,7 @@ class NotaryChangeTests {
mockNet = MockNetwork() mockNet = MockNetwork()
oldNotaryNode = mockNet.createNode( oldNotaryNode = mockNet.createNode(
legalName = DUMMY_NOTARY.name, legalName = DUMMY_NOTARY.name,
advertisedServices = *arrayOf(ServiceInfo(NetworkMapService.type), ServiceInfo(ValidatingNotaryService.type))) advertisedServices = *arrayOf(ServiceInfo(ValidatingNotaryService.type)))
clientNodeA = mockNet.createNode(networkMapAddress = oldNotaryNode.network.myAddress) clientNodeA = mockNet.createNode(networkMapAddress = oldNotaryNode.network.myAddress)
clientNodeB = mockNet.createNode(networkMapAddress = oldNotaryNode.network.myAddress) clientNodeB = mockNet.createNode(networkMapAddress = oldNotaryNode.network.myAddress)
newNotaryNode = mockNet.createNode(networkMapAddress = oldNotaryNode.network.myAddress, advertisedServices = ServiceInfo(ValidatingNotaryService.type)) newNotaryNode = mockNet.createNode(networkMapAddress = oldNotaryNode.network.myAddress, advertisedServices = ServiceInfo(ValidatingNotaryService.type))

View File

@ -15,7 +15,6 @@ import net.corda.core.node.services.vault.SortAttribute
import net.corda.core.transactions.TransactionBuilder import net.corda.core.transactions.TransactionBuilder
import net.corda.core.utilities.getOrThrow import net.corda.core.utilities.getOrThrow
import net.corda.node.internal.StartedNode import net.corda.node.internal.StartedNode
import net.corda.node.services.network.NetworkMapService
import net.corda.node.services.statemachine.StateMachineManager import net.corda.node.services.statemachine.StateMachineManager
import net.corda.node.services.transactions.ValidatingNotaryService import net.corda.node.services.transactions.ValidatingNotaryService
import net.corda.nodeapi.internal.ServiceInfo import net.corda.nodeapi.internal.ServiceInfo
@ -98,7 +97,7 @@ class ScheduledFlowTests {
mockNet = MockNetwork(threadPerNode = true) mockNet = MockNetwork(threadPerNode = true)
notaryNode = mockNet.createNode( notaryNode = mockNet.createNode(
legalName = DUMMY_NOTARY.name, legalName = DUMMY_NOTARY.name,
advertisedServices = *arrayOf(ServiceInfo(NetworkMapService.type), ServiceInfo(ValidatingNotaryService.type))) advertisedServices = *arrayOf(ServiceInfo(ValidatingNotaryService.type)))
val a = mockNet.createUnstartedNode(notaryNode.network.myAddress) val a = mockNet.createUnstartedNode(notaryNode.network.myAddress)
val b = mockNet.createUnstartedNode(notaryNode.network.myAddress) val b = mockNet.createUnstartedNode(notaryNode.network.myAddress)

View File

@ -7,7 +7,6 @@ import net.corda.core.node.NodeInfo
import net.corda.core.serialization.deserialize import net.corda.core.serialization.deserialize
import net.corda.core.utilities.getOrThrow import net.corda.core.utilities.getOrThrow
import net.corda.node.internal.StartedNode import net.corda.node.internal.StartedNode
import net.corda.nodeapi.internal.ServiceInfo
import net.corda.node.services.config.NodeConfiguration import net.corda.node.services.config.NodeConfiguration
import net.corda.node.services.messaging.MessagingService import net.corda.node.services.messaging.MessagingService
import net.corda.node.services.messaging.send import net.corda.node.services.messaging.send
@ -25,12 +24,8 @@ import net.corda.node.services.transactions.SimpleNotaryService
import net.corda.node.utilities.AddOrRemove import net.corda.node.utilities.AddOrRemove
import net.corda.node.utilities.AddOrRemove.ADD import net.corda.node.utilities.AddOrRemove.ADD
import net.corda.node.utilities.AddOrRemove.REMOVE import net.corda.node.utilities.AddOrRemove.REMOVE
import net.corda.testing.ALICE import net.corda.nodeapi.internal.ServiceInfo
import net.corda.testing.BOB import net.corda.testing.*
import net.corda.testing.CHARLIE
import net.corda.testing.DUMMY_MAP
import net.corda.testing.chooseIdentity
import net.corda.testing.chooseIdentityAndCert
import net.corda.testing.node.MockNetwork import net.corda.testing.node.MockNetwork
import net.corda.testing.node.MockNetwork.MockNode import net.corda.testing.node.MockNetwork.MockNode
import org.assertj.core.api.Assertions.assertThat import org.assertj.core.api.Assertions.assertThat
@ -58,7 +53,7 @@ abstract class AbstractNetworkMapServiceTest<out S : AbstractNetworkMapService>
mapServiceNode = mockNet.createNode( mapServiceNode = mockNet.createNode(
nodeFactory = nodeFactory, nodeFactory = nodeFactory,
legalName = DUMMY_MAP.name, legalName = DUMMY_MAP.name,
advertisedServices = *arrayOf(ServiceInfo(NetworkMapService.type), ServiceInfo(SimpleNotaryService.type))) advertisedServices = *arrayOf(ServiceInfo(SimpleNotaryService.type)))
alice = mockNet.createNode(mapServiceNode.network.myAddress, nodeFactory = nodeFactory, legalName = ALICE.name) alice = mockNet.createNode(mapServiceNode.network.myAddress, nodeFactory = nodeFactory, legalName = ALICE.name)
mockNet.runNetwork() mockNet.runNetwork()
lastSerial = System.currentTimeMillis() lastSerial = System.currentTimeMillis()

View File

@ -2,10 +2,8 @@ package net.corda.node.services.network
import net.corda.core.node.services.NetworkMapCache import net.corda.core.node.services.NetworkMapCache
import net.corda.core.utilities.getOrThrow import net.corda.core.utilities.getOrThrow
import net.corda.nodeapi.internal.ServiceInfo
import net.corda.testing.ALICE import net.corda.testing.ALICE
import net.corda.testing.BOB import net.corda.testing.BOB
import net.corda.testing.DUMMY_NOTARY
import net.corda.testing.chooseIdentity import net.corda.testing.chooseIdentity
import net.corda.testing.node.MockNetwork import net.corda.testing.node.MockNetwork
import org.assertj.core.api.Assertions.assertThat import org.assertj.core.api.Assertions.assertThat
@ -40,8 +38,8 @@ class NetworkMapCacheTest {
@Test @Test
fun `key collision`() { fun `key collision`() {
val entropy = BigInteger.valueOf(24012017L) val entropy = BigInteger.valueOf(24012017L)
val aliceNode = mockNet.createNode(nodeFactory = MockNetwork.DefaultFactory, legalName = ALICE.name, entropyRoot = entropy, advertisedServices = ServiceInfo(NetworkMapService.type)) val aliceNode = mockNet.createNode(nodeFactory = MockNetwork.DefaultFactory, legalName = ALICE.name, entropyRoot = entropy)
val bobNode = mockNet.createNode(nodeFactory = MockNetwork.DefaultFactory, legalName = BOB.name, entropyRoot = entropy, advertisedServices = ServiceInfo(NetworkMapService.type)) val bobNode = mockNet.createNode(nodeFactory = MockNetwork.DefaultFactory, legalName = BOB.name, entropyRoot = entropy)
assertEquals(aliceNode.info.chooseIdentity(), bobNode.info.chooseIdentity()) assertEquals(aliceNode.info.chooseIdentity(), bobNode.info.chooseIdentity())
mockNet.runNetwork() mockNet.runNetwork()

View File

@ -31,7 +31,6 @@ import net.corda.finance.flows.CashIssueFlow
import net.corda.finance.flows.CashPaymentFlow import net.corda.finance.flows.CashPaymentFlow
import net.corda.node.internal.InitiatedFlowFactory import net.corda.node.internal.InitiatedFlowFactory
import net.corda.node.internal.StartedNode import net.corda.node.internal.StartedNode
import net.corda.node.services.network.NetworkMapService
import net.corda.node.services.persistence.checkpoints import net.corda.node.services.persistence.checkpoints
import net.corda.node.services.transactions.ValidatingNotaryService import net.corda.node.services.transactions.ValidatingNotaryService
import net.corda.nodeapi.internal.ServiceInfo import net.corda.nodeapi.internal.ServiceInfo
@ -79,7 +78,7 @@ class FlowFrameworkTests {
fun start() { fun start() {
setCordappPackages("net.corda.finance.contracts", "net.corda.testing.contracts") setCordappPackages("net.corda.finance.contracts", "net.corda.testing.contracts")
mockNet = MockNetwork(servicePeerAllocationStrategy = RoundRobin()) mockNet = MockNetwork(servicePeerAllocationStrategy = RoundRobin())
node1 = mockNet.createNode(advertisedServices = ServiceInfo(NetworkMapService.type)) node1 = mockNet.createNode()
node2 = mockNet.createNode(networkMapAddress = node1.network.myAddress) node2 = mockNet.createNode(networkMapAddress = node1.network.myAddress)
mockNet.runNetwork() mockNet.runNetwork()

View File

@ -14,10 +14,8 @@ import net.corda.core.utilities.getOrThrow
import net.corda.core.utilities.seconds import net.corda.core.utilities.seconds
import net.corda.node.internal.StartedNode import net.corda.node.internal.StartedNode
import net.corda.nodeapi.internal.ServiceInfo import net.corda.nodeapi.internal.ServiceInfo
import net.corda.node.services.network.NetworkMapService
import net.corda.testing.* import net.corda.testing.*
import net.corda.testing.contracts.DummyContract import net.corda.testing.contracts.DummyContract
import net.corda.testing.getDefaultNotary
import net.corda.testing.node.MockNetwork import net.corda.testing.node.MockNetwork
import org.assertj.core.api.Assertions.assertThat import org.assertj.core.api.Assertions.assertThat
import org.junit.After import org.junit.After
@ -40,7 +38,7 @@ class NotaryServiceTests {
mockNet = MockNetwork() mockNet = MockNetwork()
notaryNode = mockNet.createNode( notaryNode = mockNet.createNode(
legalName = DUMMY_NOTARY.name, legalName = DUMMY_NOTARY.name,
advertisedServices = *arrayOf(ServiceInfo(NetworkMapService.type), ServiceInfo(SimpleNotaryService.type))) advertisedServices = *arrayOf(ServiceInfo(SimpleNotaryService.type)))
clientNode = mockNet.createNode(notaryNode.network.myAddress) clientNode = mockNet.createNode(notaryNode.network.myAddress)
mockNet.runNetwork() // Clear network map registration messages mockNet.runNetwork() // Clear network map registration messages
notaryNode.internals.ensureRegistered() notaryNode.internals.ensureRegistered()

View File

@ -10,16 +10,13 @@ import net.corda.core.flows.NotaryException
import net.corda.core.flows.NotaryFlow import net.corda.core.flows.NotaryFlow
import net.corda.core.identity.Party import net.corda.core.identity.Party
import net.corda.core.transactions.SignedTransaction import net.corda.core.transactions.SignedTransaction
import net.corda.core.utilities.getOrThrow
import net.corda.core.transactions.TransactionBuilder import net.corda.core.transactions.TransactionBuilder
import net.corda.core.utilities.getOrThrow
import net.corda.node.internal.StartedNode import net.corda.node.internal.StartedNode
import net.corda.nodeapi.internal.ServiceInfo
import net.corda.node.services.issueInvalidState import net.corda.node.services.issueInvalidState
import net.corda.node.services.network.NetworkMapService import net.corda.nodeapi.internal.ServiceInfo
import net.corda.testing.* import net.corda.testing.*
import net.corda.testing.contracts.DummyContract import net.corda.testing.contracts.DummyContract
import net.corda.testing.dummyCommand
import net.corda.testing.getDefaultNotary
import net.corda.testing.node.MockNetwork import net.corda.testing.node.MockNetwork
import org.assertj.core.api.Assertions.assertThat import org.assertj.core.api.Assertions.assertThat
import org.junit.After import org.junit.After
@ -41,7 +38,7 @@ class ValidatingNotaryServiceTests {
mockNet = MockNetwork() mockNet = MockNetwork()
notaryNode = mockNet.createNode( notaryNode = mockNet.createNode(
legalName = DUMMY_NOTARY.name, legalName = DUMMY_NOTARY.name,
advertisedServices = *arrayOf(ServiceInfo(NetworkMapService.type), ServiceInfo(ValidatingNotaryService.type)) advertisedServices = *arrayOf(ServiceInfo(ValidatingNotaryService.type))
) )
clientNode = mockNet.createNode(notaryNode.network.myAddress) clientNode = mockNet.createNode(notaryNode.network.myAddress)
mockNet.runNetwork() // Clear network map registration messages mockNet.runNetwork() // Clear network map registration messages

View File

@ -2,19 +2,18 @@ package net.corda.netmap.simulation
import net.corda.core.flows.FlowLogic import net.corda.core.flows.FlowLogic
import net.corda.core.identity.CordaX500Name import net.corda.core.identity.CordaX500Name
import net.corda.finance.utils.CityDatabase
import net.corda.finance.utils.WorldMapLocation
import net.corda.core.internal.uncheckedCast import net.corda.core.internal.uncheckedCast
import net.corda.core.messaging.SingleMessageRecipient import net.corda.core.messaging.SingleMessageRecipient
import net.corda.core.utilities.ProgressTracker import net.corda.core.utilities.ProgressTracker
import net.corda.finance.utils.CityDatabase
import net.corda.finance.utils.WorldMapLocation
import net.corda.irs.api.NodeInterestRates import net.corda.irs.api.NodeInterestRates
import net.corda.node.internal.StartedNode import net.corda.node.internal.StartedNode
import net.corda.nodeapi.internal.ServiceInfo
import net.corda.nodeapi.internal.ServiceType
import net.corda.node.services.config.NodeConfiguration import net.corda.node.services.config.NodeConfiguration
import net.corda.node.services.network.NetworkMapService
import net.corda.node.services.statemachine.StateMachineManager import net.corda.node.services.statemachine.StateMachineManager
import net.corda.node.services.transactions.SimpleNotaryService import net.corda.node.services.transactions.SimpleNotaryService
import net.corda.nodeapi.internal.ServiceInfo
import net.corda.nodeapi.internal.ServiceType
import net.corda.testing.DUMMY_MAP import net.corda.testing.DUMMY_MAP
import net.corda.testing.DUMMY_NOTARY import net.corda.testing.DUMMY_NOTARY
import net.corda.testing.DUMMY_REGULATOR import net.corda.testing.DUMMY_REGULATOR
@ -92,7 +91,6 @@ abstract class Simulation(val networkSendManuallyPumped: Boolean,
override fun create(config: NodeConfiguration, network: MockNetwork, networkMapAddr: SingleMessageRecipient?, override fun create(config: NodeConfiguration, network: MockNetwork, networkMapAddr: SingleMessageRecipient?,
advertisedServices: Set<ServiceInfo>, id: Int, overrideServices: Map<ServiceInfo, KeyPair>?, advertisedServices: Set<ServiceInfo>, id: Int, overrideServices: Map<ServiceInfo, KeyPair>?,
entropyRoot: BigInteger): SimulatedNode { entropyRoot: BigInteger): SimulatedNode {
require(advertisedServices.containsType(NetworkMapService.type))
val cfg = testNodeConfiguration( val cfg = testNodeConfiguration(
baseDirectory = config.baseDirectory, baseDirectory = config.baseDirectory,
myLegalName = DUMMY_MAP.name) myLegalName = DUMMY_MAP.name)
@ -153,7 +151,7 @@ abstract class Simulation(val networkSendManuallyPumped: Boolean,
val mockNet = MockNetwork(networkSendManuallyPumped, runAsync) val mockNet = MockNetwork(networkSendManuallyPumped, runAsync)
// This one must come first. // This one must come first.
val networkMap = mockNet.createNode(nodeFactory = NetworkMapNodeFactory, advertisedServices = ServiceInfo(NetworkMapService.type)) val networkMap = mockNet.createNode(nodeFactory = NetworkMapNodeFactory)
val notary = mockNet.createNode(networkMap.network.myAddress, nodeFactory = NotaryNodeFactory, advertisedServices = ServiceInfo(SimpleNotaryService.type)) val notary = mockNet.createNode(networkMap.network.myAddress, nodeFactory = NotaryNodeFactory, advertisedServices = ServiceInfo(SimpleNotaryService.type))
val regulators = listOf(mockNet.createUnstartedNode(networkMap.network.myAddress, nodeFactory = RegulatorFactory)) val regulators = listOf(mockNet.createUnstartedNode(networkMap.network.myAddress, nodeFactory = RegulatorFactory))
val ratesOracle = mockNet.createUnstartedNode(networkMap.network.myAddress, nodeFactory = RatesOracleFactory) val ratesOracle = mockNet.createUnstartedNode(networkMap.network.myAddress, nodeFactory = RatesOracleFactory)

View File

@ -9,7 +9,6 @@ import net.corda.core.internal.read
import net.corda.core.messaging.startFlow import net.corda.core.messaging.startFlow
import net.corda.core.serialization.CordaSerializable import net.corda.core.serialization.CordaSerializable
import net.corda.node.services.FlowPermissions.Companion.startFlowPermission import net.corda.node.services.FlowPermissions.Companion.startFlowPermission
import net.corda.node.services.network.NetworkMapService
import net.corda.node.services.transactions.ValidatingNotaryService import net.corda.node.services.transactions.ValidatingNotaryService
import net.corda.nodeapi.User import net.corda.nodeapi.User
import net.corda.nodeapi.internal.ServiceInfo import net.corda.nodeapi.internal.ServiceInfo
@ -297,7 +296,7 @@ class FlowStackSnapshotTest {
val notaryNode = mockNet.createNode( val notaryNode = mockNet.createNode(
legalName = DUMMY_NOTARY.name, legalName = DUMMY_NOTARY.name,
overrideServices = mapOf(notaryService to DUMMY_NOTARY_KEY), overrideServices = mapOf(notaryService to DUMMY_NOTARY_KEY),
advertisedServices = *arrayOf(ServiceInfo(NetworkMapService.type), notaryService)) advertisedServices = *arrayOf(notaryService))
val node = mockNet.createPartyNode(notaryNode.network.myAddress) val node = mockNet.createPartyNode(notaryNode.network.myAddress)
node.internals.registerInitiatedFlow(DummyFlow::class.java) node.internals.registerInitiatedFlow(DummyFlow::class.java)
node.services.startFlow(FlowStackSnapshotSerializationTestingFlow()).resultFuture.get() node.services.startFlow(FlowStackSnapshotSerializationTestingFlow()).resultFuture.get()

View File

@ -830,9 +830,7 @@ class DriverDSL(
"rpcAddress" to rpcAddress.toString(), "rpcAddress" to rpcAddress.toString(),
"rpcUsers" to defaultRpcUserList, "rpcUsers" to defaultRpcUserList,
"p2pAddress" to dedicatedNetworkMapAddress.toString(), "p2pAddress" to dedicatedNetworkMapAddress.toString(),
"useTestClock" to useTestClock, "useTestClock" to useTestClock)
"extraAdvertisedServiceIds" to listOf(ServiceInfo(NetworkMapService.type).toString())
)
) )
return startNodeInternal(config, webAddress, startInProcess, maximumHeapSize) return startNodeInternal(config, webAddress, startInProcess, maximumHeapSize)
} }

View File

@ -400,7 +400,7 @@ class MockNetwork(private val networkSendManuallyPumped: Boolean = false,
overrideServices: Map<ServiceInfo, KeyPair>? = null, overrideServices: Map<ServiceInfo, KeyPair>? = null,
serviceName: CordaX500Name? = null): StartedNode<MockNode> { serviceName: CordaX500Name? = null): StartedNode<MockNode> {
return createNode(networkMapAddress, legalName = legalName, overrideServices = overrideServices, return createNode(networkMapAddress, legalName = legalName, overrideServices = overrideServices,
advertisedServices = *arrayOf(ServiceInfo(NetworkMapService.type), ServiceInfo(ValidatingNotaryService.type, serviceName))) advertisedServices = *arrayOf(ServiceInfo(ValidatingNotaryService.type, serviceName)))
} }
// Convenience method for Java // Convenience method for Java

View File

@ -8,17 +8,16 @@ import net.corda.core.internal.div
import net.corda.core.utilities.getOrThrow import net.corda.core.utilities.getOrThrow
import net.corda.node.internal.Node import net.corda.node.internal.Node
import net.corda.node.internal.StartedNode import net.corda.node.internal.StartedNode
import net.corda.nodeapi.internal.ServiceInfo
import net.corda.nodeapi.internal.ServiceType
import net.corda.node.services.config.ConfigHelper import net.corda.node.services.config.ConfigHelper
import net.corda.node.services.config.FullNodeConfiguration import net.corda.node.services.config.FullNodeConfiguration
import net.corda.node.services.config.configOf import net.corda.node.services.config.configOf
import net.corda.node.services.config.plus import net.corda.node.services.config.plus
import net.corda.node.services.network.NetworkMapService
import net.corda.node.services.transactions.RaftValidatingNotaryService import net.corda.node.services.transactions.RaftValidatingNotaryService
import net.corda.node.utilities.ServiceIdentityGenerator import net.corda.node.utilities.ServiceIdentityGenerator
import net.corda.nodeapi.User import net.corda.nodeapi.User
import net.corda.nodeapi.config.parseAs import net.corda.nodeapi.config.parseAs
import net.corda.nodeapi.internal.ServiceInfo
import net.corda.nodeapi.internal.ServiceType
import net.corda.testing.DUMMY_MAP import net.corda.testing.DUMMY_MAP
import net.corda.testing.TestDependencyInjectionBase import net.corda.testing.TestDependencyInjectionBase
import net.corda.testing.driver.addressMustNotBeBoundFuture import net.corda.testing.driver.addressMustNotBeBoundFuture
@ -91,7 +90,7 @@ abstract class NodeBasedTest : TestDependencyInjectionBase() {
rpcUsers: List<User> = emptyList(), rpcUsers: List<User> = emptyList(),
configOverrides: Map<String, Any> = emptyMap()): StartedNode<Node> { configOverrides: Map<String, Any> = emptyMap()): StartedNode<Node> {
check(_networkMapNode == null || _networkMapNode!!.info.legalIdentitiesAndCerts.first().name == legalName) check(_networkMapNode == null || _networkMapNode!!.info.legalIdentitiesAndCerts.first().name == legalName)
return startNodeInternal(legalName, platformVersion, advertisedServices + ServiceInfo(NetworkMapService.type), rpcUsers, configOverrides).apply { return startNodeInternal(legalName, platformVersion, advertisedServices, rpcUsers, configOverrides).apply {
_networkMapNode = this _networkMapNode = this
} }
} }

View File

@ -3,8 +3,6 @@ package net.corda.demobench.model
import com.typesafe.config.Config import com.typesafe.config.Config
import net.corda.core.identity.CordaX500Name import net.corda.core.identity.CordaX500Name
import net.corda.core.utilities.NetworkHostAndPort import net.corda.core.utilities.NetworkHostAndPort
import net.corda.nodeapi.internal.ServiceInfo
import net.corda.nodeapi.internal.ServiceType
import tornadofx.* import tornadofx.*
import java.io.IOException import java.io.IOException
import java.nio.file.Files import java.nio.file.Files
@ -54,7 +52,7 @@ class InstallFactory : Controller() {
} }
private fun Config.parseExtraServices(path: String): MutableList<String> { private fun Config.parseExtraServices(path: String): MutableList<String> {
val services = serviceController.services.values.toSortedSet() + ServiceInfo(ServiceType.networkMap).toString() val services = serviceController.services.values.toSortedSet()
return this.getStringList(path) return this.getStringList(path)
.filter { !it.isNullOrEmpty() } .filter { !it.isNullOrEmpty() }
.map { svc -> .map { svc ->

View File

@ -3,8 +3,6 @@ package net.corda.demobench.model
import net.corda.core.identity.CordaX500Name import net.corda.core.identity.CordaX500Name
import net.corda.demobench.plugin.PluginController import net.corda.demobench.plugin.PluginController
import net.corda.demobench.pty.R3Pty import net.corda.demobench.pty.R3Pty
import net.corda.nodeapi.internal.ServiceInfo
import net.corda.nodeapi.internal.ServiceType
import tornadofx.* import tornadofx.*
import java.io.IOException import java.io.IOException
import java.lang.management.ManagementFactory import java.lang.management.ManagementFactory
@ -100,7 +98,6 @@ class NodeController(check: atRuntime = ::checkExists) : Controller() {
if (hasNetworkMap()) { if (hasNetworkMap()) {
config.networkMap = networkMapConfig config.networkMap = networkMapConfig
} else { } else {
config.extraServices.add(ServiceInfo(ServiceType.networkMap).toString())
networkMapConfig = config networkMapConfig = config
log.info("Network map provided by: ${config.legalName}") log.info("Network map provided by: ${config.legalName}")
} }