demery-pivotal commented on a change in pull request #7456: URL: https://github.com/apache/geode/pull/7456#discussion_r831559211
########## File path: geode-core/src/main/java/org/apache/geode/internal/cache/control/HeapMemoryMonitor.java ########## @@ -144,82 +82,32 @@ private final ResourceAdvisor resourceAdvisor; private final InternalCache cache; private final ResourceManagerStats stats; - private final TenuredHeapConsumptionMonitor tenuredHeapConsumptionMonitor; - @MutableForTesting - private static boolean testDisableMemoryUpdates = false; @MutableForTesting private static long testBytesUsedForThresholdSet = -1; - /** - * Determines if the name of the memory pool MXBean provided matches a list of known tenured pool - * names. - * - * Package private for testing. - * checkTenuredHeapConsumption - * - * @param memoryPoolMXBean The memory pool MXBean to check. - * @return True if the pool name matches a known tenured pool name, false otherwise. - */ - static boolean isTenured(MemoryPoolMXBean memoryPoolMXBean) { - if (memoryPoolMXBean.getType() != MemoryType.HEAP) { - return false; - } - - String name = memoryPoolMXBean.getName(); - - return name.equals("CMS Old Gen") // Sun Concurrent Mark Sweep GC - || name.equals("PS Old Gen") // Sun Parallel GC - || name.equals("G1 Old Gen") // Sun G1 GC - || name.equals("Old Space") // BEA JRockit 1.5, 1.6 GC - || name.equals("Tenured Gen") // Hitachi 1.5 GC - || name.equals("Java heap") // IBM 1.5, 1.6 GC - || name.equals("GenPauseless Old Gen") // azul C4/GPGC collector - - // Allow an unknown pool name to monitor - || (HEAP_POOL != null && name.equals(HEAP_POOL)); - } + @Immutable + private static final ServiceLoader<HeapUsageMonitor> heapUsageMonitorLoader = + ServiceLoader.load(HeapUsageMonitor.class); HeapMemoryMonitor(final InternalResourceManager resourceManager, final InternalCache cache, - final ResourceManagerStats stats, - TenuredHeapConsumptionMonitor tenuredHeapConsumptionMonitor) { + final ResourceManagerStats stats) { this.resourceManager = resourceManager; resourceAdvisor = (ResourceAdvisor) cache.getDistributionAdvisor(); this.cache = cache; this.stats = stats; - this.tenuredHeapConsumptionMonitor = tenuredHeapConsumptionMonitor; - } - - /** - * Returns the tenured pool MXBean or throws an IllegaleStateException if one couldn't be found. - */ - public static MemoryPoolMXBean getTenuredMemoryPoolMXBean() { - if (tenuredMemoryPoolMXBean != null) { - return tenuredMemoryPoolMXBean; - } - - throw new IllegalStateException(String.format("No tenured pools found. Known pools are: %s", - getAllMemoryPoolNames())); + heapUsageMonitor = findHeapUsageMonitor(); + thresholds = new MemoryThresholds(heapUsageMonitor.getMaxMemory()); + mostRecentEvent = new MemoryEvent(ResourceType.HEAP_MEMORY, + MemoryState.DISABLED, MemoryState.DISABLED, null, 0L, true, thresholds); } - /** - * Returns the names of all available memory pools as a single string. - */ - private static String getAllMemoryPoolNames() { - StringBuilder builder = new StringBuilder("["); - - for (MemoryPoolMXBean memoryPoolBean : ManagementFactory.getMemoryPoolMXBeans()) { - builder.append("(Name=").append(memoryPoolBean.getName()).append(";Type=") - .append(memoryPoolBean.getType()).append(";UsageThresholdSupported=") - .append(memoryPoolBean.isUsageThresholdSupported()).append("), "); - } - - if (builder.length() > 1) { - builder.setLength(builder.length() - 2); + private static HeapUsageMonitor findHeapUsageMonitor() { + for (HeapUsageMonitor heapUsageMonitor : heapUsageMonitorLoader) { Review comment: If the implementation's constructor throws an exception, the service loader's `hasNext()` and `next()` will throw. If that happens, is it okay for the `HeapUsageMonitor` constructor to throw, or do you want to catch it and fall back to the default heap usage monitor? -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: notifications-unsubscr...@geode.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org