From 6190b1ec2e4f19091a4f8dd174029c4c6971790d Mon Sep 17 00:00:00 2001 From: Ilya Chernikov Date: Mon, 22 May 2017 17:26:29 +0200 Subject: [PATCH] Fix daemon selection on the memory settings --- .../kotlin/daemon/client/KotlinCompilerClient.kt | 2 +- .../jetbrains/kotlin/daemon/CompilerDaemonTest.kt | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/compiler/daemon/daemon-client/src/org/jetbrains/kotlin/daemon/client/KotlinCompilerClient.kt b/compiler/daemon/daemon-client/src/org/jetbrains/kotlin/daemon/client/KotlinCompilerClient.kt index 954c7f676b8..99f48cdbaea 100644 --- a/compiler/daemon/daemon-client/src/org/jetbrains/kotlin/daemon/client/KotlinCompilerClient.kt +++ b/compiler/daemon/daemon-client/src/org/jetbrains/kotlin/daemon/client/KotlinCompilerClient.kt @@ -347,7 +347,7 @@ object KotlinCompilerClient { finally { timestampMarker.delete() } - val comparator = compareByDescending(DaemonJVMOptionsMemoryComparator(), { it.jvmOptions }) + val comparator = compareBy(DaemonJVMOptionsMemoryComparator(), { it.jvmOptions }) .thenBy(FileAgeComparator()) { it.runFile } val optsCopy = daemonJVMOptions.copy() // if required options fit into fattest running daemon - return the daemon and required options with memory params set to actual ones in the daemon diff --git a/compiler/tests/org/jetbrains/kotlin/daemon/CompilerDaemonTest.kt b/compiler/tests/org/jetbrains/kotlin/daemon/CompilerDaemonTest.kt index 110d4abb491..f5108aaeb79 100644 --- a/compiler/tests/org/jetbrains/kotlin/daemon/CompilerDaemonTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/daemon/CompilerDaemonTest.kt @@ -29,6 +29,7 @@ import org.jetbrains.kotlin.test.KotlinTestUtils import java.io.ByteArrayOutputStream import java.io.File import java.io.PrintStream +import java.lang.management.ManagementFactory import java.net.URL import java.net.URLClassLoader import java.rmi.server.UnicastRemoteObject @@ -148,6 +149,20 @@ class CompilerDaemonTest : KotlinIntegrationTestBase() { assertEquals("10k", opts.maxPermSize) assertEquals("100", opts.reservedCodeCacheSize) assertEquals(arrayListOf("aaa", "bbb,ccc", "ddd", "xxx,yyy"), opts.jvmParams) + + System.setProperty(COMPILE_DAEMON_JVM_OPTIONS_PROPERTY, "-Xmx300m,-XX:MaxPermSize=10k,-XX:ReservedCodeCacheSize=100") + val opts2 = configureDaemonJVMOptions(inheritMemoryLimits = false, inheritAdditionalProperties = false) + assertEquals("300m", opts2.maxMemory) + assertEquals( -1, DaemonJVMOptionsMemoryComparator().compare(opts, opts2)) + assertEquals("300m", listOf(opts, opts2).maxWith(DaemonJVMOptionsMemoryComparator())?.maxMemory) + + val myXmxParam = ManagementFactory.getRuntimeMXBean().inputArguments.first { it.startsWith("-Xmx") } + TestCase.assertNotNull(myXmxParam) + val myXmxVal = myXmxParam.substring(4) + System.clearProperty(COMPILE_DAEMON_JVM_OPTIONS_PROPERTY) + val opts3 = configureDaemonJVMOptions(inheritMemoryLimits = true, + inheritAdditionalProperties = false) + assertEquals(myXmxVal, opts3.maxMemory) } finally { restoreSystemProperty(COMPILE_DAEMON_JVM_OPTIONS_PROPERTY, backupJvmOptions)