You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@brooklyn.apache.org by "Aled Sage (JIRA)" <ji...@apache.org> on 2017/04/27 22:04:04 UTC

[jira] [Resolved] (BROOKLYN-260) ConcurrentModificationException in BrooklynProperties during startup (Brooklyn failed to start)

     [ 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)