Skip to content

Commit 8922054

Browse files
committed
feat: upgraded vertx version to 5.0.7
1 parent 6e338e4 commit 8922054

6 files changed

Lines changed: 51 additions & 40 deletions

File tree

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ pluginClass=co.statu.rule.database.DatabasePlugin
33
pluginProvider=Parsek
44
pluginDependencies=
55
pf4jVersion=3.15.0
6-
vertxVersion=4.5.1
6+
vertxVersion=5.0.7
77
gsonVersion=2.13.2
88
handlebarsVersion=4.5.0
99
springContextVersion=5.3.39

src/main/kotlin/co/statu/rule/database/Dao.kt

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ import co.statu.parsek.api.ParsekPlugin
44
import co.statu.parsek.util.TextUtil.convertToSnakeCase
55
import co.statu.rule.database.DBEntity.Companion.gson
66
import io.vertx.jdbcclient.JDBCPool
7-
import io.vertx.kotlin.coroutines.await
7+
import io.vertx.sqlclient.Pool
8+
import io.vertx.kotlin.coroutines.*
89
import io.vertx.sqlclient.Row
910
import io.vertx.sqlclient.RowSet
1011
import io.vertx.sqlclient.Tuple
@@ -33,35 +34,35 @@ abstract class Dao<T : DBEntity>(private val entityClass: KClass<T>) {
3334

3435
fun List<String>.toTableQuery(prefix: String = "") = this.joinToString(", ") { "$prefix`$it`" }
3536

36-
abstract suspend fun init(jdbcPool: JDBCPool, plugin: ParsekPlugin)
37+
abstract suspend fun init(jdbcPool: Pool, plugin: ParsekPlugin)
3738

3839
fun getTablePrefix(): String = DatabasePlugin.databaseManager.getTablePrefix()
3940

4041
suspend fun count(
41-
jdbcPool: JDBCPool
42+
jdbcPool: Pool
4243
): Long {
4344
val query =
4445
"SELECT COUNT(*) FROM `${getTablePrefix() + tableName}`"
4546

4647
val rows: RowSet<Row> = jdbcPool
4748
.preparedQuery(query)
4849
.execute()
49-
.await()
50+
.coAwait()
5051

5152
return rows.toList()[0].getLong(0)
5253
}
5354

5455
suspend fun byId(
5556
id: UUID,
56-
jdbcPool: JDBCPool
57+
jdbcPool: Pool
5758
): T? {
5859
val query =
5960
"SELECT ${fields.toTableQuery()} FROM `${getTablePrefix() + tableName}` WHERE `id` = ?"
6061

6162
val rows: RowSet<Row> = jdbcPool
6263
.preparedQuery(query)
6364
.execute(Tuple.of(id))
64-
.await()
65+
.coAwait()
6566

6667
if (rows.size() == 0) {
6768
return null

src/main/kotlin/co/statu/rule/database/DatabaseManager.kt

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@ import co.statu.rule.database.impl.SchemeVersionDaoImpl
77
import co.statu.rule.database.model.SchemeVersion
88
import io.vertx.core.Vertx
99
import io.vertx.core.json.JsonObject
10+
import io.vertx.jdbcclient.JDBCConnectOptions
1011
import io.vertx.jdbcclient.JDBCPool
12+
import io.vertx.sqlclient.Pool
13+
import io.vertx.sqlclient.PoolOptions
1114
import org.slf4j.Logger
1215
import org.springframework.beans.factory.config.ConfigurableBeanFactory
1316
import org.springframework.context.annotation.Scope
@@ -26,7 +29,7 @@ class DatabaseManager(
2629
databasePlugin.pluginBeanContext.getBean(PluginConfigManager::class.java) as PluginConfigManager<DatabaseConfig>
2730
}
2831

29-
private lateinit var pool: JDBCPool
32+
private lateinit var pool: Pool
3033

3134
private val tables = mutableMapOf<ParsekPlugin, MutableList<Dao<*>>>()
3235
private val migrations = mutableMapOf<ParsekPlugin, MutableList<DatabaseMigration>>()
@@ -35,7 +38,7 @@ class DatabaseManager(
3538

3639
fun getTablePrefix(): String = pluginConfigManager.config.prefix
3740

38-
fun getConnectionPool(): JDBCPool {
41+
fun getConnectionPool(): Pool {
3942
if (!::pool.isInitialized) {
4043
val databaseConfig = pluginConfigManager.config
4144

@@ -44,19 +47,23 @@ class DatabaseManager(
4447
val username = databaseConfig.username
4548
val password = databaseConfig.password
4649

47-
val config: JsonObject = JsonObject()
48-
.put("url", "jdbc:clickhouse:$host/$name")
49-
.put("driver_class", "com.clickhouse.jdbc.ClickHouseDriver")
50-
.put("datasourceName", "parsek")
51-
.put("username", username)
52-
.put("max_pool_size", 100)
53-
54-
if (password != "") {
55-
config
56-
.put("password", password)
50+
try {
51+
Class.forName("com.clickhouse.jdbc.ClickHouseDriver")
52+
} catch (e: Exception) {
53+
logger.error("Failed to load ClickHouse driver", e)
5754
}
5855

59-
pool = JDBCPool.pool(vertx, config)
56+
val options = JDBCConnectOptions()
57+
.setJdbcUrl("jdbc:clickhouse:$host/$name")
58+
.setUser(username)
59+
.setPassword(password)
60+
61+
val poolOptions = PoolOptions()
62+
.setShared(true)
63+
.setName("parsek")
64+
.setMaxSize(100)
65+
66+
pool = JDBCPool.pool(vertx, options, poolOptions)
6067
}
6168

6269
try {
@@ -78,7 +85,7 @@ class DatabaseManager(
7885
}
7986
}
8087

81-
private suspend fun initSchemeVersion(plugin: ParsekPlugin, jdbcPool: JDBCPool) {
88+
private suspend fun initSchemeVersion(plugin: ParsekPlugin, jdbcPool: Pool) {
8289
val lastSchemeVersion = schemeVersionDaoImpl.getLastSchemeVersion(plugin.pluginId, jdbcPool)
8390

8491
val latestMigration = getLatestMigration(plugin)
@@ -110,7 +117,7 @@ class DatabaseManager(
110117
)
111118
}
112119

113-
private suspend fun initPluginDB(plugin: ParsekPlugin, jdbcPool: JDBCPool) {
120+
private suspend fun initPluginDB(plugin: ParsekPlugin, jdbcPool: Pool) {
114121
initSchemeVersion(plugin, jdbcPool)
115122

116123
initTables(plugin)
@@ -133,7 +140,7 @@ class DatabaseManager(
133140
databaseHelper?.tables?.let { this.tables[plugin]!!.addAll(it) }
134141
databaseHelper?.migrations?.let { this.migrations[plugin]!!.addAll(it) }
135142

136-
val jdbcPool: JDBCPool
143+
val jdbcPool: Pool
137144

138145
try {
139146
jdbcPool = getConnectionPool()
@@ -189,7 +196,7 @@ class DatabaseManager(
189196

190197
internal fun getLatestMigration(plugin: ParsekPlugin) = migrations[plugin]?.maxByOrNull { it.SCHEME_VERSION }
191198

192-
suspend fun checkMigration(plugin: ParsekPlugin, jdbcPool: JDBCPool, lastSchemeVersion: SchemeVersion?) {
199+
suspend fun checkMigration(plugin: ParsekPlugin, jdbcPool: Pool, lastSchemeVersion: SchemeVersion?) {
193200
logger.info("Checking available database migrations for \"${plugin.pluginId}\"")
194201

195202
val databaseVersion = lastSchemeVersion?.version ?: 0
@@ -203,7 +210,7 @@ class DatabaseManager(
203210
migrate(plugin, jdbcPool, databaseVersion)
204211
}
205212

206-
private suspend fun updateSchemeVersion(version: Int, info: String, plugin: ParsekPlugin, jdbcPool: JDBCPool) {
213+
private suspend fun updateSchemeVersion(version: Int, info: String, plugin: ParsekPlugin, jdbcPool: Pool) {
207214
schemeVersionDaoImpl.add(
208215
SchemeVersion(
209216
pluginId = plugin.pluginId,
@@ -214,7 +221,7 @@ class DatabaseManager(
214221
)
215222
}
216223

217-
private suspend fun migrate(plugin: ParsekPlugin, jdbcPool: JDBCPool, databaseVersion: Int) {
224+
private suspend fun migrate(plugin: ParsekPlugin, jdbcPool: Pool, databaseVersion: Int) {
218225
migrations[plugin]!!
219226
.find { it.isMigratable(databaseVersion) }
220227
?.let {

src/main/kotlin/co/statu/rule/database/DatabaseMigration.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,18 @@
11
package co.statu.rule.database
22

33
import io.vertx.jdbcclient.JDBCPool
4+
import io.vertx.sqlclient.Pool
45

56
abstract class DatabaseMigration {
6-
abstract val handlers: List<suspend (jdbcPool: JDBCPool, tablePrefix: String) -> Unit>
7+
abstract val handlers: List<suspend (jdbcPool: Pool, tablePrefix: String) -> Unit>
78

89
abstract val FROM_SCHEME_VERSION: Int
910
abstract val SCHEME_VERSION: Int
1011
abstract val SCHEME_VERSION_INFO: String
1112

1213
fun isMigratable(version: Int) = version == FROM_SCHEME_VERSION
1314

14-
suspend fun migrate(jdbcPool: JDBCPool, tablePrefix: String) {
15+
suspend fun migrate(jdbcPool: Pool, tablePrefix: String) {
1516
handlers.forEach {
1617
it.invoke(jdbcPool, tablePrefix)
1718
}

src/main/kotlin/co/statu/rule/database/dao/SchemeVersionDao.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,22 @@ package co.statu.rule.database.dao
33
import co.statu.rule.database.Dao
44
import co.statu.rule.database.model.SchemeVersion
55
import io.vertx.jdbcclient.JDBCPool
6+
import io.vertx.sqlclient.Pool
67

78
abstract class SchemeVersionDao : Dao<SchemeVersion>(SchemeVersion::class) {
89
abstract suspend fun add(
910
schemeVersion: SchemeVersion,
10-
jdbcPool: JDBCPool
11+
jdbcPool: Pool
1112
)
1213

1314
abstract suspend fun getLastSchemeVersion(
1415
pluginId: String,
15-
jdbcPool: JDBCPool
16+
jdbcPool: Pool
1617
): SchemeVersion?
1718

1819
abstract suspend fun renamePluginId(
1920
exPluginId: String,
2021
newPluginId: String,
21-
jdbcPool: JDBCPool
22+
jdbcPool: Pool
2223
)
2324
}

src/main/kotlin/co/statu/rule/database/impl/SchemeVersionDaoImpl.kt

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,15 @@ import co.statu.parsek.api.ParsekPlugin
44
import co.statu.rule.database.dao.SchemeVersionDao
55
import co.statu.rule.database.model.SchemeVersion
66
import io.vertx.jdbcclient.JDBCPool
7-
import io.vertx.kotlin.coroutines.await
7+
import io.vertx.sqlclient.Pool
8+
import io.vertx.kotlin.coroutines.*
89
import io.vertx.sqlclient.Row
910
import io.vertx.sqlclient.RowSet
1011
import io.vertx.sqlclient.Tuple
1112

1213
class SchemeVersionDaoImpl : SchemeVersionDao() {
1314

14-
override suspend fun init(jdbcPool: JDBCPool, plugin: ParsekPlugin) {
15+
override suspend fun init(jdbcPool: Pool, plugin: ParsekPlugin) {
1516
jdbcPool
1617
.query(
1718
"""
@@ -24,12 +25,12 @@ class SchemeVersionDaoImpl : SchemeVersionDao() {
2425
"""
2526
)
2627
.execute()
27-
.await()
28+
.coAwait()
2829
}
2930

3031
override suspend fun add(
3132
schemeVersion: SchemeVersion,
32-
jdbcPool: JDBCPool
33+
jdbcPool: Pool
3334
) {
3435
jdbcPool
3536
.preparedQuery("INSERT INTO `${getTablePrefix() + tableName}` (`pluginId`, `when`, `version`, `extra`) VALUES (?, now(), ?, ?)")
@@ -40,20 +41,20 @@ class SchemeVersionDaoImpl : SchemeVersionDao() {
4041
schemeVersion.extra
4142
)
4243
)
43-
.await()
44+
.coAwait()
4445
}
4546

4647
override suspend fun getLastSchemeVersion(
4748
pluginId: String,
48-
jdbcPool: JDBCPool
49+
jdbcPool: Pool
4950
): SchemeVersion? {
5051
val query =
5152
"SELECT * FROM `${getTablePrefix() + tableName}` WHERE `pluginId` = ? ORDER BY `version` DESC LIMIT 1"
5253

5354
val rows: RowSet<Row> = jdbcPool
5455
.preparedQuery(query)
5556
.execute(Tuple.of(pluginId))
56-
.await()
57+
.coAwait()
5758

5859
if (rows.size() == 0) {
5960
return null
@@ -67,14 +68,14 @@ class SchemeVersionDaoImpl : SchemeVersionDao() {
6768
override suspend fun renamePluginId(
6869
exPluginId: String,
6970
newPluginId: String,
70-
jdbcPool: JDBCPool
71+
jdbcPool: Pool
7172
) {
7273
val query =
7374
"ALTER TABLE `${getTablePrefix() + tableName}` UPDATE `pluginId` = ? WHERE `pluginId` = ?;"
7475

7576
jdbcPool
7677
.preparedQuery(query)
7778
.execute(Tuple.of(newPluginId, exPluginId))
78-
.await()
79+
.coAwait()
7980
}
8081
}

0 commit comments

Comments
 (0)