Implementing daemon restart mechanism to prevent problems with low memory watcher (TODO: investigate!)

KT-8487
This commit is contained in:
Ilya Chernikov
2016-01-26 22:29:48 +01:00
committed by Alexey Tsvetkov
parent c6fe18fbe0
commit 4809e8755e
@@ -32,17 +32,17 @@ abstract class BaseGradleIT {
} }
companion object { companion object {
protected val ranDaemonVersions = hashSetOf<String>()
protected val ranDaemonVersions = hashMapOf<String, Int>()
val resourcesRootFile = File("src/test/resources") val resourcesRootFile = File("src/test/resources")
val MAX_DAEMON_RUNS = 30
@AfterClass @AfterClass
@JvmStatic @JvmStatic
@Synchronized
@Suppress("unused") @Suppress("unused")
fun tearDownAll() { fun tearDownAll() {
ranDaemonVersions.forEach { ranDaemonVersions.keys.forEach { stopDaemon(it) }
println("Stopping gradle daemon v$it")
stopDaemon(it)
}
ranDaemonVersions.clear() ranDaemonVersions.clear()
} }
@@ -58,6 +58,7 @@ abstract class BaseGradleIT {
} }
fun stopDaemon(ver: String) { fun stopDaemon(ver: String) {
println("Stopping gradle daemon v$ver")
val wrapperDir = File(resourcesRootFile, "GradleWrapper-$ver") val wrapperDir = File(resourcesRootFile, "GradleWrapper-$ver")
val cmd = createGradleCommand(arrayListOf("-stop")) val cmd = createGradleCommand(arrayListOf("-stop"))
createProcess(cmd, wrapperDir) createProcess(cmd, wrapperDir)
@@ -70,10 +71,15 @@ abstract class BaseGradleIT {
return builder.start() return builder.start()
} }
@Synchronized
fun prepareDaemon(version: String) { fun prepareDaemon(version: String) {
if (version !in ranDaemonVersions) { val useCount = ranDaemonVersions.get(version)
if (useCount == null || useCount > MAX_DAEMON_RUNS) {
stopDaemon(version) stopDaemon(version)
ranDaemonVersions.add(version) ranDaemonVersions.put(version, 1)
}
else {
ranDaemonVersions.put(version, useCount + 1)
} }
} }
} }