diff --git a/node/src/main/java/CordaCaplet.java b/node/src/main/java/CordaCaplet.java index f6dd310ea2..4e4e073e95 100644 --- a/node/src/main/java/CordaCaplet.java +++ b/node/src/main/java/CordaCaplet.java @@ -4,6 +4,7 @@ import com.typesafe.config.*; import sun.misc.Signal; + import java.io.File; import java.nio.file.Path; import java.nio.file.Paths; @@ -38,7 +39,7 @@ public class CordaCaplet extends Capsule { Config nodeConfig = ConfigFactory.parseFile(configFile, parseOptions); return baseDirectoryConfig.withFallback(nodeConfig).withFallback(defaultConfig).resolve(); } catch (ConfigException e) { - log(LOG_QUIET, e); + log(LOG_DEBUG, e); return ConfigFactory.empty(); } } diff --git a/node/src/main/kotlin/net/corda/node/internal/NetworkParametersReader.kt b/node/src/main/kotlin/net/corda/node/internal/NetworkParametersReader.kt index 8b1a7001d6..c85092c624 100644 --- a/node/src/main/kotlin/net/corda/node/internal/NetworkParametersReader.kt +++ b/node/src/main/kotlin/net/corda/node/internal/NetworkParametersReader.kt @@ -21,6 +21,19 @@ class NetworkParametersReader(private val trustRoot: X509Certificate, private val logger = contextLogger() } + sealed class Error(message: String) : Exception(message) { + class ParamsNotConfigured : Error("Couldn't find network parameters file and compatibility zone wasn't configured/isn't reachable.") + class NetworkMapNotConfigured : Error("Node hasn't been configured to connect to a network map from which to get the network parameters.") + class OldParamsAndUpdate : Error( + "Both network parameters and network parameters update files don't match" + + "parameters advertised by network map. Please update node to use correct network parameters file." + ) + class OldParams(previousParametersHash: SecureHash, advertisedParametersHash: SecureHash) : Error( + "Node uses parameters with hash: $previousParametersHash but network map is advertising: " + + "$advertisedParametersHash. Please update node to use correct network parameters file." + ) + } + private data class NetworkParamsAndHash(val networkParameters: NetworkParameters, val hash: SecureHash) private val networkParamsFile = baseDirectory / NETWORK_PARAMS_FILE_NAME private val parametersUpdateFile = baseDirectory / NETWORK_PARAMS_UPDATE_FILE_NAME @@ -53,7 +66,7 @@ class NetworkParametersReader(private val trustRoot: X509Certificate, readParametersUpdate(advertisedParametersHash, signedParametersFromFile.raw.hash) } } else { // No compatibility zone configured. Node should proceed with parameters from file. - signedParametersFromFile ?: throw IllegalArgumentException("Couldn't find network parameters file and compatibility zone wasn't configured/isn't reachable") + signedParametersFromFile ?: throw Error.ParamsNotConfigured() } logger.info("Loaded network parameters: $parameters") return NetworkParamsAndHash(parameters.verifiedNetworkMapCert(trustRoot), parameters.raw.hash) @@ -61,15 +74,11 @@ class NetworkParametersReader(private val trustRoot: X509Certificate, private fun readParametersUpdate(advertisedParametersHash: SecureHash, previousParametersHash: SecureHash): SignedNetworkParameters { if (!parametersUpdateFile.exists()) { - throw IllegalArgumentException("Node uses parameters with hash: $previousParametersHash " + - "but network map is advertising: $advertisedParametersHash.\n" + - "Please update node to use correct network parameters file.") + throw Error.OldParams(previousParametersHash, advertisedParametersHash) } val signedUpdatedParameters = parametersUpdateFile.readObject<SignedNetworkParameters>() if (signedUpdatedParameters.raw.hash != advertisedParametersHash) { - throw IllegalArgumentException("Both network parameters and network parameters update files don't match" + - "parameters advertised by network map.\n" + - "Please update node to use correct network parameters file.") + throw Error.OldParamsAndUpdate() } parametersUpdateFile.moveTo(networkParamsFile, StandardCopyOption.REPLACE_EXISTING) logger.info("Scheduled update to network parameters has occurred - node now updated to these new parameters.") @@ -79,9 +88,7 @@ class NetworkParametersReader(private val trustRoot: X509Certificate, // Used only when node joins for the first time. private fun downloadParameters(parametersHash: SecureHash): SignedNetworkParameters { logger.info("No network-parameters file found. Expecting network parameters to be available from the network map.") - val networkMapClient = checkNotNull(networkMapClient) { - "Node hasn't been configured to connect to a network map from which to get the network parameters" - } + val networkMapClient = networkMapClient ?: throw Error.NetworkMapNotConfigured() val signedParams = networkMapClient.getNetworkParameters(parametersHash) signedParams.serialize().open().copyTo(baseDirectory / NETWORK_PARAMS_FILE_NAME) return signedParams diff --git a/node/src/main/kotlin/net/corda/node/internal/NodeStartup.kt b/node/src/main/kotlin/net/corda/node/internal/NodeStartup.kt index 790de59c8d..4424236b05 100644 --- a/node/src/main/kotlin/net/corda/node/internal/NodeStartup.kt +++ b/node/src/main/kotlin/net/corda/node/internal/NodeStartup.kt @@ -10,12 +10,7 @@ import net.corda.core.internal.* import net.corda.core.internal.concurrent.thenMatch import net.corda.core.utilities.Try import net.corda.core.utilities.loggerFor -import net.corda.node.CmdLineOptions -import net.corda.node.NodeArgsParser -import net.corda.node.NodeRegistrationOption -import net.corda.node.SerialFilter -import net.corda.node.VersionInfo -import net.corda.node.defaultSerialFilter +import net.corda.node.* import net.corda.node.internal.cordapp.MultipleCordappsForFlowException import net.corda.node.services.config.NodeConfiguration import net.corda.node.services.config.NodeConfigurationImpl @@ -25,9 +20,9 @@ import net.corda.node.services.transactions.bftSMaRtSerialFilter import net.corda.node.utilities.createKeyPairAndSelfSignedTLSCertificate import net.corda.node.utilities.registration.HTTPNetworkRegistrationService import net.corda.node.utilities.registration.NodeRegistrationHelper +import net.corda.node.utilities.registration.UnableToRegisterNodeWithDoormanException import net.corda.node.utilities.saveToKeyStore import net.corda.node.utilities.saveToTrustStore -import net.corda.node.utilities.registration.UnableToRegisterNodeWithDoormanException import net.corda.nodeapi.internal.addShutdownHook import net.corda.nodeapi.internal.config.UnknownConfigurationKeysException import net.corda.nodeapi.internal.persistence.CouldNotCreateDataSourceException @@ -154,6 +149,9 @@ open class NodeStartup(val args: Array<String>) { } catch (e: CheckpointIncompatibleException) { logger.error(e.message) return false + } catch (e: NetworkParametersReader.Error) { + logger.error(e.message) + return false } catch (e: Exception) { if (e is Errors.NativeIoException && e.message?.contains("Address already in use") == true) { logger.error("One of the ports required by the Corda node is already in use.")