[
https://issues.apache.org/jira/browse/BROOKLYN-260?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Aled Sage resolved BROOKLYN-260.
--------------------------------
Resolution: Fixed
Fix Version/s: 0.11.0
Fixed as a by-product of fixing
https://issues.apache.org/jira/browse/BROOKLYN-404 (see
https://github.com/apache/brooklyn-server/pull/505)
> ConcurrentModificationException in BrooklynProperties during startup
> (Brooklyn failed to start)
> -----------------------------------------------------------------------------------------------
>
> Key: BROOKLYN-260
> URL: https://issues.apache.org/jira/browse/BROOKLYN-260
> Project: Brooklyn
> Issue Type: Bug
> Affects Versions: 0.9.0
> Reporter: Aled Sage
> Fix For: 0.11.0
>
>
> Running {{brooklyn launch}}, it failed to start with the
> {{ConcurrentModificationException}} shown below. Trying a second time, it
> worked fine. I've only seen this error once.
> {noformat}
> 2016-04-29 15:26:23,873 ERROR o.a.brooklyn.cli.AbstractMain [main]: Execution
> error: null
> java.util.ConcurrentModificationException: null
> at
> java.util.LinkedHashMap$LinkedHashIterator.nextEntry(LinkedHashMap.java:394)
> ~[na:1.7.0_71]
> at java.util.LinkedHashMap$EntryIterator.next(LinkedHashMap.java:413)
> ~[na:1.7.0_71]
> at java.util.LinkedHashMap$EntryIterator.next(LinkedHashMap.java:412)
> ~[na:1.7.0_71]
> at
> org.apache.brooklyn.core.internal.BrooklynPropertiesImpl.submap(BrooklynPropertiesImpl.java:463)
> ~[org.apache.brooklyn-brooklyn-core-0.10.0-SNAPSHOT.jar:0.10.0-SNAPSHOT]
> at
> org.apache.brooklyn.core.internal.BrooklynPropertiesImpl.submap(BrooklynPropertiesImpl.java:61)
> ~[org.apache.brooklyn-brooklyn-core-0.10.0-SNAPSHOT.jar:0.10.0-SNAPSHOT]
> at
> org.apache.brooklyn.core.mgmt.internal.DeferredBrooklynProperties.submap(DeferredBrooklynProperties.java:193)
> ~[org.apache.brooklyn-brooklyn-core-0.10.0-SNAPSHOT.jar:0.10.0-SNAPSHOT]
> at
> org.apache.brooklyn.core.mgmt.internal.DeferredBrooklynProperties.submap(DeferredBrooklynProperties.java:55)
> ~[org.apache.brooklyn-brooklyn-core-0.10.0-SNAPSHOT.jar:0.10.0-SNAPSHOT]
> at
> org.apache.brooklyn.core.location.BasicLocationRegistry.updateDefinedLocations(BasicLocationRegistry.java:277)
> ~[org.apache.brooklyn-brooklyn-core-0.10.0-SNAPSHOT.jar:0.10.0-SNAPSHOT]
> at
> org.apache.brooklyn.core.location.BasicLocationRegistry.<init>(BasicLocationRegistry.java:165)
> ~[org.apache.brooklyn-brooklyn-core-0.10.0-SNAPSHOT.jar:0.10.0-SNAPSHOT]
> at
> org.apache.brooklyn.core.mgmt.internal.AbstractManagementContext.getLocationRegistry(AbstractManagementContext.java:381)
> ~[org.apache.brooklyn-brooklyn-core-0.10.0-SNAPSHOT.jar:0.10.0-SNAPSHOT]
> at
> org.apache.brooklyn.launcher.common.BasicLauncher.addLocations(BasicLauncher.java:473)
>
> ~[org.apache.brooklyn-brooklyn-launcher-common-0.10.0-SNAPSHOT.jar:0.10.0-SNAPSHOT]
> at
> org.apache.brooklyn.launcher.common.BasicLauncher.start(BasicLauncher.java:427)
>
> ~[org.apache.brooklyn-brooklyn-launcher-common-0.10.0-SNAPSHOT.jar:0.10.0-SNAPSHOT]
> at org.apache.brooklyn.cli.Main$LaunchCommand.call(Main.java:461)
> ~[org.apache.brooklyn-brooklyn-cli-0.10.0-SNAPSHOT.jar:0.10.0-SNAPSHOT]
> at org.apache.brooklyn.cli.Main$LaunchCommand.call(Main.java:196)
> ~[org.apache.brooklyn-brooklyn-cli-0.10.0-SNAPSHOT.jar:0.10.0-SNAPSHOT]
> at
> org.apache.brooklyn.cli.AbstractMain.execCli(AbstractMain.java:252)
> [org.apache.brooklyn-brooklyn-cli-0.10.0-SNAPSHOT.jar:0.10.0-SNAPSHOT]
> at
> org.apache.brooklyn.cli.AbstractMain.execCli(AbstractMain.java:244)
> [org.apache.brooklyn-brooklyn-cli-0.10.0-SNAPSHOT.jar:0.10.0-SNAPSHOT]
> at org.apache.brooklyn.cli.Main.main(Main.java:123)
> [org.apache.brooklyn-brooklyn-cli-0.10.0-SNAPSHOT.jar:0.10.0-SNAPSHOT]
> {noformat}
> This means something must have put/removed to the BrooklynProperties while
> the main thread is still starting. This is done, for example, by
> {{BrooklynCampPlatform.setConfigKeyAtManagmentContext()}}. It is also done in
> brooklyn-tosca. There are probably other places as well.
> The javadoc of {{BrooklynPropertiesImpl}} says:
> {noformat}
> * TODO methods in this class are not thread safe.
> * intention is that they are set during startup and not modified thereafter.
> {noformat}
> It seems to me the best thing is to make {{BrooklynPropertiesImpl}} thread
> safe. Also I'd prefer if the impl didn't just extend {{LinkedHashMap}}. That
> gives up a lot of control over how we implement it (e.g. makes it fiddly to
> make it thread-safe).
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)