Skip to content

Commit

Permalink
MBS-8523 Extract deployment creation logic to ReservationDeploymentFa…
Browse files Browse the repository at this point in the history
…ctory.kt (#600)

* MBS-8523 Extract deployment creation logic to ReservationDeploymentFactory.kt
Delete usages of GlobalScope in Reservation Clients
Delete GroupedCoroutinesExecution.kt
Make ReservationClient.kt interface simpler
  • Loading branch information
sboishtyan committed Oct 19, 2020
1 parent 0bcc82e commit e1feaab
Show file tree
Hide file tree
Showing 13 changed files with 436 additions and 589 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import com.avito.instrumentation.reservation.client.ReservationClient
import com.avito.instrumentation.reservation.client.ReservationClientFactory
import com.avito.instrumentation.reservation.request.Reservation
import com.avito.instrumentation.suite.model.TestWithTarget
import com.avito.instrumentation.util.launchGroupedCoroutines
import com.avito.runner.scheduler.TestsRunnerClient
import com.avito.runner.scheduler.args.Arguments
import com.avito.runner.scheduler.runner.model.TestRunRequest
Expand All @@ -15,8 +14,7 @@ import com.avito.runner.service.worker.device.Serial
import com.avito.runner.service.worker.device.model.DeviceConfiguration
import com.avito.utils.logging.CILogger
import com.avito.utils.logging.commonLogger
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.channels.toList
import kotlinx.coroutines.channels.ReceiveChannel
import kotlinx.coroutines.runBlocking
import java.io.File

Expand Down Expand Up @@ -155,36 +153,26 @@ interface TestExecutor {
client: ReservationClient,
configurationName: String,
reservations: Collection<Reservation.Data>,
action: (devices: Channel<Serial>) -> Unit
action: (devices: ReceiveChannel<Serial>) -> Unit
) {
val reservationDeployments = Channel<String>(reservations.size)
try {
val serialsChannel = Channel<Serial>(Channel.UNLIMITED)

launchGroupedCoroutines {
launch(blocking = false) {
logger.info("Devices: Starting reservation job for configuration: $configurationName...")
client.claim(
reservations = reservations,
serialsChannel = serialsChannel,
reservationDeployments = reservationDeployments
)
logger.info("Devices: Reservation job completed for configuration: $configurationName")
}
launch {
logger.info("Devices: Starting action for configuration: $configurationName...")
action(serialsChannel)
logger.info("Devices: Action completed for configuration: $configurationName")
}
runBlocking {
logger.info("Devices: Starting reservation job for configuration: $configurationName...")
val result = client.claim(
reservations = reservations
)
logger.info("Devices: Reservation job completed for configuration: $configurationName")
logger.info("Devices: Starting action for configuration: $configurationName...")
action(result.serials)
logger.info("Devices: Action completed for configuration: $configurationName")
}

} catch (e: Throwable) {
logger.critical("Error during starting reservation job", e)
} finally {
reservationDeployments.close()
logger.info("Devices: Starting releasing devices for configuration: $configurationName...")
runBlocking {
client.release(reservationDeployments = reservationDeployments.toList())
client.release()
}
logger.info("Devices: Devices released for configuration: $configurationName")
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import org.funktionale.tries.Try
import java.io.File

abstract class Device(
protected val serial: Serial,
val serial: Serial,
protected val logger: (String) -> Unit = {}
) {
private val androidHome: String? = System.getenv("ANDROID_HOME")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,18 @@
package com.avito.instrumentation.reservation.client

import com.avito.runner.service.worker.device.Serial
import com.avito.instrumentation.reservation.request.Reservation
import kotlinx.coroutines.channels.SendChannel
import com.avito.runner.service.worker.device.Serial
import kotlinx.coroutines.channels.ReceiveChannel

interface ReservationClient {
suspend fun claim(
reservations: Collection<Reservation.Data>,
serialsChannel: SendChannel<Serial>,
reservationDeployments: SendChannel<String>

class ClaimResult(
val serials: ReceiveChannel<Serial>
)

suspend fun release(reservationDeployments: Collection<String>)
suspend fun claim(
reservations: Collection<Reservation.Data>
): ClaimResult

suspend fun release()
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import com.avito.instrumentation.executing.ExecutionParameters
import com.avito.instrumentation.reservation.adb.AndroidDebugBridge
import com.avito.instrumentation.reservation.adb.EmulatorsLogsReporter
import com.avito.instrumentation.reservation.client.kubernetes.KubernetesReservationClient
import com.avito.instrumentation.reservation.client.kubernetes.ReservationDeploymentFactory
import com.avito.instrumentation.reservation.client.local.LocalReservationClient
import com.avito.runner.service.worker.device.adb.AdbDevicesManager
import com.avito.utils.gradle.KubernetesCredentials
Expand Down Expand Up @@ -57,13 +58,16 @@ interface ReservationClientFactory {
kubernetesCredentials = kubernetesCredentials,
namespace = executionParameters.namespace
),
configurationName = configuration.name,
projectName = projectName,
reservationDeploymentFactory = ReservationDeploymentFactory(
configurationName = configuration.name,
projectName = projectName,
buildId = buildId,
buildType = buildType,
registry = registry,
logger = logger
),
logger = logger,
buildId = buildId,
buildType = buildType,
emulatorsLogsReporter = emulatorsLogsReporter,
registry = registry
emulatorsLogsReporter = emulatorsLogsReporter
)
}
}
Expand Down
Loading

0 comments on commit e1feaab

Please sign in to comment.