CONTRIBUTION - Network bootstrapper check for duplicate node names (#3182)

This commit is contained in:
Stanly Johnson 2018-05-18 15:01:24 +05:30 committed by Katelyn Baker
parent cd89888655
commit f9a9bb19a7
2 changed files with 37 additions and 7 deletions

View File

@ -1,11 +1,12 @@
# List of Contributors
We'd like to thank the following people for contributing ideas to Corda,
either during architecture review sessions of the R3 Architecture Working Group,
or in design reviews since Corda has been open-sourced. Some people have moved to
a different organisation since their contribution. Please forgive any omissions, and
create a pull request, or email <james@r3.com>, if you wish to see
changes to this list.
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 <james@r3.com>, if you wish to
see changes to this list.
* Alberto Arri (R3)
* Andras Slemmer (R3)
@ -122,6 +123,8 @@ changes to this list.
* Shams Asari (R3)
* Simon Taylor (Barclays)
* Sofus Mortensen (Digital Asset Holdings)
* stevenroose
* Stanly Johnson (Servntire Global)
* Szymon Sztuka (R3)
* Stephen Lane-Smith (BMO)
* Thomas O'Donnell (Macquarie)
@ -132,6 +135,11 @@ changes to this list.
* Tim Swanson (R3)
* Timothy Smith (Credit Suisse)
* Tommy Lillehagen (R3)
* tomtau
* Tudor Malene (R3)
* Tushar Singh Bora
* varunkm
* verymahler
* Viktor Kolomeyko (R3)
* Wawrzek Niewodniczanski (R3)
* Wei Wu Zhang (Commonwealth Bank of Australia)

View File

@ -38,6 +38,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.
@ -77,7 +81,9 @@ class NetworkBootstrapper {
try {
println("Waiting for all nodes to generate their node-info files...")
val nodeInfoFiles = gatherNodeInfoFiles(processes, nodeDirs)
println("Distributing all node info-files to all nodes")
println("Checking for duplicate nodes")
checkForDuplicateLegalNames(nodeInfoFiles)
println("Distributing all node-info files to all nodes")
distributeNodeInfos(nodeDirs, nodeInfoFiles)
println("Gathering notary identities")
val notaryInfos = gatherNotaryInfos(nodeInfoFiles)
@ -158,6 +164,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<Path>) {
val legalNames = HashSet<String>()
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<Path>): List<NotaryInfo> {
return nodeInfoFiles.mapNotNull { nodeInfoFile ->
// The config contains the notary type