<!-- 
RSS generated by JIRA (8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d) at Wed Feb 07 19:55:44 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-1513] sal-akka-raft: separate Shard and RaftActor</title>
                <link>https://jira.opendaylight.org/browse/CONTROLLER-1513</link>
                <project id="10113" key="CONTROLLER">controller</project>
                    <description>&lt;p&gt;In our current implementation, RaftActor is an abstract class, which defines callbacks to its subclasses &amp;#8211; one of which is the Shard.&lt;/p&gt;

&lt;p&gt;This separation is not quite aligned with how services are decomposed in Akka and it creates tight coupling between the two components. That coupling is used for three things:&lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;RAFT state synchronization (i.e. RaftActor.isLeader())&lt;/li&gt;
	&lt;li&gt;data persistence, which is currently synchronous&lt;/li&gt;
	&lt;li&gt;shutdown synchronization&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;The first need can easily be satisfied by massaging between Shard and RaftActor. The second one is stickier, but as it turns out we want to make Shard persistence asynchronous anyway, hence it can be turned into messaging between parent and child actors. The third one can easily be solved by having Shard as the parent process, which requests handoff and shuts RaftActor (child) down once the handoff is completed.&lt;/p&gt;</description>
                <environment>&lt;p&gt;Operating System: All&lt;br/&gt;
Platform: All&lt;/p&gt;</environment>
        <key id="26067">CONTROLLER-1513</key>
            <summary>sal-akka-raft: separate Shard and RaftActor</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="10001">Won&apos;t Do</resolution>
                                        <assignee username="-1">Unassigned</assignee>
                                    <reporter username="rovarga">Robert Varga</reporter>
                        <labels>
                    </labels>
                <created>Mon, 25 Apr 2016 13:31:44 +0000</created>
                <updated>Tue, 25 Jul 2023 08:24:09 +0000</updated>
                            <resolved>Thu, 18 May 2017 14:16:14 +0000</resolved>
                                                                    <component>clustering</component>
                        <due></due>
                            <votes>0</votes>
                                    <watches>1</watches>
                                                                                                                <comments>
                            <comment id="51417" author="rovarga" created="Wed, 3 Aug 2016 01:17:40 +0000"  >&lt;p&gt;This will also fix a problem with Shard.applyState(): currently Shard.applyState() is called via an internal RaftActor message (ApplyState), which is enqueue on the shared actor.&lt;/p&gt;

&lt;p&gt;This holds information which is only accurate for as long as Shard remains a leader, but since the message is enqueued on the same mailbox as RaftRPCs are, by the time this message is processed the role may have changed to follower.&lt;/p&gt;

&lt;p&gt;Separating the actors will have the effect of ApplyState being processed on Shard&apos;s queue, hence Shard will be observing the same (leader) state, simply because any state-changing messages will remain queued behind it.&lt;/p&gt;</comment>
                            <comment id="51418" author="tpantelis" created="Thu, 18 May 2017 14:16:14 +0000"  >&lt;p&gt;State is now applied synchronously to fix a consistency issue with persisted snapshots w.r.t lastAppliedIndex and the actual applied state. Separating the actors would likely re-introduce this issue. Regardless, there&apos;s no compelling reason to separate the actors anymore and it would add considerable complexity and risk (and possibly performance degradation). The reason the idea was first put forth was to alleviate follower election timeouts if the Shard leader was busy processing transaction messages. However, this issue was alleviated by having the follower check the reachability of the leader in the akka cluster state on election timeout. Also, we could always add an actor that just does a keep-alive (I had prototyped this prior to going with the reachability check).&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10000">
                    <name>Blocks</name>
                                                                <inwardlinks description="is blocked by">
                                        <issuelink>
            <issuekey id="26044">CONTROLLER-1490</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="26066">CONTROLLER-1512</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                    </issuelinks>
                <attachments>
                    </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>5800</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=5800]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                            <customfield id="customfield_10206" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                        <customfieldname>Issue Type</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="10305"><![CDATA[Improvement]]></customfieldvalue>

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

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