mirror of
https://github.com/corda/corda.git
synced 2025-01-20 11:39:09 +00:00
node: Add extra Driver checks for node shutdown, extend try/finally scope of cleanup
This commit is contained in:
parent
2e6de61ad0
commit
df4413ab68
@ -39,6 +39,8 @@ import java.util.concurrent.TimeoutException
|
|||||||
* TODO The network map service bootstrap is hacky (needs to fake the service's public key in order to retrieve the true one), needs some thought.
|
* TODO The network map service bootstrap is hacky (needs to fake the service's public key in order to retrieve the true one), needs some thought.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
private val log: Logger = LoggerFactory.getLogger(DriverDSL::class.java)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This is the interface that's exposed to
|
* This is the interface that's exposed to
|
||||||
*/
|
*/
|
||||||
@ -66,8 +68,6 @@ sealed class PortAllocation {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private val log: Logger = LoggerFactory.getLogger("Driver")
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* [driver] allows one to start up nodes like this:
|
* [driver] allows one to start up nodes like this:
|
||||||
* driver {
|
* driver {
|
||||||
@ -127,19 +127,22 @@ fun <DI : DriverDSLExposedInterface, D : DriverDSLInternalInterface, A> genericD
|
|||||||
dsl: DI.() -> A,
|
dsl: DI.() -> A,
|
||||||
with: (DriverHandle, A) -> Unit
|
with: (DriverHandle, A) -> Unit
|
||||||
): A {
|
): A {
|
||||||
driverDsl.start()
|
var shutdownHook: Thread? = null
|
||||||
val returnValue = dsl(coerce(driverDsl))
|
|
||||||
val shutdownHook = Thread({
|
|
||||||
driverDsl.shutdown()
|
|
||||||
})
|
|
||||||
Runtime.getRuntime().addShutdownHook(shutdownHook)
|
|
||||||
try {
|
try {
|
||||||
|
driverDsl.start()
|
||||||
|
val returnValue = dsl(coerce(driverDsl))
|
||||||
|
shutdownHook = Thread({
|
||||||
|
driverDsl.shutdown()
|
||||||
|
})
|
||||||
|
Runtime.getRuntime().addShutdownHook(shutdownHook)
|
||||||
with(DriverHandle(driverDsl), returnValue)
|
with(DriverHandle(driverDsl), returnValue)
|
||||||
|
return returnValue
|
||||||
} finally {
|
} finally {
|
||||||
driverDsl.shutdown()
|
driverDsl.shutdown()
|
||||||
Runtime.getRuntime().removeShutdownHook(shutdownHook)
|
if (shutdownHook != null) {
|
||||||
|
Runtime.getRuntime().removeShutdownHook(shutdownHook)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return returnValue
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getTimestampAsDirectoryName(): String {
|
private fun getTimestampAsDirectoryName(): String {
|
||||||
@ -149,6 +152,28 @@ private fun getTimestampAsDirectoryName(): String {
|
|||||||
return df.format(Date())
|
return df.format(Date())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun addressMustBeBound(hostAndPort: HostAndPort) {
|
||||||
|
poll {
|
||||||
|
try {
|
||||||
|
Socket(hostAndPort.hostText, hostAndPort.port).close()
|
||||||
|
Unit
|
||||||
|
} catch (_exception: SocketException) {
|
||||||
|
null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun addressMustNotBeBound(hostAndPort: HostAndPort) {
|
||||||
|
poll {
|
||||||
|
try {
|
||||||
|
Socket(hostAndPort.hostText, hostAndPort.port).close()
|
||||||
|
null
|
||||||
|
} catch (_exception: SocketException) {
|
||||||
|
Unit
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class DriverHandle(private val driverDsl: DriverDSLInternalInterface) {
|
class DriverHandle(private val driverDsl: DriverDSLInternalInterface) {
|
||||||
val messagingService = driverDsl.messagingService
|
val messagingService = driverDsl.messagingService
|
||||||
val networkMapCache = driverDsl.networkMapCache
|
val networkMapCache = driverDsl.networkMapCache
|
||||||
@ -228,6 +253,10 @@ class DriverDSL(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
messagingService.stop()
|
messagingService.stop()
|
||||||
|
|
||||||
|
// Check that we shut down properly
|
||||||
|
addressMustNotBeBound(messagingService.myHostPort)
|
||||||
|
addressMustNotBeBound((networkMapNodeInfo.address as ArtemisMessagingService.Address).hostAndPort)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -23,7 +23,7 @@ import java.nio.file.Paths
|
|||||||
import java.security.PublicKey
|
import java.security.PublicKey
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
private val log: Logger = LoggerFactory.getLogger("NodeRunner")
|
private val log: Logger = LoggerFactory.getLogger(NodeRunner::class.java)
|
||||||
|
|
||||||
class NodeRunner {
|
class NodeRunner {
|
||||||
companion object {
|
companion object {
|
||||||
|
@ -14,28 +14,6 @@ import java.net.SocketException
|
|||||||
class DriverTests {
|
class DriverTests {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
fun addressMustBeBound(hostAndPort: HostAndPort) {
|
|
||||||
poll {
|
|
||||||
try {
|
|
||||||
Socket(hostAndPort.hostText, hostAndPort.port).close()
|
|
||||||
Unit
|
|
||||||
} catch (_exception: SocketException) {
|
|
||||||
null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun addressMustNotBeBound(hostAndPort: HostAndPort) {
|
|
||||||
poll {
|
|
||||||
try {
|
|
||||||
Socket(hostAndPort.hostText, hostAndPort.port).close()
|
|
||||||
null
|
|
||||||
} catch (_exception: SocketException) {
|
|
||||||
Unit
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun nodeMustBeUp(networkMapCache: NetworkMapCache, nodeInfo: NodeInfo, nodeName: String) {
|
fun nodeMustBeUp(networkMapCache: NetworkMapCache, nodeInfo: NodeInfo, nodeName: String) {
|
||||||
val address = nodeInfo.address as ArtemisMessagingComponent.Address
|
val address = nodeInfo.address as ArtemisMessagingComponent.Address
|
||||||
// Check that the node is registered in the network map
|
// Check that the node is registered in the network map
|
||||||
|
Loading…
Reference in New Issue
Block a user