mirror of
https://github.com/corda/corda.git
synced 2025-06-18 15:18:16 +00:00
Init CRaSH shell only when it's really needed (#2448)
* Avoid initializing CraSH if its not to be used
This commit is contained in:
committed by
GitHub
parent
429da85650
commit
45ff60fccc
@ -1,5 +1,6 @@
|
|||||||
package net.corda.node
|
package net.corda.node
|
||||||
|
|
||||||
|
import com.typesafe.config.ConfigFactory
|
||||||
import joptsimple.OptionParser
|
import joptsimple.OptionParser
|
||||||
import joptsimple.util.EnumConverter
|
import joptsimple.util.EnumConverter
|
||||||
import net.corda.core.internal.div
|
import net.corda.core.internal.div
|
||||||
@ -93,7 +94,9 @@ data class CmdLineOptions(val baseDirectory: Path,
|
|||||||
val justGenerateNodeInfo: Boolean,
|
val justGenerateNodeInfo: Boolean,
|
||||||
val bootstrapRaftCluster: Boolean) {
|
val bootstrapRaftCluster: Boolean) {
|
||||||
fun loadConfig(): NodeConfiguration {
|
fun loadConfig(): NodeConfiguration {
|
||||||
val config = ConfigHelper.loadConfig(baseDirectory, configFile).parseAsNodeConfiguration()
|
val config = ConfigHelper.loadConfig(baseDirectory, configFile, configOverrides = ConfigFactory.parseMap(
|
||||||
|
mapOf("noLocalShell" to this.noLocalShell)
|
||||||
|
)).parseAsNodeConfiguration()
|
||||||
if (isRegistration) {
|
if (isRegistration) {
|
||||||
requireNotNull(config.compatibilityZoneURL) { "Compatibility Zone Url must be provided in registration mode." }
|
requireNotNull(config.compatibilityZoneURL) { "Compatibility Zone Url must be provided in registration mode." }
|
||||||
requireNotNull(networkRootTruststorePath) { "Network root trust store path must be provided in registration mode." }
|
requireNotNull(networkRootTruststorePath) { "Network root trust store path must be provided in registration mode." }
|
||||||
|
@ -36,10 +36,7 @@ import net.corda.node.services.ContractUpgradeHandler
|
|||||||
import net.corda.node.services.FinalityHandler
|
import net.corda.node.services.FinalityHandler
|
||||||
import net.corda.node.services.NotaryChangeHandler
|
import net.corda.node.services.NotaryChangeHandler
|
||||||
import net.corda.node.services.api.*
|
import net.corda.node.services.api.*
|
||||||
import net.corda.node.services.config.BFTSMaRtConfiguration
|
import net.corda.node.services.config.*
|
||||||
import net.corda.node.services.config.NodeConfiguration
|
|
||||||
import net.corda.node.services.config.NotaryConfig
|
|
||||||
import net.corda.node.services.config.configureWithDevSSLCertificate
|
|
||||||
import net.corda.node.services.events.NodeSchedulerService
|
import net.corda.node.services.events.NodeSchedulerService
|
||||||
import net.corda.node.services.events.ScheduledActivityObserver
|
import net.corda.node.services.events.ScheduledActivityObserver
|
||||||
import net.corda.node.services.identity.PersistentIdentityService
|
import net.corda.node.services.identity.PersistentIdentityService
|
||||||
@ -278,8 +275,10 @@ abstract class AbstractNode(val configuration: NodeConfiguration,
|
|||||||
protected abstract fun getRxIoScheduler(): Scheduler
|
protected abstract fun getRxIoScheduler(): Scheduler
|
||||||
|
|
||||||
open fun startShell(rpcOps: CordaRPCOps) {
|
open fun startShell(rpcOps: CordaRPCOps) {
|
||||||
|
if (configuration.shouldInitCrashShell()) {
|
||||||
InteractiveShell.startShell(configuration, rpcOps, securityManager, _services.identityService, _services.database)
|
InteractiveShell.startShell(configuration, rpcOps, securityManager, _services.identityService, _services.database)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun initNodeInfo(networkMapCache: NetworkMapCacheBaseInternal,
|
private fun initNodeInfo(networkMapCache: NetworkMapCacheBaseInternal,
|
||||||
identity: PartyAndCertificate,
|
identity: PartyAndCertificate,
|
||||||
|
@ -11,6 +11,7 @@ import net.corda.core.utilities.loggerFor
|
|||||||
import net.corda.node.*
|
import net.corda.node.*
|
||||||
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
|
||||||
|
import net.corda.node.services.config.shouldStartLocalShell
|
||||||
import net.corda.node.services.transactions.bftSMaRtSerialFilter
|
import net.corda.node.services.transactions.bftSMaRtSerialFilter
|
||||||
import net.corda.node.shell.InteractiveShell
|
import net.corda.node.shell.InteractiveShell
|
||||||
import net.corda.node.utilities.registration.HTTPNetworkRegistrationService
|
import net.corda.node.utilities.registration.HTTPNetworkRegistrationService
|
||||||
@ -140,7 +141,7 @@ open class NodeStartup(val args: Array<String>) {
|
|||||||
Node.printBasicNodeInfo("Node for \"$name\" started up and registered in $elapsed sec")
|
Node.printBasicNodeInfo("Node for \"$name\" started up and registered in $elapsed sec")
|
||||||
|
|
||||||
// Don't start the shell if there's no console attached.
|
// Don't start the shell if there's no console attached.
|
||||||
if (!cmdlineOptions.noLocalShell && System.console() != null && conf.devMode) {
|
if (conf.shouldStartLocalShell()) {
|
||||||
startedNode.internals.startupComplete.then {
|
startedNode.internals.startupComplete.then {
|
||||||
try {
|
try {
|
||||||
InteractiveShell.runLocalShell(startedNode)
|
InteractiveShell.runLocalShell(startedNode)
|
||||||
|
@ -45,6 +45,7 @@ interface NodeConfiguration : NodeSSLConfiguration {
|
|||||||
val detectPublicIp: Boolean get() = true
|
val detectPublicIp: Boolean get() = true
|
||||||
val sshd: SSHDConfiguration?
|
val sshd: SSHDConfiguration?
|
||||||
val database: DatabaseConfig
|
val database: DatabaseConfig
|
||||||
|
val noLocalShell: Boolean get() = false
|
||||||
val transactionCacheSizeBytes: Long get() = defaultTransactionCacheSize
|
val transactionCacheSizeBytes: Long get() = defaultTransactionCacheSize
|
||||||
val attachmentContentCacheSizeBytes: Long get() = defaultAttachmentContentCacheSize
|
val attachmentContentCacheSizeBytes: Long get() = defaultAttachmentContentCacheSize
|
||||||
val attachmentCacheBound: Long get() = defaultAttachmentCacheBound
|
val attachmentCacheBound: Long get() = defaultAttachmentCacheBound
|
||||||
@ -69,6 +70,10 @@ fun NodeConfiguration.shouldCheckCheckpoints(): Boolean {
|
|||||||
return this.devMode && this.devModeOptions?.disableCheckpointChecker != true
|
return this.devMode && this.devModeOptions?.disableCheckpointChecker != true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun NodeConfiguration.shouldStartSSHDaemon() = this.sshd != null
|
||||||
|
fun NodeConfiguration.shouldStartLocalShell() = !this.noLocalShell && System.console() != null && this.devMode
|
||||||
|
fun NodeConfiguration.shouldInitCrashShell() = shouldStartLocalShell() || shouldStartSSHDaemon()
|
||||||
|
|
||||||
data class NotaryConfig(val validating: Boolean,
|
data class NotaryConfig(val validating: Boolean,
|
||||||
val raft: RaftConfig? = null,
|
val raft: RaftConfig? = null,
|
||||||
val bftSMaRt: BFTSMaRtConfiguration? = null,
|
val bftSMaRt: BFTSMaRtConfiguration? = null,
|
||||||
@ -128,6 +133,7 @@ data class NodeConfigurationImpl(
|
|||||||
override val notary: NotaryConfig?,
|
override val notary: NotaryConfig?,
|
||||||
override val certificateChainCheckPolicies: List<CertChainPolicyConfig>,
|
override val certificateChainCheckPolicies: List<CertChainPolicyConfig>,
|
||||||
override val devMode: Boolean = false,
|
override val devMode: Boolean = false,
|
||||||
|
override val noLocalShell: Boolean = false,
|
||||||
override val devModeOptions: DevModeOptions? = null,
|
override val devModeOptions: DevModeOptions? = null,
|
||||||
override val useTestClock: Boolean = false,
|
override val useTestClock: Boolean = false,
|
||||||
override val detectPublicIp: Boolean = true,
|
override val detectPublicIp: Boolean = true,
|
||||||
|
@ -29,6 +29,18 @@ class NodeConfigurationImplTest {
|
|||||||
assertFalse { configDebugOptions(true, DevModeOptions(true)).shouldCheckCheckpoints() }
|
assertFalse { configDebugOptions(true, DevModeOptions(true)).shouldCheckCheckpoints() }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `check crashShell flags helper`() {
|
||||||
|
assertFalse { testConfiguration.copy(sshd = null).shouldStartSSHDaemon() }
|
||||||
|
assertTrue { testConfiguration.copy(sshd = SSHDConfiguration(1234)).shouldStartSSHDaemon() }
|
||||||
|
assertFalse { testConfiguration.copy(noLocalShell = true).shouldStartLocalShell() }
|
||||||
|
assertFalse { testConfiguration.copy(noLocalShell = false, devMode = false).shouldStartLocalShell() }
|
||||||
|
assertFalse { testConfiguration.copy(noLocalShell = false, devMode = true).shouldStartLocalShell() }
|
||||||
|
assertFalse { testConfiguration.copy(noLocalShell = true).shouldInitCrashShell() }
|
||||||
|
assertFalse { testConfiguration.copy(sshd = null).shouldInitCrashShell() }
|
||||||
|
assertFalse { testConfiguration.copy(noLocalShell = true, sshd = null).shouldInitCrashShell() }
|
||||||
|
}
|
||||||
|
|
||||||
private fun configDebugOptions(devMode: Boolean, devModeOptions: DevModeOptions?): NodeConfiguration {
|
private fun configDebugOptions(devMode: Boolean, devModeOptions: DevModeOptions?): NodeConfiguration {
|
||||||
return testConfiguration.copy(devMode = devMode, devModeOptions = devModeOptions)
|
return testConfiguration.copy(devMode = devMode, devModeOptions = devModeOptions)
|
||||||
}
|
}
|
||||||
@ -63,6 +75,7 @@ class NodeConfigurationImplTest {
|
|||||||
notary = null,
|
notary = null,
|
||||||
certificateChainCheckPolicies = emptyList(),
|
certificateChainCheckPolicies = emptyList(),
|
||||||
devMode = true,
|
devMode = true,
|
||||||
|
noLocalShell = false,
|
||||||
activeMQServer = ActiveMqServerConfiguration(BridgeConfiguration(0, 0, 0.0)),
|
activeMQServer = ActiveMqServerConfiguration(BridgeConfiguration(0, 0, 0.0)),
|
||||||
rpcSettings = rpcSettings
|
rpcSettings = rpcSettings
|
||||||
)
|
)
|
||||||
|
Reference in New Issue
Block a user