<!-- 
RSS generated by JIRA (9.4.2#940002-sha1:46d1a51de284217efdcb32434eab47a99af2938b) at Mon Feb 12 04:28:33 CET 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>Magnolia - Issue tracker</title>
    <link>https://jira.magnolia-cms.com</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-uk</language>    <build-info>
        <version>9.4.2</version>
        <build-number>940002</build-number>
        <build-date>19-01-2023</build-date>
    </build-info>


<item>
            <title>[MAGNOLIA-7981] Optimise Registry definition access for high throughput</title>
                <link>https://jira.magnolia-cms.com/browse/MAGNOLIA-7981</link>
                <project id="10000" key="MAGNOLIA">Magnolia</project>
                    <description>&lt;h4&gt;&lt;a name=&quot;Problem&quot;&gt;&lt;/a&gt;Problem&lt;/h4&gt;
&lt;p&gt;Performance of our configuration registries may decrease in terms of throughput under heavy stress in a highly concurrent workload. The following aspects may lead to problems:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&amp;lt;major&amp;gt; eventual bottleneck - synchronisation locks in the &lt;tt&gt;RegistryMap&lt;/tt&gt; class. If an enormous amount of concurrent threads actively try to access the &lt;tt&gt;RegistryMap&lt;/tt&gt;, lot&apos;s of the requests will get blocked and delayed.&lt;/li&gt;
	&lt;li&gt;&amp;lt;minor&amp;gt; besides of concurrent locking each definition provider access will attempt to apply the registered decorators and validators. These operations at least cause a scan over the decorators and validators collections, usually rather small and negligible, which still could cause a constant overhead. (&lt;em&gt;* *&lt;b&gt;see a side note for more details&lt;/b&gt;&lt;/em&gt;)&lt;/li&gt;
	&lt;li&gt;&amp;lt;major&amp;gt; the easiest way to amplify the effect of the problem described in the first point is to invoke the &lt;tt&gt;AbstractRegistry#getAllProviders&lt;/tt&gt; API concurrently in all requests mentioned. Not only this would linearly increase the side effects of decoration and validation, it would largely increase the chance of a thread getting blocked: instead of using the &lt;tt&gt;RegistryMap#values&lt;/tt&gt; API once, we fetch the definition providers one by one (each call is a synchronised registry access).&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;&lt;b&gt;side note&lt;/b&gt;: decorators do cache the resulting state for a short period of time and never try to reapply themselves during it, exactly for throughput purposes, otherwise the overhead would include also the access and timestamp checks of the underlying resources.&lt;/p&gt;

&lt;h4&gt;&lt;a name=&quot;Countermeasures%3A&quot;&gt;&lt;/a&gt;Counter-measures:&lt;/h4&gt;
&lt;ul&gt;
	&lt;li&gt;The most tangible action is to optimise the &lt;tt&gt;#getAllProviders&lt;/tt&gt; performance - we should minimise the chance of blocking there, which would already reduce the risk of the thread blocking in the described conditions. Optimisation would involve copying the un-decorated and un-validate def providers in a separate collections with &lt;tt&gt;RegistryMap#values&lt;/tt&gt; and applying everything while iterating over it without additional blocking.&lt;/li&gt;
	&lt;li&gt;Consider possibility of making sure that the recently decorated/validated definitions are cached/memoized for some time (kind of pushing &lt;tt&gt;info.magnolia.config.registry.decoration.CachingDefinitionDecorator&lt;/tt&gt; one level up). This would reduce the complexity of a single definition provider access, although that actually has never been considered to be a big issue.&lt;/li&gt;
	&lt;li&gt;Consider a possibility of caching a set of resolved definitions on &quot;application level&quot;, much like we do in rest or content-types&apos; generated app do, reacting on registry events and definition dependencies.&lt;/li&gt;
&lt;/ul&gt;
</description>
                <environment></environment>
        <key id="95078">MAGNOLIA-7981</key>
            <summary>Optimise Registry definition access for high throughput</summary>
                <type id="3" iconUrl="https://jira.magnolia-cms.com/secure/viewavatar?size=xsmall&amp;avatarId=10898&amp;avatarType=issuetype">Task</type>
                                            <priority id="6" iconUrl="https://jira.magnolia-cms.com/images/icons/priorities/neutral.gif">Neutral</priority>
                        <status id="6" iconUrl="https://jira.magnolia-cms.com/images/icons/statuses/closed.png" description="The issue is considered finished, the resolution is correct. Issues which are not closed can be reopened.">Closed</status>
                    <statusCategory id="3" key="done" colorName="success"/>
                                    <resolution id="11">Done</resolution>
                                        <assignee username="apchelintcev">Aleksandr Pchelintcev</assignee>
                                    <reporter username="apchelintcev">Aleksandr Pchelintcev</reporter>
                        <labels>
                            <label>cs-bk</label>
                            <label>maintenance</label>
                            <label>performance</label>
                    </labels>
                <created>Wed, 20 Jan 2021 13:12:52 +0100</created>
                <updated>Mon, 29 Jan 2024 14:02:44 +0100</updated>
                            <resolved>Fri, 12 Feb 2021 10:15:14 +0100</resolved>
                                    <version>6.2.5</version>
                                    <fixVersion>6.2.7</fixVersion>
                                        <due></due>
                            <votes>0</votes>
                                    <watches>10</watches>
                                                    <progress percentage="100">
                                    <originalProgress>
                                                    <row percentage="0" backgroundColor="#89afd7"/>
                                                    <row percentage="100" backgroundColor="transparent"/>
                                            </originalProgress>
                                                    <currentProgress>
                                                    <row percentage="100" backgroundColor="#51a825"/>
                                                    <row percentage="0" backgroundColor="#ec8e00"/>
                                            </currentProgress>
                            </progress>
                                    <aggregateprogress percentage="100">
                                    <originalProgress>
                                                    <row percentage="0" backgroundColor="#89afd7"/>
                                                    <row percentage="100" backgroundColor="transparent"/>
                                            </originalProgress>
                                                    <currentProgress>
                                                    <row percentage="100" backgroundColor="#51a825"/>
                                                    <row percentage="0" backgroundColor="#ec8e00"/>
                                            </currentProgress>
                            </aggregateprogress>
                                                    <timespent seconds="52200">1d 6.5h</timespent>
                                <comments>
                            <comment id="247152" author="bandersen" created="Wed, 20 Jan 2021 13:54:49 +0100"  >&lt;p&gt;/cc &lt;a href=&quot;https://jira.magnolia-cms.com/secure/ViewProfile.jspa?name=tduffey&quot; class=&quot;user-hover&quot; rel=&quot;tduffey&quot;&gt;tduffey&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="250445" author="fgrilli" created="Fri, 12 Feb 2021 10:37:26 +0100"  >&lt;p&gt;&lt;a href=&quot;https://jira.magnolia-cms.com/secure/ViewProfile.jspa?name=mdrapela&quot; class=&quot;user-hover&quot; rel=&quot;mdrapela&quot;&gt;mdrapela&lt;/a&gt; &lt;a href=&quot;https://jira.magnolia-cms.com/secure/ViewProfile.jspa?name=akhamis&quot; class=&quot;user-hover&quot; rel=&quot;akhamis&quot;&gt;akhamis&lt;/a&gt; For the release notes: the main measures to counteract this were&lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;&lt;tt&gt;RegistryMap&lt;/tt&gt; no longer has synchronised methods and rather relies on &lt;tt&gt;ConcurrentHashMap&lt;/tt&gt;&lt;/li&gt;
	&lt;li&gt;Optimised implementation of &lt;tt&gt;AbstractRegistry#getAllProviders()&lt;/tt&gt;&lt;/li&gt;
&lt;/ul&gt;
</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10260">
                    <name>Git Code Review</name>
                                            <outwardlinks description="git code review opened">
                                        <issuelink>
            <issuekey id="95421">MAGNOLIA-7987</issuekey>
        </issuelink>
                            </outwardlinks>
                                                        </issuelinktype>
                            <issuelinktype id="10360">
                    <name>Problem/Incident</name>
                                            <outwardlinks description="causes">
                                                        </outwardlinks>
                                                        </issuelinktype>
                    </issuelinks>
                <attachments>
                            <attachment id="75431" name="0001-MAGNOLIA-7981-Avoid-calling-AbstractRegistry-getProv.patch" size="4564" author="fgrilli" created="Wed, 27 Jan 2021 11:08:13 +0100"/>
                            <attachment id="76859" name="6.2.7-snapshot-performance.png" size="70660" author="bandersen" created="Sat, 27 Feb 2021 12:21:04 +0100"/>
                            <attachment id="76860" name="hotfix-performance.png" size="31122" author="bandersen" created="Sat, 27 Feb 2021 12:22:24 +0100"/>
                            <attachment id="75526" name="new-0001-MAGNOLIA-7981-Avoid-calling-AbstractRegistry-getProv.patch" size="2550" author="fgrilli" created="Thu, 28 Jan 2021 18:20:37 +0100"/>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                                            <customfield id="customfield_14166" key="com.okapya.jira.checklist:checklist">
                        <customfieldname>Acceptance criteria</customfieldname>
                        <customfieldvalues>
                            
        <checklist>
        <![CDATA[
                            




                
                                    <div class="o-completion" style="display: flex; flex-shrink: 0;"><span  class="aui-lozenge aui-lozenge-complete" style="font-size: 12px; font-weight: normal; display: flex; flex-direction: row; align-items: center;" ><span style="padding-right: 4px; vertical-align: middle;"><svg width="15" height="15" viewBox="0 0 15 15" xmlns="http://www.w3.org/2000/svg" fill="white"><path clip-rule="evenodd" d="m10.41037,3.42544l-7.86501,0c-0.72395,0 -1.31084,0.58688 -1.31084,1.31084l0,7.86508c0,0.7239 0.58689,1.3108 1.31084,1.3108l7.86501,0c0.724,0 1.3109,-0.5869 1.3109,-1.3108l0,-7.86508c0,-0.72396 -0.5869,-1.31084 -1.3109,-1.31084zm-7.86501,-0.65542c-1.08593,0 -1.96626,0.88032 -1.96626,1.96626l0,7.86508c0,1.0859 0.88033,1.9662 1.96626,1.9662l7.86501,0c1.086,0 1.9663,-0.8803 1.9663,-1.9662l0,-7.86508c0,-1.08594 -0.8803,-1.96626 -1.9663,-1.96626l-7.86501,0z" fill-rule="evenodd"/><path d="m5.09049,10.18526l-1.82767,-1.82766l-0.78479,0.78479l2.61246,2.61246l5.38758,-5.38754l-0.78483,-0.78479l-4.60275,4.60274z"/></svg></span><span>Empty</span></span></div>
                        ]]>
    </checklist>


                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                <customfield id="customfield_10111" key="com.atlassian.jira.toolkit:reporterdomain">
                        <customfieldname>Company</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>magnolia-cms.com</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                <customfield id="customfield_10031" key="com.atlassian.jira.ext.charting:firstresponsedate">
                        <customfieldname>Date of First Response</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>Wed, 20 Jan 2021 13:54:49 +0100</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_12730" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummary">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_14151" key="com.atlassian.jira.toolkit:message">
                        <customfieldname>Docu info</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                            <customfield id="customfield_12130" key="com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes">
                        <customfieldname>Documentation update required</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="13300"><![CDATA[Yes]]></customfieldvalue>
    
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                    <customfield id="customfield_10246" key="com.pyxis.greenhopper.jira:gh-epic-link">
                        <customfieldname>Epic Link</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>MAGNOLIA-7993</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    <customfield id="customfield_10061" key="com.atlassian.jira.toolkit:lastusercommented">
                        <customfieldname>Last comm is not jira-dev</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>true</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10071" key="com.atlassian.jira.toolkit:lastupdaterorcommenter">
                        <customfieldname>Last participant</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>mduerig</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_13136" key="com.atlassian.jira.toolkit:LastCommentDate">
                        <customfieldname>Last public comment date</customfieldname>
                        <customfieldvalues>
                            3 years, 2 days ago
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                            <customfield id="customfield_10020" key="com.atlassian.jira.toolkit:attachments">
                        <customfieldname>Number of attachments</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>4.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10150" key="com.atlassian.jira.toolkit:comments">
                        <customfieldname>Number of comments</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>2.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_10011" key="com.atlassian.jira.toolkit:participants">
                        <customfieldname>Participants</customfieldname>
                        <customfieldvalues>
                                        <customfieldvalue>apchelintcev</customfieldvalue>
            <customfieldvalue>bandersen</customfieldvalue>
            <customfieldvalue>fgrilli</customfieldvalue>
    
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                <customfield id="customfield_10833" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0|y043rp:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10244" key="com.pyxis.greenhopper.jira:gh-global-rank">
                        <customfieldname>Rank (Obsolete)</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>9223372036854775807</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                        <customfield id="customfield_10220" key="com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes">
                        <customfieldname>Release notes required</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="10490"><![CDATA[Yes]]></customfieldvalue>
    
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_10245" key="com.pyxis.greenhopper.jira:gh-sprint">
                        <customfieldname>Sprint</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue id="1358">Maintenance 41</customfieldvalue>
    <customfieldvalue id="1364">Maintenance 42</customfieldvalue>
    <customfieldvalue id="1366">Maintenance 43</customfieldvalue>
    <customfieldvalue id="1374">Maintenance 44</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                            <customfield id="customfield_10242" key="com.atlassian.jira.plugin.system.customfieldtypes:float">
                        <customfieldname>Story Points</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>5.0</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                <customfield id="customfield_14167" key="com.okapya.jira.checklist:checklist">
                        <customfieldname>Task DoR</customfieldname>
                        <customfieldvalues>
                            
        <checklist>
        <![CDATA[
                            




                
                                    <div class="o-completion" style="display: flex; flex-shrink: 0;"><span  class="aui-lozenge aui-lozenge-complete" style="font-size: 12px; font-weight: normal; display: flex; flex-direction: row; align-items: center;" ><span style="padding-right: 4px; vertical-align: middle;"><svg width="15" height="15" viewBox="0 0 15 15" xmlns="http://www.w3.org/2000/svg" fill="white"><path clip-rule="evenodd" d="m10.41037,3.42544l-7.86501,0c-0.72395,0 -1.31084,0.58688 -1.31084,1.31084l0,7.86508c0,0.7239 0.58689,1.3108 1.31084,1.3108l7.86501,0c0.724,0 1.3109,-0.5869 1.3109,-1.3108l0,-7.86508c0,-0.72396 -0.5869,-1.31084 -1.3109,-1.31084zm-7.86501,-0.65542c-1.08593,0 -1.96626,0.88032 -1.96626,1.96626l0,7.86508c0,1.0859 0.88033,1.9662 1.96626,1.9662l7.86501,0c1.086,0 1.9663,-0.8803 1.9663,-1.9662l0,-7.86508c0,-1.08594 -0.8803,-1.96626 -1.9663,-1.96626l-7.86501,0z" fill-rule="evenodd"/><path d="m5.09049,10.18526l-1.82767,-1.82766l-0.78479,0.78479l2.61246,2.61246l5.38758,-5.38754l-0.78483,-0.78479l-4.60275,4.60274z"/></svg></span><span>Empty</span></span></div>
                        ]]>
    </checklist>


                        </customfieldvalues>
                    </customfield>
                                                                                                                                                    <customfield id="customfield_14145" key="com.intenso.jira.issue-templates:issue-templates-customfield">
                        <customfieldname>Template</customfieldname>
                        <customfieldvalues>
                            


                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                            <customfield id="customfield_15131" key="com.onresolve.jira.groovy.groovyrunner:scripted-field">
                        <customfieldname>Time in Discovery</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10032" key="com.atlassian.jira.ext.charting:timeinstatus">
                        <customfieldname>Time in Status</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                            <customfield id="customfield_13933" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                        <customfieldname>Urgency (resolution)</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="15724"><![CDATA[Normal]]></customfieldvalue>

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