< prev index next >

src/java.base/linux/classes/jdk/internal/platform/CgroupSubsystemController.java

Print this page
@  rev 57734 : Review feedback
|
o  rev 57733 : 8231111: Cgroups v2: Rework Metrics in java.base so as to recognize unified hierarchy
|  Reviewed-by: bobv, mchung
~
o  rev 56862 : 8231111: Cgroups v2: Rework Metrics in java.base so as to recognize unified hierarchy
|  Reviewed-by: bobv
~

*** 46,62 **** public String path(); /** * getStringValue * ! * Return the first line of the file "parm" argument from the controller. * * TODO: Consider using weak references for caching BufferedReader object. * * @param controller ! * @param parm ! * @return Returns the contents of the file specified by param. */ public static String getStringValue(CgroupSubsystemController controller, String param) { if (controller == null) return null; try { --- 46,63 ---- public String path(); /** * getStringValue * ! * Return the first line of the file "param" argument from the controller. * * TODO: Consider using weak references for caching BufferedReader object. * * @param controller ! * @param param ! * @return Returns the contents of the file specified by param or null if ! * an error occurs. */ public static String getStringValue(CgroupSubsystemController controller, String param) { if (controller == null) return null; try {
*** 66,80 **** return null; } } public static long getLongValueMatchingLine(CgroupSubsystemController controller, String param, String match, ! Function<String, Long> conversion) { ! long retval = Metrics.LONG_RETVAL_UNLIMITED; try { Path filePath = Paths.get(controller.path(), param); List<String> lines = CgroupUtil.readAllLinesPrivileged(filePath); for (String line : lines) { if (line.startsWith(match)) { --- 67,97 ---- return null; } } + /** + * Get an entry from file "param" within the "controller" directory path + * which matches string "match". Applies "conversion" to the matching line. + * + * @param controller + * @param param + * @param match + * @param conversion + * @param defaultRetval + * @return The long value as derived by applying "conversion" to the matching + * line or "defaultRetval" if there was an error or no match found. + */ public static long getLongValueMatchingLine(CgroupSubsystemController controller, String param, String match, ! Function<String, Long> conversion, ! long defaultRetval) { ! long retval = defaultRetval; ! if (controller == null) { ! return retval; ! } try { Path filePath = Paths.get(controller.path(), param); List<String> lines = CgroupUtil.readAllLinesPrivileged(filePath); for (String line : lines) { if (line.startsWith(match)) {
*** 86,151 **** // Ignore. Default is unlimited. } return retval; } public static long getLongValue(CgroupSubsystemController controller, ! String parm, ! Function<String, Long> conversion) { ! String strval = getStringValue(controller, parm); return conversion.apply(strval); } ! public static double getDoubleValue(CgroupSubsystemController controller, String parm) { ! String strval = getStringValue(controller, parm); ! if (strval == null) return 0L; double retval = Double.parseDouble(strval); return retval; } /** ! * getSubSystemlongEntry * * Return the long value from the line containing the string "entryname" ! * within file "parm" in the "subsystem". * * TODO: Consider using weak references for caching BufferedReader object. * * @param controller ! * @param parm * @param entryname ! * @return long value */ ! public static long getLongEntry(CgroupSubsystemController controller, String parm, String entryname) { ! if (controller == null) return 0L; ! try (Stream<String> lines = CgroupUtil.readFilePrivileged(Paths.get(controller.path(), parm))) { Optional<String> result = lines.map(line -> line.split(" ")) .filter(line -> (line.length == 2 && line[0].equals(entryname))) .map(line -> line[1]) .findFirst(); ! return result.isPresent() ? Long.parseLong(result.get()) : 0L; } catch (IOException e) { ! return 0L; } } /** ! * StringRangeToIntArray * * Convert a string in the form of 1,3-4,6 to an array of * integers containing all the numbers in the range. * * @param range ! * @return int[] containing a sorted list of processors or memory nodes */ public static int[] stringRangeToIntArray(String range) { if (range == null || EMPTY_STR.equals(range)) return null; ArrayList<Integer> results = new ArrayList<>(); --- 103,192 ---- // Ignore. Default is unlimited. } return retval; } + /** + * Get a long value from directory "controller" and file "param", by + * applying "conversion" to the string value within the file. + * + * @param controller + * @param param + * @param conversion + * @param defaultRetval + * @return The converted long value or "defaultRetval" if there was an + * error. + */ public static long getLongValue(CgroupSubsystemController controller, ! String param, ! Function<String, Long> conversion, ! long defaultRetval) { ! String strval = getStringValue(controller, param); ! if (strval == null) return defaultRetval; return conversion.apply(strval); } ! /** ! * Get a double value from file "param" within "controller". ! * ! * @param controller ! * @param param ! * @param defaultRetval ! * @return The double value or "defaultRetval" if there was an error. ! */ ! public static double getDoubleValue(CgroupSubsystemController controller, String param, double defaultRetval) { ! String strval = getStringValue(controller, param); ! if (strval == null) return defaultRetval; double retval = Double.parseDouble(strval); return retval; } /** ! * getLongEntry * * Return the long value from the line containing the string "entryname" ! * within file "param" in the "controller". * * TODO: Consider using weak references for caching BufferedReader object. * * @param controller ! * @param param * @param entryname ! * @return long value or "defaultRetval" if there was an error or no match ! * was found. */ ! public static long getLongEntry(CgroupSubsystemController controller, String param, String entryname, long defaultRetval) { ! if (controller == null) return defaultRetval; ! try (Stream<String> lines = CgroupUtil.readFilePrivileged(Paths.get(controller.path(), param))) { Optional<String> result = lines.map(line -> line.split(" ")) .filter(line -> (line.length == 2 && line[0].equals(entryname))) .map(line -> line[1]) .findFirst(); ! return result.isPresent() ? Long.parseLong(result.get()) : defaultRetval; } catch (IOException e) { ! return defaultRetval; } } /** ! * stringRangeToIntArray * * Convert a string in the form of 1,3-4,6 to an array of * integers containing all the numbers in the range. * * @param range ! * @return int[] containing a sorted list of numbers as represented by ! * the string range. Returns null if there was an error or the input ! * was an empty string. */ public static int[] stringRangeToIntArray(String range) { if (range == null || EMPTY_STR.equals(range)) return null; ArrayList<Integer> results = new ArrayList<>();
*** 179,197 **** } return ints; } ! public static long convertStringToLong(String strval, long overflowRetval) { ! long retval = 0; ! if (strval == null) return 0L; try { retval = Long.parseLong(strval); } catch (NumberFormatException e) { ! // For some properties (e.g. memory.limit_in_bytes) we may overflow ! // the range of signed long. In this case, return unlimited BigInteger b = new BigInteger(strval); if (b.compareTo(BigInteger.valueOf(Long.MAX_VALUE)) > 0) { return overflowRetval; } } --- 220,249 ---- } return ints; } ! /** ! * Convert a number from its string representation to a long. ! * ! * @param strval ! * @param overflowRetval ! * @param defaultRetval ! * @return The converted long value. "overflowRetval" is returned if the ! * string representation exceeds the range of type long. ! * "defaultRetval" is returned if another type of error occurred ! * during conversion. ! */ ! public static long convertStringToLong(String strval, long overflowRetval, long defaultRetval) { ! long retval = defaultRetval; ! if (strval == null) return retval; try { retval = Long.parseLong(strval); } catch (NumberFormatException e) { ! // For some properties (e.g. memory.limit_in_bytes, cgroups v1) we may overflow ! // the range of signed long. In this case, return overflowRetval BigInteger b = new BigInteger(strval); if (b.compareTo(BigInteger.valueOf(Long.MAX_VALUE)) > 0) { return overflowRetval; } }
< prev index next >