24 package jdk.test.lib.containers.cgroup; |
24 package jdk.test.lib.containers.cgroup; |
25 |
25 |
26 import java.io.File; |
26 import java.io.File; |
27 import java.io.FileNotFoundException; |
27 import java.io.FileNotFoundException; |
28 import java.io.IOException; |
28 import java.io.IOException; |
|
29 import java.math.BigInteger; |
29 import java.nio.file.Files; |
30 import java.nio.file.Files; |
30 import java.nio.file.Path; |
31 import java.nio.file.Path; |
31 import java.nio.file.Paths; |
32 import java.nio.file.Paths; |
32 import java.util.Arrays; |
33 import java.util.Arrays; |
33 import java.util.HashMap; |
34 import java.util.HashMap; |
155 } |
156 } |
156 } |
157 } |
157 |
158 |
158 private static long getLongValueFromFile(SubSystem subSystem, String fileName) { |
159 private static long getLongValueFromFile(SubSystem subSystem, String fileName) { |
159 String data = getFileContents(subSystem, fileName); |
160 String data = getFileContents(subSystem, fileName); |
160 return data.isEmpty() ? 0L : Long.parseLong(data); |
161 return data.isEmpty() ? 0L : convertStringToLong(data); |
|
162 } |
|
163 |
|
164 private static long convertStringToLong(String strval) { |
|
165 long retval = 0; |
|
166 if (strval == null) return 0L; |
|
167 |
|
168 try { |
|
169 retval = Long.parseLong(strval); |
|
170 } catch (NumberFormatException e) { |
|
171 // For some properties (e.g. memory.limit_in_bytes) we may overflow the range of signed long. |
|
172 // In this case, return Long.MAX_VALUE |
|
173 BigInteger b = new BigInteger(strval); |
|
174 if (b.compareTo(BigInteger.valueOf(Long.MAX_VALUE)) > 0) { |
|
175 return Long.MAX_VALUE; |
|
176 } |
|
177 } |
|
178 return retval; |
161 } |
179 } |
162 |
180 |
163 private static long getLongValueFromFile(SubSystem subSystem, String metric, String subMetric) { |
181 private static long getLongValueFromFile(SubSystem subSystem, String metric, String subMetric) { |
164 String stats = getFileContents(subSystem, metric); |
182 String stats = getFileContents(subSystem, metric); |
165 String[] tokens = stats.split("[\\r\\n]+"); |
183 String[] tokens = stats.split("[\\r\\n]+"); |
166 for (int i = 0; i < tokens.length; i++) { |
184 for (int i = 0; i < tokens.length; i++) { |
167 if (tokens[i].startsWith(subMetric)) { |
185 if (tokens[i].startsWith(subMetric)) { |
168 return Long.parseLong(tokens[i].split("\\s+")[1]); |
186 String strval = tokens[i].split("\\s+")[1]; |
|
187 return convertStringToLong(strval); |
169 } |
188 } |
170 } |
189 } |
171 return 0L; |
190 return 0L; |
172 } |
191 } |
173 |
192 |