Skip to content
Permalink
Browse files
8246494: introduce vm.flagless at-requires property
Reviewed-by: mseledtsov, sspitsyn
  • Loading branch information
iignatev committed Mar 18, 2021
1 parent 8c8d1b3 commit e333b6e15343535789353f0017721b6509eb4f00
Show file tree
Hide file tree
Showing 6 changed files with 81 additions and 6 deletions.
@@ -1,5 +1,5 @@
#
# Copyright (c) 2005, 2020, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2005, 2021, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -75,6 +75,7 @@ requires.properties= \
vm.compiler1.enabled \
vm.compiler2.enabled \
vm.musl \
vm.flagless \
docker.support \
jdk.containerized

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2017, 2021, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -24,6 +24,7 @@
/*
* @test
* @library /test/lib
* @requires vm.flagless
* @run driver Scimark
*/

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2016, 2021, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -26,6 +26,7 @@
* @library /test/lib
* @modules java.base/jdk.internal.misc
* java.xml
* @requires vm.flagless
* @run main/native GTestWrapper
*/

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2020, 2021, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2020 SAP SE. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
@@ -39,6 +39,7 @@
* @library /test/lib
* @modules java.base/jdk.internal.misc
* java.xml
* @requires vm.flagless
* @run main/native GTestWrapper --gtest_filter=os* -XX:+UseLargePages
*/

@@ -49,6 +50,7 @@
* @library /test/lib
* @modules java.base/jdk.internal.misc
* java.xml
* @requires vm.flagless
* @run main/native GTestWrapper --gtest_filter=os* -XX:+UseLargePages -XX:LargePageSizeInBytes=1G
*/

@@ -58,5 +60,6 @@
* @library /test/lib
* @modules java.base/jdk.internal.misc
* java.xml
* @requires vm.flagless
* @run main/native GTestWrapper --gtest_filter=os* -XX:+UseLargePages -XX:+UseSHM
*/
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2020, 2021, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2020 SAP SE. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
@@ -36,6 +36,7 @@
* @library /test/lib
* @modules java.base/jdk.internal.misc
* java.xml
* @requires vm.flagless
* @run main/native GTestWrapper --gtest_filter=metaspace* -XX:MetaspaceReclaimPolicy=none -XX:+UnlockDiagnosticVMOptions -XX:VerifyMetaspaceInterval=3
*/

@@ -45,6 +46,7 @@
* @library /test/lib
* @modules java.base/jdk.internal.misc
* java.xml
* @requires vm.flagless
* @run main/native GTestWrapper --gtest_filter=metaspace* -XX:MetaspaceReclaimPolicy=none
*/

@@ -58,6 +60,7 @@
* @library /test/lib
* @modules java.base/jdk.internal.misc
* java.xml
* @requires vm.flagless
* @run main/native GTestWrapper --gtest_filter=metaspace* -XX:MetaspaceReclaimPolicy=aggressive -XX:+UnlockDiagnosticVMOptions -XX:VerifyMetaspaceInterval=3
*/

@@ -67,6 +70,7 @@
* @library /test/lib
* @modules java.base/jdk.internal.misc
* java.xml
* @requires vm.flagless
* @run main/native GTestWrapper --gtest_filter=metaspace* -XX:MetaspaceReclaimPolicy=aggressive
*/

@@ -79,6 +83,7 @@
* @library /test/lib
* @modules java.base/jdk.internal.misc
* java.xml
* @requires vm.flagless
* @run main/native GTestWrapper --gtest_filter=metaspace* -XX:+UnlockDiagnosticVMOptions -XX:VerifyMetaspaceInterval=3 -XX:+MetaspaceGuardAllocations
*/

@@ -91,5 +96,6 @@
* @library /test/lib
* @modules java.base/jdk.internal.misc
* java.xml
* @requires vm.flagless
* @run main/native GTestWrapper --gtest_filter=metaspace* -XX:MetaspaceReclaimPolicy=balanced -XX:-UseCompressedClassPointers
*/
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2016, 2021, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -20,6 +20,7 @@
* or visit www.oracle.com if you need additional information or have any
* questions.
*/

package requires;

import java.io.BufferedInputStream;
@@ -31,10 +32,12 @@
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.concurrent.Callable;
import java.util.concurrent.TimeUnit;
import java.util.function.Supplier;
@@ -118,6 +121,7 @@ public Map<String, String> call() {
map.put("vm.musl", this::isMusl);
map.put("release.implementor", this::implementor);
map.put("jdk.containerized", this::jdkContainerized);
map.put("vm.flagless", this::isFlagless);
vmGC(map); // vm.gc.X = true/false
vmOptFinalFlags(map);

@@ -529,6 +533,65 @@ private String jdkContainerized() {
return "" + "true".equalsIgnoreCase(isEnabled);
}

/**
* Checks if we are in <i>almost</i> out-of-box configuration, i.e. the flags
* which JVM is started with don't affect its behavior "significantly".
* {@code TEST_VM_FLAGLESS} enviroment variable can be used to force this
* method to return true and allow any flags.
*
* @return true if there are no JVM flags
*/
private String isFlagless() {
boolean result = true;
if (System.getenv("TEST_VM_FLAGLESS") != null) {
return "" + result;
}

List<String> allFlags = new ArrayList<String>();
Collections.addAll(allFlags, System.getProperty("test.vm.opts", "").trim().split("\\s+"));
Collections.addAll(allFlags, System.getProperty("test.java.opts", "").trim().split("\\s+"));

// check -XX flags
var ignoredXXFlags = Set.of(
// added by run-test framework
"MaxRAMPercentage",
// added by test environment
"CreateCoredumpOnCrash"
);
result &= allFlags.stream()
.filter(s -> s.startsWith("-XX:"))
// map to names:
// remove -XX:
.map(s -> s.substring(4))
// remove +/- from bool flags
.map(s -> s.charAt(0) == '+' || s.charAt(0) == '-' ? s.substring(1) : s)
// remove =.* from others
.map(s -> s.contains("=") ? s.substring(0, s.indexOf('=')) : s)
// skip known-to-be-there flags
.filter(s -> !ignoredXXFlags.contains(s))
.findAny()
.isEmpty();

// check -X flags
var ignoredXFlags = Set.of(
// default, yet still seen to be explicitly set
"mixed"
);
result &= allFlags.stream()
.filter(s -> s.startsWith("-X") && !s.startsWith("-XX:"))
// map to names:
// remove -X
.map(s -> s.substring(2))
// remove :.* from flags with values
.map(s -> s.contains(":") ? s.substring(0, s.indexOf(':')) : s)
// skip known-to-be-there flags
.filter(s -> !ignoredXFlags.contains(s))
.findAny()
.isEmpty();

return "" + result;
}

/**
* Dumps the map to the file if the file name is given as the property.
* This functionality could be helpful to know context in the real

0 comments on commit e333b6e

Please sign in to comment.