diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 3be2d6bd9e..a27727f797 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -1,11 +1,11 @@ # List of Contributors -We'd like to thank the following people for contributing to Corda, either by -contributing to the design of Corda during the architecture review sessions of the -R3 Architecture Working Group and during design reviews since Corda has been -open-sourced, or by contributing code via pull requests. Some people have -moved to a different organisation since their contribution. Please forgive any -omissions, and create a pull request, or email , if you wish to +We'd like to thank the following people for contributing to Corda, either by +contributing to the design of Corda during the architecture review sessions of the +R3 Architecture Working Group and during design reviews since Corda has been +open-sourced, or by contributing code via pull requests. Some people have +moved to a different organisation since their contribution. Please forgive any +omissions, and create a pull request, or email , if you wish to see changes to this list. * acetheultimate @@ -164,6 +164,7 @@ see changes to this list. * Simon Taylor (Barclays) * Sofus Mortensen (Digital Asset Holdings) * stevenroose +* Stanly Johnson (Servntire Global) * Szymon Sztuka (R3) * tb-pq * Thiago Rafael Ferreira (Scorpius IT Solutions) @@ -175,7 +176,7 @@ see changes to this list. * tomconte * Tommy Lillehagen (R3) * tomtau -* Tudor Malene (R3) +* Tudor Malene (R3) * Tushar Singh Bora * varunkm * verymahler diff --git a/node-api/src/main/kotlin/net/corda/nodeapi/internal/network/NetworkBootstrapper.kt b/node-api/src/main/kotlin/net/corda/nodeapi/internal/network/NetworkBootstrapper.kt index e508c78fd0..ea3919323e 100644 --- a/node-api/src/main/kotlin/net/corda/nodeapi/internal/network/NetworkBootstrapper.kt +++ b/node-api/src/main/kotlin/net/corda/nodeapi/internal/network/NetworkBootstrapper.kt @@ -37,6 +37,10 @@ import java.time.Instant import java.util.concurrent.Executors import java.util.concurrent.TimeoutException import kotlin.streams.toList +import kotlin.collections.HashSet +import kotlin.collections.component1 +import kotlin.collections.component2 +import kotlin.collections.set /** * Class to bootstrap a local network of Corda nodes on the same filesystem. @@ -74,6 +78,8 @@ class NetworkBootstrapper { try { println("Waiting for all nodes to generate their node-info files...") val nodeInfoFiles = gatherNodeInfoFiles(processes, nodeDirs) + println("Checking for duplicate nodes") + checkForDuplicateLegalNames(nodeInfoFiles) println("Distributing all node-info files to all nodes") distributeNodeInfos(nodeDirs, nodeInfoFiles) print("Loading existing network parameters... ") @@ -160,6 +166,22 @@ class NetworkBootstrapper { } } + /*the function checks for duplicate myLegalName in the all the *_node.conf files + All the myLegalName values are added to a HashSet - this helps detect duplicate values. + If a duplicate name is found the process is aborted with an error message + */ + private fun checkForDuplicateLegalNames(nodeInfoFiles: List) { + val legalNames = HashSet() + for (nodeInfoFile in nodeInfoFiles) { + val nodeConfig = ConfigFactory.parseFile((nodeInfoFile.parent / "node.conf").toFile()) + val legalName = nodeConfig.getString("myLegalName") + if(!legalNames.add(legalName)){ + println("Duplicate Node Found - ensure every node has a unique legal name"); + throw IllegalArgumentException("Duplicate Node Found - $legalName"); + } + } + } + private fun gatherNotaryInfos(nodeInfoFiles: List): List { return nodeInfoFiles.mapNotNull { nodeInfoFile -> // The config contains the notary type