diff --git a/src/main/kotlin/com/atlassian/performance/tools/infrastructure/api/database/Database.kt b/src/main/kotlin/com/atlassian/performance/tools/infrastructure/api/database/Database.kt index 85871586..dc958c91 100644 --- a/src/main/kotlin/com/atlassian/performance/tools/infrastructure/api/database/Database.kt +++ b/src/main/kotlin/com/atlassian/performance/tools/infrastructure/api/database/Database.kt @@ -14,4 +14,9 @@ interface Database { fun setup(ssh: SshConnection): String fun start(jira: URI, ssh: SshConnection) + + /** + * @return Database type e.g. mysql + */ + fun type(): String } diff --git a/src/main/kotlin/com/atlassian/performance/tools/infrastructure/api/database/LicenseOverridingMysql.kt b/src/main/kotlin/com/atlassian/performance/tools/infrastructure/api/database/LicenseOverridingMysql.kt index e159901b..0a491e5c 100644 --- a/src/main/kotlin/com/atlassian/performance/tools/infrastructure/api/database/LicenseOverridingMysql.kt +++ b/src/main/kotlin/com/atlassian/performance/tools/infrastructure/api/database/LicenseOverridingMysql.kt @@ -7,9 +7,6 @@ import org.apache.logging.log4j.Logger import java.io.File import java.net.URI import java.nio.file.Files -import java.io.FileWriter -import java.io.BufferedWriter - /** * Removes all licenses from [database] and adds [licenses] instead. @@ -80,6 +77,8 @@ class LicenseOverridingMysql private constructor( ) } } + + override fun type(): String = "mysql" } internal fun createTempLicenseFile(license: String): File { diff --git a/src/main/kotlin/com/atlassian/performance/tools/infrastructure/api/database/MySqlDatabase.kt b/src/main/kotlin/com/atlassian/performance/tools/infrastructure/api/database/MySqlDatabase.kt index 66bed4d1..9e678d84 100644 --- a/src/main/kotlin/com/atlassian/performance/tools/infrastructure/api/database/MySqlDatabase.kt +++ b/src/main/kotlin/com/atlassian/performance/tools/infrastructure/api/database/MySqlDatabase.kt @@ -61,4 +61,6 @@ class MySqlDatabase( Thread.sleep(Duration.ofSeconds(10).toMillis()) } } + + override fun type(): String = "mysql" } \ No newline at end of file diff --git a/src/main/kotlin/com/atlassian/performance/tools/infrastructure/api/database/PostgresDatabase.kt b/src/main/kotlin/com/atlassian/performance/tools/infrastructure/api/database/PostgresDatabase.kt new file mode 100644 index 00000000..e4649aa3 --- /dev/null +++ b/src/main/kotlin/com/atlassian/performance/tools/infrastructure/api/database/PostgresDatabase.kt @@ -0,0 +1,49 @@ +package com.atlassian.performance.tools.infrastructure.api.database + +import com.atlassian.performance.tools.infrastructure.DockerImage +import com.atlassian.performance.tools.infrastructure.api.dataset.DatasetPackage +import com.atlassian.performance.tools.ssh.api.SshConnection +import org.apache.logging.log4j.LogManager +import org.apache.logging.log4j.Logger +import java.net.URI +import java.time.Duration + +class PostgresDatabase( + private val source: DatasetPackage, + private val maxConnections: Int, + private val dataBaseVersion: String +) : Database { + private val logger: Logger = LogManager.getLogger(this::class.java) + + private val image: DockerImage = DockerImage( + name = "postgres:$dataBaseVersion", + pullTimeout = Duration.ofMinutes(5) + ) + + constructor( + source: DatasetPackage, + dataBaseVersion: String + ) : this( + source = source, + maxConnections = 200, + dataBaseVersion = dataBaseVersion + ) + + override fun setup(ssh: SshConnection): String { + val pgData = source.download(ssh) + image.run( + ssh = ssh, + parameters = "-p 3306:5432 -v `realpath $pgData`:/var/lib/postgresql/data", + arguments = "-c 'listen_addresses='*'' -c 'max_connections=$maxConnections'" + ) + return pgData + } + + override fun start(jira: URI, ssh: SshConnection) { + // TODO Check logs for the following entry + // LOG: database system is ready to accept connections + Thread.sleep(Duration.ofSeconds(15).toMillis()) + } + + override fun type(): String = "postgres" +} \ No newline at end of file diff --git a/src/main/kotlin/com/atlassian/performance/tools/infrastructure/api/dataset/FileArchiver.kt b/src/main/kotlin/com/atlassian/performance/tools/infrastructure/api/dataset/FileArchiver.kt index e42fb2a0..95da1d80 100644 --- a/src/main/kotlin/com/atlassian/performance/tools/infrastructure/api/dataset/FileArchiver.kt +++ b/src/main/kotlin/com/atlassian/performance/tools/infrastructure/api/dataset/FileArchiver.kt @@ -18,7 +18,11 @@ class FileArchiver { ) { ubuntu.install(connection, listOf("lbzip2")) time("unzip") { - connection.execute("tar -I lbzip2 -xf $archive", timeout) + val cmd = if (archive.contains("SCALED_ISSUES_UNIMODAL_PG")) + "tar -xzvf $archive" + else + "tar -I lbzip2 -xf $archive" + connection.execute(cmd, timeout) } } @@ -35,7 +39,11 @@ class FileArchiver { ) { ubuntu.install(connection, listOf("lbzip2")) time("unzip") { - connection.execute("tar -I lbzip2 -xf $archive -C $destination", timeout).output.splitToSequence("\n").asIterable() + val cmd = if (archive.contains("SCALED_ISSUES_UNIMODAL_PG")) + "tar -xzvf $archive -C $destination" + else + "tar -I lbzip2 -xf $archive -C $destination" + connection.execute(cmd, timeout).output.splitToSequence("\n").asIterable() } }