<!-- 
RSS generated by JIRA (8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d) at Wed Feb 07 19:55:50 UTC 2024

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary append 'field=key&field=summary' to the URL of your request.
-->
<rss version="0.92" >
<channel>
    <title>OpenDaylight JIRA</title>
    <link>https://jira.opendaylight.org</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-us</language>    <build-info>
        <version>8.20.10</version>
        <build-number>820010</build-number>
        <build-date>22-06-2022</build-date>
    </build-info>


<item>
            <title>[CONTROLLER-1551] ConcurrentModificationException at karaf.FeaturesServiceImpl at opendaylight.controller.configpusherfeature...FeatureConfigPusher</title>
                <link>https://jira.opendaylight.org/browse/CONTROLLER-1551</link>
                <project id="10113" key="CONTROLLER">controller</project>
                    <description>&lt;p&gt;ConcurrentModificationException observed when installing bgpcep (master branch)&lt;/p&gt;

&lt;p&gt;steps to reproduce it:&lt;br/&gt;
-run Karaf&lt;br/&gt;
-install -&amp;gt; feature:install odl-restconf odl-bgpcep-bgp&lt;/p&gt;



&lt;p&gt;2016-09-22 16:32:50,282 | WARN  | r - ConfigPusher | FeatureConfigPusher              | 137 - config-persister-feature-adapter - 0.6.0.SNAPSHOT | Karaf featuresService.listInstalledFeatures() has thrown an exception, retry 0&lt;br/&gt;
java.util.ConcurrentModificationException&lt;br/&gt;
	at java.util.HashMap$HashIterator.nextNode(HashMap.java:1437)&lt;span class=&quot;error&quot;&gt;&amp;#91;:1.8.0_101&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at java.util.HashMap$KeyIterator.next(HashMap.java:1461)&lt;span class=&quot;error&quot;&gt;&amp;#91;:1.8.0_101&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at java.util.AbstractCollection.toArray(AbstractCollection.java:196)&lt;span class=&quot;error&quot;&gt;&amp;#91;:1.8.0_101&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.apache.karaf.features.internal.FeaturesServiceImpl.listInstalledFeatures(FeaturesServiceImpl.java:840)&lt;span class=&quot;error&quot;&gt;&amp;#91;20:org.apache.karaf.features.core:3.0.8&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at Proxy9faf1ce0_0954_4724_860e_acc04c402866.listInstalledFeatures(Unknown Source)&lt;span class=&quot;error&quot;&gt;&amp;#91;:&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.controller.configpusherfeature.internal.FeatureConfigPusher.isInstalled(FeatureConfigPusher.java:96)&lt;span class=&quot;error&quot;&gt;&amp;#91;137:config-persister-feature-adapter:0.6.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.controller.configpusherfeature.internal.FeatureConfigPusher.pushConfig(FeatureConfigPusher.java:77)&lt;span class=&quot;error&quot;&gt;&amp;#91;137:config-persister-feature-adapter:0.6.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.controller.configpusherfeature.internal.FeatureConfigPusher.pushConfigs(FeatureConfigPusher.java:67)&lt;span class=&quot;error&quot;&gt;&amp;#91;137:config-persister-feature-adapter:0.6.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.controller.configpusherfeature.internal.ConfigPushingRunnable.processFeatureEvent(ConfigPushingRunnable.java:65)&lt;span class=&quot;error&quot;&gt;&amp;#91;137:config-persister-feature-adapter:0.6.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.controller.configpusherfeature.internal.ConfigPushingRunnable.run(ConfigPushingRunnable.java:47)&lt;span class=&quot;error&quot;&gt;&amp;#91;137:config-persister-feature-adapter:0.6.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at java.lang.Thread.run(Thread.java:745)&lt;span class=&quot;error&quot;&gt;&amp;#91;:1.8.0_101&amp;#93;&lt;/span&gt;&lt;/p&gt;</description>
                <environment>&lt;p&gt;Operating System: All&lt;br/&gt;
Platform: All&lt;/p&gt;</environment>
        <key id="26105">CONTROLLER-1551</key>
            <summary>ConcurrentModificationException at karaf.FeaturesServiceImpl at opendaylight.controller.configpusherfeature...FeatureConfigPusher</summary>
                <type id="10104" iconUrl="https://jira.opendaylight.org/secure/viewavatar?size=xsmall&amp;avatarId=10303&amp;avatarType=issuetype">Bug</type>
                                                <status id="5" iconUrl="https://jira.opendaylight.org/images/icons/statuses/resolved.png" description="A resolution has been taken, and it is awaiting verification by reporter. From here issues are either reopened, or are closed.">Resolved</status>
                    <statusCategory id="3" key="done" colorName="green"/>
                                    <resolution id="10000">Done</resolution>
                                        <assignee username="-1">Unassigned</assignee>
                                    <reporter username="cdgasparini">Claudio David Gasparini</reporter>
                        <labels>
                    </labels>
                <created>Thu, 22 Sep 2016 14:51:38 +0000</created>
                <updated>Tue, 25 Jul 2023 08:24:13 +0000</updated>
                            <resolved>Wed, 5 Jul 2017 13:05:51 +0000</resolved>
                                                                    <component>config</component>
                        <due></due>
                            <votes>0</votes>
                                    <watches>3</watches>
                                                                                                                <comments>
                            <comment id="51554" author="cdgasparini" created="Thu, 22 Sep 2016 14:59:51 +0000"  >&lt;p&gt;karaf.log&lt;/p&gt;</comment>
                            <comment id="51566" author="cdgasparini" created="Thu, 22 Sep 2016 14:59:51 +0000"  >&lt;p&gt;Attachment karaf.log has been added with description: karaf.log&lt;/p&gt;</comment>
                            <comment id="51555" author="juraj.veverka@pantheon.tech" created="Tue, 24 Jan 2017 21:11:47 +0000"  >&lt;p&gt;ConcurrentModificationException observed when installing odl features like odl-restconf which trigers installation of other dependent odl features.&lt;br/&gt;
you can reproduce it on latest Carbon SNAPSHOT, it is there for a while.&lt;br/&gt;
karaf 3.0.8&lt;/p&gt;

&lt;p&gt;2017-01-24 22:04:02,935 | INFO  | l for user karaf | DataObjectToJsonConverter        | 338 - tech.pantheon.visibilitypackage.topologyutils.vp-topology-utils - 0.1.0.SNAPSHOT | Mapping service built&lt;br/&gt;
2017-01-24 22:04:02,951 | INFO  | tAdminThread #19 | BlueprintBundleTracker           | 176 - org.opendaylight.controller.blueprint - 0.6.0.SNAPSHOT | Blueprint container for bundle tech.pantheon.visibilitypackage.topologygenerator.vp-topology-generator-impl_0.1.0.SNAPSHOT &lt;span class=&quot;error&quot;&gt;&amp;#91;340&amp;#93;&lt;/span&gt; was successfully created&lt;br/&gt;
2017-01-24 22:04:02,953 | WARN  | r - ConfigPusher | FeatureConfigPusher              | 136 - config-persister-feature-adapter - 0.6.0.SNAPSHOT | Karaf featuresService.listInstalledFeatures() has thrown an exception, retry 0&lt;br/&gt;
java.util.ConcurrentModificationException&lt;br/&gt;
	at java.util.HashMap$HashIterator.nextNode(HashMap.java:1437)&lt;span class=&quot;error&quot;&gt;&amp;#91;:1.8.0_111&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at java.util.HashMap$KeyIterator.next(HashMap.java:1461)&lt;span class=&quot;error&quot;&gt;&amp;#91;:1.8.0_111&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at java.util.AbstractCollection.toArray(AbstractCollection.java:196)&lt;span class=&quot;error&quot;&gt;&amp;#91;:1.8.0_111&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.apache.karaf.features.internal.FeaturesServiceImpl.listInstalledFeatures(FeaturesServiceImpl.java:840)&lt;span class=&quot;error&quot;&gt;&amp;#91;20:org.apache.karaf.features.core:3.0.8&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at Proxy6c30fc01_a81f_4a46_a011_c7ae5d9b78e7.listInstalledFeatures(Unknown Source)&lt;span class=&quot;error&quot;&gt;&amp;#91;:&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.controller.configpusherfeature.internal.FeatureConfigPusher.isInstalled(FeatureConfigPusher.java:97)&lt;span class=&quot;error&quot;&gt;&amp;#91;136:config-persister-feature-adapter:0.6.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.controller.configpusherfeature.internal.FeatureConfigPusher.pushConfig(FeatureConfigPusher.java:78)&lt;span class=&quot;error&quot;&gt;&amp;#91;136:config-persister-feature-adapter:0.6.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.controller.configpusherfeature.internal.FeatureConfigPusher.pushConfigs(FeatureConfigPusher.java:68)&lt;span class=&quot;error&quot;&gt;&amp;#91;136:config-persister-feature-adapter:0.6.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.controller.configpusherfeature.internal.ConfigPushingRunnable.processFeatureEvent(ConfigPushingRunnable.java:65)&lt;span class=&quot;error&quot;&gt;&amp;#91;136:config-persister-feature-adapter:0.6.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.controller.configpusherfeature.internal.ConfigPushingRunnable.run(ConfigPushingRunnable.java:47)&lt;span class=&quot;error&quot;&gt;&amp;#91;136:config-persister-feature-adapter:0.6.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at java.lang.Thread.run(Thread.java:745)&lt;span class=&quot;error&quot;&gt;&amp;#91;:1.8.0_111&amp;#93;&lt;/span&gt;&lt;br/&gt;
2017-01-24 22:04:06,837 | INFO  | config-pusher    | ConfigPusherImpl                 | 135 - org.opendaylight.controller.config-persister-impl - 0.6.0.SNAPSHOT | Pushing configuration snapshot 00-netty.xml(vp-all,vp-all)&lt;br/&gt;
2017-01-24 22:04:07,143 | INFO  | config-pusher    | ConfigPusherImpl                 | 135 - org.opendaylight.controller.config-persister-impl - 0.6.0.SNAPSHOT | Successfully pushed configuration snapshot 00-netty.xml(vp-all,vp-a&lt;/p&gt;</comment>
                            <comment id="51556" author="vorburger" created="Wed, 15 Mar 2017 12:23:20 +0000"  >&lt;p&gt;Just saw this as well (in netvirt/vpnservice/distribution/karaf on feature:install odl-netvirt-openstack; not related to actual feature being installed) .. not reliably reproducible, as these kinds of bugs typically go, of course.&lt;/p&gt;

&lt;p&gt;I&apos;m wondering if this is missing synchronization in Karaf&apos;s FeaturesServiceImpl or ODL&apos;s FeatureConfigPusher?  If Karaf&apos;s FeaturesService is not meant to be thread safe, but if FeatureConfigPusher can run concurrently (for config of different bundles?), then we probably should ourselves synchronize when we use it?  That&apos;s not that hard to do... I&apos;ll see if I can propose a Gerrit.&lt;/p&gt;</comment>
                            <comment id="51557" author="vorburger" created="Wed, 15 Mar 2017 12:33:44 +0000"  >&lt;p&gt;&lt;a href=&quot;https://git.opendaylight.org/gerrit/#/c/53341/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://git.opendaylight.org/gerrit/#/c/53341/&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="51558" author="tpantelis" created="Wed, 15 Mar 2017 14:19:46 +0000"  >&lt;p&gt;In the 3.0.8 version of FeaturesServiceImpl, the &apos;installed&apos; Map isn&apos;t synchronized. The master version at &lt;a href=&quot;https://github.com/apache/karaf/blob/master/features/core/src/main/java/org/apache/karaf/features/internal/service/FeaturesServiceImpl.java&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/apache/karaf/blob/master/features/core/src/main/java/org/apache/karaf/features/internal/service/FeaturesServiceImpl.java&lt;/a&gt; appears to be correctly synchronized/thread-safe.&lt;/p&gt;</comment>
                            <comment id="51559" author="vorburger" created="Wed, 15 Mar 2017 14:31:54 +0000"  >&lt;p&gt;&amp;gt; the 3.0.8 version of FeaturesServiceImpl (...) The master version&lt;/p&gt;

&lt;p&gt;OK, then let&apos;s say that properly resolving this bug depends on Karaf 4 upgrade &lt;a href=&quot;https://jira.opendaylight.org/browse/ODLPARENT-23&quot; title=&quot;Milestone: Upgrade karaf to 4.0.1 or later&quot; class=&quot;issue-link&quot; data-issue-key=&quot;ODLPARENT-23&quot;&gt;&lt;del&gt;ODLPARENT-23&lt;/del&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I&apos;ll try to adjust c/53341 with an ugly workaround hack in the mean time..&lt;/p&gt;</comment>
                            <comment id="51560" author="vorburger" created="Wed, 15 Mar 2017 18:16:35 +0000"  >&lt;p&gt;Oh... hang on, small confusion here.. the code in FeatureConfigPusher actually already does handle this with a retry logic! BUT: &lt;/p&gt;

&lt;p&gt;(a) As three people independently reported this, not understanding that this WARN with the &quot;retry 0&quot; at the end does not actually indicate a problem, including current 2 controller committers not being aware of this, I would suggest that it is wrong to print a WARN log with a scary looking exception if it&apos;s &quot;just&quot; retrying - there should be no log (or only a DEBUG) - but an ERROR if it fails after retrying.  &lt;/p&gt;

&lt;p&gt;(b) On looking at this code more closely, I&apos;ve also found a 2nd place where I guess this could happen and should be handled - in FeatureConfigPusher&apos;s pushConfig using featuresService.getFeature.  &lt;/p&gt;

&lt;p&gt;I&apos;ll change the Gerrit to do both (a) and (b) ...&lt;/p&gt;</comment>
                            <comment id="51561" author="vorburger" created="Wed, 15 Mar 2017 18:23:56 +0000"  >&lt;p&gt;This, from the current implementation, also seems a bit stupid:&lt;/p&gt;

&lt;p&gt;    private static final int MAX_RETRIES = 100;&lt;br/&gt;
    private static final int RETRY_PAUSE_MILLIS = 1;&lt;/p&gt;

&lt;p&gt;I&apos;m going to change it to:&lt;/p&gt;

&lt;p&gt;    private static final int MAX_RETRIES = 10;&lt;br/&gt;
    private static final int RETRY_PAUSE_MILLIS = 100;&lt;/p&gt;</comment>
                            <comment id="51562" author="vorburger" created="Wed, 15 Mar 2017 20:33:13 +0000"  >&lt;p&gt;&amp;gt; (b) On looking at this code more closely, I&apos;ve also found a 2nd place where I &amp;gt; guess this could happen and should be handled - in FeatureConfigPusher&apos;s &lt;br/&gt;
&amp;gt; pushConfig using featuresService.getFeature.  &lt;/p&gt;

&lt;p&gt;I&apos;ve ignored this, for now; we&apos;ll handle it some other time, maybe.&lt;/p&gt;

&lt;p&gt;PS: Do we have a generic Retryer utility?&lt;/p&gt;</comment>
                            <comment id="51563" author="vorburger" created="Wed, 15 Mar 2017 20:38:38 +0000"  >&lt;p&gt;&amp;gt; PS: Do we have a generic Retryer utility?&lt;/p&gt;

&lt;p&gt;org.opendaylight.genius.datastoreutils.TaskRetryLooper&lt;/p&gt;</comment>
                            <comment id="51564" author="tpantelis" created="Tue, 4 Jul 2017 20:09:57 +0000"  >&lt;p&gt;I believe this was fixed a few months ago - also shouldn&apos;t be an issue with karaf 4.&lt;/p&gt;</comment>
                            <comment id="51565" author="vorburger" created="Wed, 5 Jul 2017 13:05:51 +0000"  >&lt;p&gt;&amp;gt; I believe this was fixed a few months ago&lt;/p&gt;

&lt;p&gt;yes; &lt;a href=&quot;https://git.opendaylight.org/gerrit/#/c/53341/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://git.opendaylight.org/gerrit/#/c/53341/&lt;/a&gt; removed the confusing WARN log.&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10000">
                    <name>Blocks</name>
                                                                <inwardlinks description="is blocked by">
                                        <issuelink>
            <issuekey id="22146">ODLPARENT-23</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                    </issuelinks>
                <attachments>
                            <attachment id="13591" name="karaf.log" size="209865" author="claudio.gasparini@pantheon.tech" created="Thu, 22 Sep 2016 14:59:51 +0000"/>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                                            <customfield id="customfield_11400" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummary">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                        <customfield id="customfield_10208" key="com.atlassian.jira.plugin.system.customfieldtypes:textfield">
                        <customfieldname>External issue ID</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>6787</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10201" key="com.atlassian.jira.plugin.system.customfieldtypes:url">
                        <customfieldname>External issue URL</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue><![CDATA[https://bugs.opendaylight.org/show_bug.cgi?id=6787]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <customfield id="customfield_10000" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0|i02r9r:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                </customfields>
    </item>
</channel>
</rss>