Skip to content

Commit 1b0de02

Browse files
authored
Provide fallback bean for OS info (fixes #502, see #503)
When run in a container, the getOperatingSystemMXBean can throw an exception under certain version of Java. This fix provides a fallback object that provides the basic information about the OS for such cases.
2 parents 4102593 + bac67c9 commit 1b0de02

1 file changed

Lines changed: 40 additions & 1 deletion

File tree

renaissance-harness/src/main/scala/org/renaissance/harness/ResultWriter.scala

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,44 @@ import scala.collection.mutable
2020
import scala.jdk.CollectionConverters._
2121
import scala.util.Try
2222

23+
/**
24+
* Fallback when it is not possible to retrieve the OperatingSystemMXBean
25+
* via java.lang.management.ManagementFactory.getOperatingSystemMXBean().
26+
*/
27+
object UnknownOperatingSystemMXBean extends management.OperatingSystemMXBean {
28+
29+
override def getArch(): String = {
30+
// Return value as per documentation with our fallback
31+
System.getProperty("os.arch", "unknown")
32+
}
33+
34+
override def getAvailableProcessors(): Int = {
35+
// Return value as per documentation
36+
Runtime.getRuntime.availableProcessors()
37+
}
38+
39+
override def getName(): String = {
40+
// Return value as per documentation with our fallback
41+
System.getProperty("os.name", "unknown")
42+
}
43+
44+
override def getSystemLoadAverage(): Double = {
45+
// Per documentation: If the load average is not available,
46+
// a negative value is returned.
47+
-1.0
48+
}
49+
50+
override def getVersion(): String = {
51+
// Return value as per documentation with our fallback
52+
System.getProperty("os.version", "unknown")
53+
}
54+
55+
override def getObjectName(): javax.management.ObjectName = {
56+
// Not really needed
57+
null
58+
}
59+
}
60+
2361
/**
2462
* Provides common functionality for JSON and CSV result writers.
2563
*
@@ -199,7 +237,8 @@ private final class JsonWriter(val jsonFile: Path, vmStartNanos: Long) extends R
199237
}
200238

201239
private def getOsInfo = {
202-
val os = management.ManagementFactory.getOperatingSystemMXBean
240+
val os = Try(management.ManagementFactory.getOperatingSystemMXBean)
241+
.getOrElse(UnknownOperatingSystemMXBean)
203242

204243
val result = mutable.Buffer(
205244
"name" -> os.getName.toJson,

0 commit comments

Comments
 (0)