mirror of
https://github.com/corda/corda.git
synced 2025-03-27 22:28:55 +00:00
[CORDA-1671] Minor: some more places where we were printing stack traces instead of clean error messages. (#3512)
* [CORDA-1671] Minor: some more places where we were printing stack traces instead of clean error messages. * Address review comments.
This commit is contained in:
parent
aefd90f062
commit
5d738ac8e8
@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
import com.typesafe.config.*;
|
import com.typesafe.config.*;
|
||||||
import sun.misc.Signal;
|
import sun.misc.Signal;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
@ -38,7 +39,7 @@ public class CordaCaplet extends Capsule {
|
|||||||
Config nodeConfig = ConfigFactory.parseFile(configFile, parseOptions);
|
Config nodeConfig = ConfigFactory.parseFile(configFile, parseOptions);
|
||||||
return baseDirectoryConfig.withFallback(nodeConfig).withFallback(defaultConfig).resolve();
|
return baseDirectoryConfig.withFallback(nodeConfig).withFallback(defaultConfig).resolve();
|
||||||
} catch (ConfigException e) {
|
} catch (ConfigException e) {
|
||||||
log(LOG_QUIET, e);
|
log(LOG_DEBUG, e);
|
||||||
return ConfigFactory.empty();
|
return ConfigFactory.empty();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,6 +21,19 @@ class NetworkParametersReader(private val trustRoot: X509Certificate,
|
|||||||
private val logger = contextLogger()
|
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 data class NetworkParamsAndHash(val networkParameters: NetworkParameters, val hash: SecureHash)
|
||||||
private val networkParamsFile = baseDirectory / NETWORK_PARAMS_FILE_NAME
|
private val networkParamsFile = baseDirectory / NETWORK_PARAMS_FILE_NAME
|
||||||
private val parametersUpdateFile = baseDirectory / NETWORK_PARAMS_UPDATE_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)
|
readParametersUpdate(advertisedParametersHash, signedParametersFromFile.raw.hash)
|
||||||
}
|
}
|
||||||
} else { // No compatibility zone configured. Node should proceed with parameters from file.
|
} 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")
|
logger.info("Loaded network parameters: $parameters")
|
||||||
return NetworkParamsAndHash(parameters.verifiedNetworkMapCert(trustRoot), parameters.raw.hash)
|
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 {
|
private fun readParametersUpdate(advertisedParametersHash: SecureHash, previousParametersHash: SecureHash): SignedNetworkParameters {
|
||||||
if (!parametersUpdateFile.exists()) {
|
if (!parametersUpdateFile.exists()) {
|
||||||
throw IllegalArgumentException("Node uses parameters with hash: $previousParametersHash " +
|
throw Error.OldParams(previousParametersHash, advertisedParametersHash)
|
||||||
"but network map is advertising: $advertisedParametersHash.\n" +
|
|
||||||
"Please update node to use correct network parameters file.")
|
|
||||||
}
|
}
|
||||||
val signedUpdatedParameters = parametersUpdateFile.readObject<SignedNetworkParameters>()
|
val signedUpdatedParameters = parametersUpdateFile.readObject<SignedNetworkParameters>()
|
||||||
if (signedUpdatedParameters.raw.hash != advertisedParametersHash) {
|
if (signedUpdatedParameters.raw.hash != advertisedParametersHash) {
|
||||||
throw IllegalArgumentException("Both network parameters and network parameters update files don't match" +
|
throw Error.OldParamsAndUpdate()
|
||||||
"parameters advertised by network map.\n" +
|
|
||||||
"Please update node to use correct network parameters file.")
|
|
||||||
}
|
}
|
||||||
parametersUpdateFile.moveTo(networkParamsFile, StandardCopyOption.REPLACE_EXISTING)
|
parametersUpdateFile.moveTo(networkParamsFile, StandardCopyOption.REPLACE_EXISTING)
|
||||||
logger.info("Scheduled update to network parameters has occurred - node now updated to these new parameters.")
|
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.
|
// Used only when node joins for the first time.
|
||||||
private fun downloadParameters(parametersHash: SecureHash): SignedNetworkParameters {
|
private fun downloadParameters(parametersHash: SecureHash): SignedNetworkParameters {
|
||||||
logger.info("No network-parameters file found. Expecting network parameters to be available from the network map.")
|
logger.info("No network-parameters file found. Expecting network parameters to be available from the network map.")
|
||||||
val networkMapClient = checkNotNull(networkMapClient) {
|
val networkMapClient = networkMapClient ?: throw Error.NetworkMapNotConfigured()
|
||||||
"Node hasn't been configured to connect to a network map from which to get the network parameters"
|
|
||||||
}
|
|
||||||
val signedParams = networkMapClient.getNetworkParameters(parametersHash)
|
val signedParams = networkMapClient.getNetworkParameters(parametersHash)
|
||||||
signedParams.serialize().open().copyTo(baseDirectory / NETWORK_PARAMS_FILE_NAME)
|
signedParams.serialize().open().copyTo(baseDirectory / NETWORK_PARAMS_FILE_NAME)
|
||||||
return signedParams
|
return signedParams
|
||||||
|
@ -10,12 +10,7 @@ import net.corda.core.internal.*
|
|||||||
import net.corda.core.internal.concurrent.thenMatch
|
import net.corda.core.internal.concurrent.thenMatch
|
||||||
import net.corda.core.utilities.Try
|
import net.corda.core.utilities.Try
|
||||||
import net.corda.core.utilities.loggerFor
|
import net.corda.core.utilities.loggerFor
|
||||||
import net.corda.node.CmdLineOptions
|
import net.corda.node.*
|
||||||
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.internal.cordapp.MultipleCordappsForFlowException
|
import net.corda.node.internal.cordapp.MultipleCordappsForFlowException
|
||||||
import net.corda.node.services.config.NodeConfiguration
|
import net.corda.node.services.config.NodeConfiguration
|
||||||
import net.corda.node.services.config.NodeConfigurationImpl
|
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.createKeyPairAndSelfSignedTLSCertificate
|
||||||
import net.corda.node.utilities.registration.HTTPNetworkRegistrationService
|
import net.corda.node.utilities.registration.HTTPNetworkRegistrationService
|
||||||
import net.corda.node.utilities.registration.NodeRegistrationHelper
|
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.saveToKeyStore
|
||||||
import net.corda.node.utilities.saveToTrustStore
|
import net.corda.node.utilities.saveToTrustStore
|
||||||
import net.corda.node.utilities.registration.UnableToRegisterNodeWithDoormanException
|
|
||||||
import net.corda.nodeapi.internal.addShutdownHook
|
import net.corda.nodeapi.internal.addShutdownHook
|
||||||
import net.corda.nodeapi.internal.config.UnknownConfigurationKeysException
|
import net.corda.nodeapi.internal.config.UnknownConfigurationKeysException
|
||||||
import net.corda.nodeapi.internal.persistence.CouldNotCreateDataSourceException
|
import net.corda.nodeapi.internal.persistence.CouldNotCreateDataSourceException
|
||||||
@ -154,6 +149,9 @@ open class NodeStartup(val args: Array<String>) {
|
|||||||
} catch (e: CheckpointIncompatibleException) {
|
} catch (e: CheckpointIncompatibleException) {
|
||||||
logger.error(e.message)
|
logger.error(e.message)
|
||||||
return false
|
return false
|
||||||
|
} catch (e: NetworkParametersReader.Error) {
|
||||||
|
logger.error(e.message)
|
||||||
|
return false
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
if (e is Errors.NativeIoException && e.message?.contains("Address already in use") == true) {
|
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.")
|
logger.error("One of the ports required by the Corda node is already in use.")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user