Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,9 @@ abstract class PersistEngine(open val configuration: PersistConfig) {

/**
* This function is called after the changeSet execution, so you can now update the changeSet status (in the parameter) and store the logs.
*
* Your persist engine may use resources that should be close after the process,
* in that case, you need to cleanup theses resources in this method
*/
protected abstract fun unlock(executionId: String, changeSet: ChangeSet, status: ExecutionStatus, logs: List<String>)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,12 @@ import org.litote.kmongo.KMongo

class MongoEngine(private val connectionStringEnvVar: String) {

val mongoClient by lazy { KMongo.createClient(ConnectionString(getConnectionString())) }

private fun getConnectionString(): String {
if (System.getenv().containsKey(connectionStringEnvVar)) {
return System.getenv(connectionStringEnvVar)
}
throw IllegalArgumentException("$connectionStringEnvVar is missing (environment variable)")
val mongoClient by lazy {
val connectionString = System.getenv(connectionStringEnvVar)
?: throw IllegalArgumentException("$connectionStringEnvVar is missing (environment variable)")
KMongo.createClient(ConnectionString(connectionString))
}

fun listDatabase(): MongoIterable<String> = mongoClient.listDatabaseNames()
fun listDatabase(): MongoIterable<String> =
mongoClient.listDatabaseNames()
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,29 +17,38 @@
*/
package io.saagie.updatarium.model.action

import com.mongodb.client.MongoCollection
import io.saagie.updatarium.engine.mongo.MongoEngine
import io.saagie.updatarium.model.ChangeSetDsl
import mu.KotlinLogging
import org.bson.Document

const val MONGODB_CONNECTIONSTRING = "MONGODB_CONNECTIONSTRING"

fun ChangeSetDsl.mongoAction(
connectionStringEnvVar: String = MONGODB_CONNECTIONSTRING,
block: MongoScriptActionDsl.() -> Unit
) {
this.action { MongoScriptActionDsl(connectionStringEnvVar).block() }
this.action {
val actionDsl = MongoScriptActionDsl(connectionStringEnvVar)
try {
actionDsl.block()
} finally {
actionDsl.mongoClient.close();
}
}
}

class MongoScriptActionDsl(connectionStringEnvVar: String = MONGODB_CONNECTIONSTRING) {
val logger = KotlinLogging.logger("mongoAction")
val mongoEngine = MongoEngine(connectionStringEnvVar)
val mongoClient = mongoEngine.mongoClient

fun onCollection(databaseName: String, collectionName: String) =
fun onCollection(databaseName: String, collectionName: String): MongoCollection<Document> =
mongoClient.getDatabase(databaseName).getCollection(collectionName)

fun onCollections(databaseNameRegex: Regex, collectionName: String) =
mongoClient.listDatabaseNames().filter { it.matches(databaseNameRegex) }.map {
mongoClient.getDatabase(it).getCollection(collectionName)
}
mongoClient.listDatabaseNames()
.filter { it.matches(databaseNameRegex) }
.map { mongoClient.getDatabase(it).getCollection(collectionName) }
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
package io.saagie.updatarium.persist

import com.mongodb.ConnectionString
import com.mongodb.MongoClient
import com.mongodb.client.model.IndexOptions
import com.mongodb.client.model.Indexes
import io.saagie.updatarium.model.ChangeSet
Expand All @@ -36,8 +37,12 @@ const val COLLECTION = "changeset"

class MongodbPersistEngine(override val configuration: PersistConfig = PersistConfig()) : PersistEngine(configuration) {

private val client: MongoClient by lazy {
KMongo.createClient(ConnectionString(getConnectionString()))
}

private val collection by lazy {
with(KMongo.createClient(ConnectionString(getConnectionString()))) {
with(client) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If client return a Closeable instance, we can avoid to close it after and replace the when with a use

Any idea to have that ?

this.getDatabase(System.getenv().getOrDefault(MONGODB_PERSIST_DATABASE, DATABASE))
.getCollection<MongoDbChangeSet>(
System.getenv().getOrDefault(MONGODB_PERSIST_CHANGESET_COLLECTION, COLLECTION)
Expand Down Expand Up @@ -106,5 +111,7 @@ class MongodbPersistEngine(override val configuration: PersistConfig = PersistCo
)
)
logger.info { "$executionId marked as $status" }
// Cleanup resources
this.client.close()
}
}