--- a/src/hotspot/os/linux/osContainer_linux.cpp Wed Feb 07 10:25:10 2018 -0800
+++ b/src/hotspot/os/linux/osContainer_linux.cpp Wed Feb 07 16:16:50 2018 +0100
@@ -122,35 +122,40 @@
char file[MAXPATHLEN+1];
char buf[MAXPATHLEN+1];
- if (c != NULL && c->subsystem_path() != NULL) {
- strncpy(file, c->subsystem_path(), MAXPATHLEN);
- file[MAXPATHLEN-1] = '\0';
- int filelen = strlen(file);
- if ((filelen + strlen(filename)) > (MAXPATHLEN-1)) {
- log_debug(os, container)("File path too long %s, %s", file, filename);
- return OSCONTAINER_ERROR;
- }
- strncat(file, filename, MAXPATHLEN-filelen);
- log_trace(os, container)("Path to %s is %s", filename, file);
- fp = fopen(file, "r");
- if (fp != NULL) {
- p = fgets(buf, MAXPATHLEN, fp);
- if (p != NULL) {
- int matched = sscanf(p, scan_fmt, returnval);
- if (matched == 1) {
- fclose(fp);
- return 0;
- } else {
- log_debug(os, container)("Type %s not found in file %s",
- scan_fmt , file);
- }
+ if (c == NULL) {
+ log_debug(os, container)("subsystem_file_contents: CgroupSubsytem* is NULL");
+ return OSCONTAINER_ERROR;
+ }
+ if (c->subsystem_path() == NULL) {
+ log_debug(os, container)("subsystem_file_contents: subsystem path is NULL");
+ return OSCONTAINER_ERROR;
+ }
+
+ strncpy(file, c->subsystem_path(), MAXPATHLEN);
+ file[MAXPATHLEN-1] = '\0';
+ int filelen = strlen(file);
+ if ((filelen + strlen(filename)) > (MAXPATHLEN-1)) {
+ log_debug(os, container)("File path too long %s, %s", file, filename);
+ return OSCONTAINER_ERROR;
+ }
+ strncat(file, filename, MAXPATHLEN-filelen);
+ log_trace(os, container)("Path to %s is %s", filename, file);
+ fp = fopen(file, "r");
+ if (fp != NULL) {
+ p = fgets(buf, MAXPATHLEN, fp);
+ if (p != NULL) {
+ int matched = sscanf(p, scan_fmt, returnval);
+ if (matched == 1) {
+ fclose(fp);
+ return 0;
} else {
- log_debug(os, container)("Empty file %s", file);
+ log_debug(os, container)("Type %s not found in file %s", scan_fmt, file);
}
} else {
- log_debug(os, container)("Open of file %s failed, %s", file,
- os::strerror(errno));
+ log_debug(os, container)("Empty file %s", file);
}
+ } else {
+ log_debug(os, container)("Open of file %s failed, %s", file, os::strerror(errno));
}
if (fp != NULL)
fclose(fp);
@@ -273,7 +278,7 @@
else {
log_debug(os, container)("Incompatible str containing cgroup and cpuset: %s", p);
}
- } else if (strstr(p, "cpu,cpuacct") != NULL) {
+ } else if (strstr(p, "cpu,cpuacct") != NULL || strstr(p, "cpuacct,cpu") != NULL) {
int matched = sscanf(p, "%d %d %d:%d %s %s",
&mountid,
&parentid,
@@ -322,8 +327,20 @@
fclose(mntinfo);
- if (memory == NULL || cpuset == NULL || cpu == NULL || cpuacct == NULL) {
- log_debug(os, container)("Required cgroup subsystems not found");
+ if (memory == NULL) {
+ log_debug(os, container)("Required cgroup memory subsystem not found");
+ return;
+ }
+ if (cpuset == NULL) {
+ log_debug(os, container)("Required cgroup cpuset subsystem not found");
+ return;
+ }
+ if (cpu == NULL) {
+ log_debug(os, container)("Required cgroup cpu subsystem not found");
+ return;
+ }
+ if (cpuacct == NULL) {
+ log_debug(os, container)("Required cgroup cpuacct subsystem not found");
return;
}
@@ -374,7 +391,7 @@
memory->set_subsystem_path(base);
} else if (strstr(controller, "cpuset") != NULL) {
cpuset->set_subsystem_path(base);
- } else if (strstr(controller, "cpu,cpuacct") != NULL) {
+ } else if (strstr(controller, "cpu,cpuacct") != NULL || strstr(controller, "cpuacct,cpu") != NULL) {
cpu->set_subsystem_path(base);
cpuacct->set_subsystem_path(base);
} else if (strstr(controller, "cpuacct") != NULL) {
--- a/test/lib/jdk/test/lib/containers/docker/DockerTestUtils.java Wed Feb 07 10:25:10 2018 -0800
+++ b/test/lib/jdk/test/lib/containers/docker/DockerTestUtils.java Wed Feb 07 16:16:50 2018 +0100
@@ -34,6 +34,7 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
+import jdk.test.lib.Platform;
import jdk.test.lib.Utils;
import jdk.test.lib.process.OutputAnalyzer;
import jdk.test.lib.process.ProcessTools;
@@ -109,7 +110,9 @@
* The jdk will be placed under the "/jdk/" folder inside the docker file system.
*
* @param imageName name of the image to be created, including version tag
- * @param dockerfile name of the dockerfile residing in the test source
+ * @param dockerfile name of the dockerfile residing in the test source;
+ * we check for a platform specific dockerfile as well
+ * and use this one in case it exists
* @param buildDirName name of the docker build/staging directory, which will
* be created in the jtreg's scratch folder
* @throws Exception
@@ -122,6 +125,11 @@
if (Files.exists(buildDir)) {
throw new RuntimeException("The docker build directory already exists: " + buildDir);
}
+ // check for the existance of a platform specific docker file as well
+ String platformSpecificDockerfile = dockerfile + "-" + Platform.getOsArch();
+ if (Files.exists(Paths.get(Utils.TEST_SRC, platformSpecificDockerfile))) {
+ dockerfile = platformSpecificDockerfile;
+ }
Path jdkSrcDir = Paths.get(Utils.TEST_JDK);
Path jdkDstDir = buildDir.resolve("jdk");