INFRA-749 Shut down and delete test H2 databases (#6739)

This commit is contained in:
Ross Nicoll 2020-09-22 14:32:01 +01:00 committed by GitHub
parent b6cd4fa997
commit 88a205600d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 27 additions and 5 deletions

View File

@ -13,11 +13,12 @@ object DatabaseSnapshot {
return resourceUri.openStream()
}
fun databaseFilename(baseDirectory: Path) = baseDirectory.resolve(databaseName)
fun copyDatabaseSnapshot(baseDirectory: Path) {
getDatabaseSnapshotStream().use { stream ->
Files.createDirectories(baseDirectory)
val path = baseDirectory.resolve(databaseName)
Files.copy(stream, path)
Files.copy(stream, databaseFilename(baseDirectory))
}
}
}

View File

@ -36,6 +36,7 @@ import net.corda.core.internal.cordapp.CordappImpl.Companion.MIN_PLATFORM_VERSIO
import net.corda.core.internal.cordapp.CordappImpl.Companion.TARGET_PLATFORM_VERSION
import net.corda.core.internal.cordapp.get
import net.corda.core.internal.createDirectories
import net.corda.core.internal.deleteIfExists
import net.corda.core.internal.div
import net.corda.core.internal.isRegularFile
import net.corda.core.internal.list
@ -57,6 +58,7 @@ import net.corda.core.utilities.toHexString
import net.corda.coretesting.internal.stubs.CertificateStoreStubs
import net.corda.node.NodeRegistrationOption
import net.corda.node.VersionInfo
import net.corda.node.internal.DataSourceFactory
import net.corda.node.internal.Node
import net.corda.node.internal.NodeWithInfo
import net.corda.node.internal.clientSslOptionsCompatibleWith
@ -272,14 +274,17 @@ class DriverDSLImpl(
val name = parameters.providedName ?: CordaX500Name("${oneOf(names).organisation}-${p2pAddress.port}", "London", "GB")
val config = createConfig(name, parameters, p2pAddress)
if (premigrateH2Database && isH2Database(config)) {
if (!inMemoryDB) {
if (isH2Database(config) && !inMemoryDB) {
if (premigrateH2Database) {
try {
DatabaseSnapshot.copyDatabaseSnapshot(config.corda.baseDirectory)
} catch (ex: java.nio.file.FileAlreadyExistsException) {
log.warn("Database already exists on disk, not attempting to pre-migrate database.")
}
}
shutdownManager.registerShutdown {
shutdownAndDeleteDatabase(config.corda)
}
}
val registrationFuture = if (compatibilityZone?.rootCert != null) {
// We don't need the network map to be available to be able to register the node
@ -1142,6 +1147,17 @@ class DriverDSLImpl(
private fun Map<String, Any>.removeResolvedClasspath(): Map<String, Any> {
return filterNot { it.key == "java.class.path" }
}
private fun shutdownAndDeleteDatabase(config: NodeConfiguration) {
DataSourceFactory.createDataSource(config.dataSourceProperties).also { dataSource ->
dataSource.connection.use { connection ->
connection.createStatement().use { statement ->
statement.execute("SHUTDOWN")
}
}
}
DatabaseSnapshot.databaseFilename(config.baseDirectory).deleteIfExists()
}
}
}

View File

@ -17,6 +17,7 @@ import net.corda.core.internal.NetworkParametersStorage
import net.corda.core.internal.PLATFORM_VERSION
import net.corda.core.internal.VisibleForTesting
import net.corda.core.internal.createDirectories
import net.corda.core.internal.deleteIfExists
import net.corda.core.internal.div
import net.corda.core.internal.notary.NotaryService
import net.corda.core.internal.uncheckedCast
@ -64,6 +65,7 @@ import net.corda.nodeapi.internal.network.NetworkParametersCopier
import net.corda.nodeapi.internal.persistence.CordaPersistence
import net.corda.nodeapi.internal.persistence.DatabaseConfig
import net.corda.testing.common.internal.testNetworkParameters
import net.corda.testing.node.DatabaseSnapshot
import net.corda.testing.node.InMemoryMessagingNetwork
import net.corda.testing.node.MockNetworkNotarySpec
import net.corda.testing.node.MockNetworkParameters
@ -606,7 +608,10 @@ open class InternalMockNetwork(cordappPackages: List<String> = emptyList(),
cordappClassLoader.use { _ ->
// Serialization env must be unset even if other parts of this method fail.
serializationEnv.use {
nodes.forEach { it.started?.dispose() }
nodes.forEach { node ->
node.started?.dispose()
DatabaseSnapshot.databaseFilename(node.configuration.baseDirectory).deleteIfExists()
}
}
messagingNetwork.stop()
}