[ https://issues.apache.org/jira/browse/POOL-393?focusedWorklogId=835611&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-835611 ]
ASF GitHub Bot logged work on POOL-393: --------------------------------------- Author: ASF GitHub Bot Created on: 24/Dec/22 22:27 Start Date: 24/Dec/22 22:27 Worklog Time Spent: 10m Work Description: garydgregory commented on PR #199: URL: https://github.com/apache/commons-pool/pull/199#issuecomment-1364590761 Hi all, I don't think we need address tests since this PR just tweaks the existing allocation. Unless we go with random numbers, we just have to accept that one app can allocate names 1 through 100, and that all other apps have to test 1 through 100 before settling on 101, or 102, and so on. I think there can still be a race condition, but we can fix that separately. Curious to see what @psteitz thinks. Issue Time Tracking ------------------- Worklog Id: (was: 835611) Time Spent: 2h 10m (was: 2h) > BaseGenericObjectPool.jmxRegister may cost too much time > -------------------------------------------------------- > > Key: POOL-393 > URL: https://issues.apache.org/jira/browse/POOL-393 > Project: Commons Pool > Issue Type: Improvement > Affects Versions: 2.4.2 > Reporter: Shichao Yuan > Priority: Major > Time Spent: 2h 10m > Remaining Estimate: 0h > > > When creating many pools, I find that it tasks too much time to register jmx. > In the code, the ObjectName's postfix always starts with 1, so many > InstanceAlreadyExistsExceptions may be thrown before registered successfully. > Maybe a random number is a better choice, or a atomic long. > {quote}private ObjectName jmxRegister(BaseObjectPoolConfig config, > String jmxNameBase, String jmxNamePrefix) { > ObjectName objectName = null; > MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); > int i = 1; > boolean registered = false; > String base = config.getJmxNameBase(); > if (base == null) > Unknown macro: \{ base = jmxNameBase; } > while (!registered) { > try { > ObjectName objName; > // Skip the numeric suffix for the first pool in case there is > // only one so the names are cleaner. > if (i == 1) > Unknown macro: \{ objName = new ObjectName(base + jmxNamePrefix); } > else > Unknown macro: \{ objName = new ObjectName(base + jmxNamePrefix + i); } > mbs.registerMBean(this, objName); > objectName = objName; > registered = true; > } catch (MalformedObjectNameException e) { > if (BaseObjectPoolConfig.DEFAULT_JMX_NAME_PREFIX.equals( > jmxNamePrefix) && jmxNameBase.equals(base)) > Unknown macro: \{ // Shouldn't happen. Skip registration if it does. > registered = true; } > else > Unknown macro: \{ // Must be an invalid name. Use the defaults instead. > jmxNamePrefix = BaseObjectPoolConfig.DEFAULT_JMX_NAME_PREFIX; base = > jmxNameBase; } > } catch (InstanceAlreadyExistsException e) > Unknown macro: \{ // Increment the index and try again i++; } > catch (MBeanRegistrationException e) > Unknown macro: \{ // Shouldn't happen. Skip registration if it does. > registered = true; } > catch (NotCompliantMBeanException e) > } > return objectName; > } > {quote} -- This message was sent by Atlassian Jira (v8.20.10#820010)