mirror of
https://github.com/apache/maven-mvnd.git
synced 2025-09-10 04:59:54 +00:00
Remove default values for heap options (#610)
* Set default max heap size to null Let the JVM decide the max heap size instead of using hardcoded defaults to match the behaviour of vanilla Maven. * Add ITs for verifying max heap behaviour - By default no max heap should be set - If configured via jvm.config then max heap should be set but not mvnd.maxHeapSize - If configured via mvnd.maxHeapSize then max heap should be set * Remove defaults memory options * Add missing test project * Fix too small heap size * Fix tests Co-authored-by: Ashhar Hasan <hashhar_dev@outlook.com>
This commit is contained in:
@@ -204,17 +204,17 @@ public enum Environment {
|
||||
* The <code>-Xms</code> value to pass to the daemon.
|
||||
* This option takes precedence over options specified in {@link #MVND_JVM_ARGS}.
|
||||
*/
|
||||
MVND_MIN_HEAP_SIZE("mvnd.minHeapSize", null, "128M", OptionType.MEMORY_SIZE, Flags.DISCRIMINATING),
|
||||
MVND_MIN_HEAP_SIZE("mvnd.minHeapSize", null, null, OptionType.MEMORY_SIZE, Flags.DISCRIMINATING | Flags.OPTIONAL),
|
||||
/**
|
||||
* The <code>-Xmx</code> value to pass to the daemon.
|
||||
* This option takes precedence over options specified in {@link #MVND_JVM_ARGS}.
|
||||
*/
|
||||
MVND_MAX_HEAP_SIZE("mvnd.maxHeapSize", null, "2G", OptionType.MEMORY_SIZE, Flags.DISCRIMINATING),
|
||||
MVND_MAX_HEAP_SIZE("mvnd.maxHeapSize", null, null, OptionType.MEMORY_SIZE, Flags.DISCRIMINATING | Flags.OPTIONAL),
|
||||
/**
|
||||
* The <code>-Xss</code> value to pass to the daemon.
|
||||
* This option takes precedence over options specified in {@link #MVND_JVM_ARGS}.
|
||||
*/
|
||||
MVND_THREAD_STACK_SIZE("mvnd.threadStackSize", null, "1M", OptionType.MEMORY_SIZE, Flags.DISCRIMINATING),
|
||||
MVND_THREAD_STACK_SIZE("mvnd.threadStackSize", null, null, OptionType.MEMORY_SIZE, Flags.DISCRIMINATING | Flags.OPTIONAL),
|
||||
/**
|
||||
* Additional JVM args to pass to the daemon.
|
||||
* The content of the <code>.mvn/jvm.config</code> file will prepended (and thus with
|
||||
|
@@ -1,51 +0,0 @@
|
||||
/*
|
||||
* Copyright 2019-2022 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.mvndaemon.mvnd.it;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.stream.Collectors;
|
||||
import javax.inject.Inject;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.mvndaemon.mvnd.assertj.TestClientOutput;
|
||||
import org.mvndaemon.mvnd.client.Client;
|
||||
import org.mvndaemon.mvnd.client.DaemonParameters;
|
||||
import org.mvndaemon.mvnd.junit.MvndNativeTest;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
@MvndNativeTest(projectDir = "src/test/projects/jvm-config")
|
||||
public class JvmConfigNativeIT {
|
||||
|
||||
@Inject
|
||||
Client client;
|
||||
|
||||
@Inject
|
||||
DaemonParameters parameters;
|
||||
|
||||
@Test
|
||||
void version() throws IOException, InterruptedException {
|
||||
final TestClientOutput o = new TestClientOutput();
|
||||
client.execute(o, "org.codehaus.gmaven:groovy-maven-plugin:2.1.1:execute",
|
||||
"-Dsource=System.out.println(java.lang.management.ManagementFactory.getRuntimeMXBean().getInputArguments())")
|
||||
.assertSuccess();
|
||||
String xmx = "-Xmx512k";
|
||||
assertTrue(o.getMessages().stream()
|
||||
.anyMatch(m -> m.toString().contains(xmx)),
|
||||
"Output should contain " + xmx + " but is:\n"
|
||||
+ o.getMessages().stream().map(Object::toString).collect(Collectors.joining("\n")));
|
||||
}
|
||||
|
||||
}
|
@@ -15,37 +15,9 @@
|
||||
*/
|
||||
package org.mvndaemon.mvnd.it;
|
||||
|
||||
import java.io.IOException;
|
||||
import javax.inject.Inject;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.mvndaemon.mvnd.assertj.TestClientOutput;
|
||||
import org.mvndaemon.mvnd.client.Client;
|
||||
import org.mvndaemon.mvnd.client.DaemonParameters;
|
||||
import org.mvndaemon.mvnd.junit.MvndTest;
|
||||
import org.mvndaemon.mvnd.junit.TestRegistry;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
@MvndTest(projectDir = "src/test/projects/maven-conf")
|
||||
public class MavenConfTest extends MavenConfNativeIT {
|
||||
|
||||
@Inject
|
||||
Client client;
|
||||
|
||||
@Inject
|
||||
DaemonParameters parameters;
|
||||
|
||||
@Inject
|
||||
TestRegistry registry;
|
||||
|
||||
@Test
|
||||
void version() throws IOException, InterruptedException {
|
||||
final TestClientOutput o = new TestClientOutput();
|
||||
client.execute(o, "org.apache.maven.plugins:maven-help-plugin:3.2.0:evaluate",
|
||||
"-Dexpression=maven.conf", "-q", "-DforceStdout", "--raw-streams").assertSuccess();
|
||||
String conf = parameters.mvndHome().resolve("mvn/conf").toString();
|
||||
assertTrue(o.getMessages().stream()
|
||||
.anyMatch(m -> m.toString().contains(conf)), "Output should contain " + conf);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -0,0 +1,117 @@
|
||||
/*
|
||||
* Copyright 2019 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.mvndaemon.mvnd.it;
|
||||
|
||||
import ch.qos.logback.classic.Level;
|
||||
import ch.qos.logback.classic.Logger;
|
||||
import ch.qos.logback.classic.spi.ILoggingEvent;
|
||||
import ch.qos.logback.core.read.ListAppender;
|
||||
import javax.inject.Inject;
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.mvndaemon.mvnd.assertj.TestClientOutput;
|
||||
import org.mvndaemon.mvnd.client.Client;
|
||||
import org.mvndaemon.mvnd.junit.MvndNativeTest;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
public class MaxHeapNativeIT {
|
||||
|
||||
static class BaseTest {
|
||||
|
||||
@Inject
|
||||
Client client;
|
||||
|
||||
static ListAppender<ILoggingEvent> appender = new ListAppender<>();
|
||||
|
||||
@BeforeAll
|
||||
static void setup() {
|
||||
Logger logger = (Logger) LoggerFactory.getLogger("org.mvndaemon.mvnd.client.DaemonConnector");
|
||||
logger.setLevel(Level.DEBUG);
|
||||
logger.addAppender(appender);
|
||||
appender.start();
|
||||
}
|
||||
|
||||
@AfterAll
|
||||
static void tearDown() {
|
||||
Logger logger = (Logger) LoggerFactory.getLogger("org.mvndaemon.mvnd.client.DaemonConnector");
|
||||
logger.detachAppender(appender);
|
||||
}
|
||||
|
||||
static String getDaemonArgs() {
|
||||
return appender.list.stream()
|
||||
.filter(e -> e.getMessage().contains("Starting daemon process"))
|
||||
.map(e -> e.getArgumentArray()[2].toString())
|
||||
.findAny().orElseThrow();
|
||||
}
|
||||
|
||||
@BeforeEach
|
||||
void unitSetup() {
|
||||
appender.list.clear();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@MvndNativeTest(projectDir = "src/test/projects/max-heap/default-heap")
|
||||
static class DefaultConfig extends BaseTest {
|
||||
|
||||
@Test
|
||||
void noXmxPassedByDefault() throws InterruptedException {
|
||||
final TestClientOutput output = new TestClientOutput();
|
||||
client.execute(output, "-Dmvnd.log.level=DEBUG", "org.codehaus.gmaven:groovy-maven-plugin:2.1.1:execute",
|
||||
"-Dsource=System.out.println(java.lang.management.ManagementFactory.getRuntimeMXBean().getInputArguments())")
|
||||
.assertSuccess();
|
||||
String daemonArgs = getDaemonArgs();
|
||||
assertTrue(!daemonArgs.contains("-Xmx") && !daemonArgs.contains("mvnd.maxHeapSize"),
|
||||
"Args must not contain -Xmx or mvnd.maxHeapSize but is:\n" + daemonArgs);
|
||||
}
|
||||
}
|
||||
|
||||
@MvndNativeTest(projectDir = "src/test/projects/max-heap/jvm-heap")
|
||||
static class JvmConfig extends BaseTest {
|
||||
|
||||
@Test
|
||||
void xmxFromJvmConfig() throws InterruptedException {
|
||||
final TestClientOutput output = new TestClientOutput();
|
||||
client.execute(output, "-Dmvnd.log.level=DEBUG", "org.codehaus.gmaven:groovy-maven-plugin:2.1.1:execute",
|
||||
"-Dsource=System.out.println(java.lang.management.ManagementFactory.getRuntimeMXBean().getInputArguments())")
|
||||
.assertSuccess();
|
||||
String daemonArgs = getDaemonArgs();
|
||||
assertTrue(!daemonArgs.contains("-Xmx") && !daemonArgs.contains("mvnd.maxHeapSize"),
|
||||
"Args must not contain -Xmx or mvnd.maxHeapSize but is:\n" + daemonArgs);
|
||||
}
|
||||
}
|
||||
|
||||
@MvndNativeTest(projectDir = "src/test/projects/max-heap/mvnd-props")
|
||||
static class MvndProps extends BaseTest {
|
||||
|
||||
@Test
|
||||
void xmxFromMvndProperties() throws InterruptedException {
|
||||
final TestClientOutput output = new TestClientOutput();
|
||||
client.execute(output, "-Dmvnd.log.level=DEBUG", "org.codehaus.gmaven:groovy-maven-plugin:2.1.1:execute",
|
||||
"-Dsource=System.out.println(java.lang.management.ManagementFactory.getRuntimeMXBean().getInputArguments())")
|
||||
.assertSuccess();
|
||||
String daemonArgs = getDaemonArgs();
|
||||
assertTrue(daemonArgs.contains("-Xmx130M") && daemonArgs.contains("mvnd.maxHeapSize=130M"),
|
||||
"Args must contain -Xmx130M or mvnd.maxHeapSize=130M but is:\n" + daemonArgs);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
* Copyright 2019-2022 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.mvndaemon.mvnd.it;
|
||||
|
||||
import org.mvndaemon.mvnd.junit.MvndTest;
|
||||
|
||||
public class MaxHeapTest extends MaxHeapNativeIT {
|
||||
|
||||
@MvndTest(projectDir = "src/test/projects/max-heap/default-heap")
|
||||
static class DefaultConfig extends MaxHeapNativeIT.DefaultConfig {
|
||||
|
||||
}
|
||||
|
||||
@MvndTest(projectDir = "src/test/projects/max-heap/jvm-config")
|
||||
static class JvmConfig extends MaxHeapNativeIT.JvmConfig {
|
||||
|
||||
}
|
||||
|
||||
@MvndTest(projectDir = "src/test/projects/max-heap/mvnd-props")
|
||||
static class MvndProps extends MaxHeapNativeIT.MvndProps {
|
||||
|
||||
}
|
||||
|
||||
}
|
@@ -1 +0,0 @@
|
||||
-Xmx512k
|
@@ -0,0 +1,27 @@
|
||||
<!--
|
||||
|
||||
Copyright 2021 the original author or authors.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
-->
|
||||
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>org.mvndaemon.mvnd.test.max-heap</groupId>
|
||||
<artifactId>max-heap-default-heap</artifactId>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
<packaging>pom</packaging>
|
||||
|
||||
</project>
|
@@ -0,0 +1 @@
|
||||
-Xmx140M
|
@@ -0,0 +1,3 @@
|
||||
-Dmaven.wagon.httpconnectionManager.ttlSeconds=120
|
||||
-Dmaven.wagon.http.retryHandler.requestSentEnabled=true
|
||||
-Dmaven.wagon.http.retryHandler.count=10
|
@@ -19,8 +19,8 @@
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>org.mvndaemon.mvnd.test.jvm-config</groupId>
|
||||
<artifactId>jvm-config</artifactId>
|
||||
<groupId>org.mvndaemon.mvnd.test.max-heap</groupId>
|
||||
<artifactId>max-heap-jvm-config</artifactId>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
<packaging>pom</packaging>
|
||||
|
@@ -0,0 +1,3 @@
|
||||
-Dmaven.wagon.httpconnectionManager.ttlSeconds=120
|
||||
-Dmaven.wagon.http.retryHandler.requestSentEnabled=true
|
||||
-Dmaven.wagon.http.retryHandler.count=10
|
@@ -0,0 +1,17 @@
|
||||
#
|
||||
# Copyright 2019 the original author or authors.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
mvnd.maxHeapSize=130M
|
@@ -0,0 +1,27 @@
|
||||
<!--
|
||||
|
||||
Copyright 2021 the original author or authors.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
-->
|
||||
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>org.mvndaemon.mvnd.test.max-heap</groupId>
|
||||
<artifactId>max-heap-jvm-config</artifactId>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
<packaging>pom</packaging>
|
||||
|
||||
</project>
|
Reference in New Issue
Block a user