<!-- 
RSS generated by JIRA (8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d) at Wed Feb 07 19:56:56 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-1988] Migrate from akka persistence to a custom solution</title>
                <link>https://jira.opendaylight.org/browse/CONTROLLER-1988</link>
                <project id="10113" key="CONTROLLER">controller</project>
                    <description>&lt;p&gt;We need to move to akka typed due to message chunking. During this it would be helpfull&lt;br/&gt;
 if we could also migrate away from akka persistence as it does not match our usecase completely.&lt;/p&gt;

&lt;p&gt;RaftActor.persistData() has synchronous callback from akka persistence&lt;br/&gt;
 seems like we should be able to get rid of this by transforming the&lt;br/&gt;
 callback from persistence into a message, notifying the RaftActor&lt;br/&gt;
 that persistence has completed for a given entry.&lt;br/&gt;
 We could potentially switch mailbox implementation to&lt;br/&gt;
 UnboundedStablePriorityMailbox in RaftActor to give the&lt;br/&gt;
 replies faster turn around time after an entry has been persisted&lt;br/&gt;
 so commit of an entry is not blocked by other messages.&lt;/p&gt;

&lt;p&gt;There is another bunch of direct calls to handleApplyState().&lt;br/&gt;
 On the leader they are triggered from the persistence callback above.&lt;br/&gt;
 We should be able to move the execution of these to the new message&lt;br/&gt;
 from persistence outlined above, while still keeping the direct call&lt;br/&gt;
 in (with CheckConsensusReached or Replicate messages) in the execution&lt;br/&gt;
 of the new message from persistence.&lt;/p&gt;

&lt;p&gt;On follower we end up calling handleApplyState() as part of handleAppendEntries()&lt;br/&gt;
 (from applyLogToStateMachine()) execution, this should stay as is as we &lt;br/&gt;
 want to apply an entry as soon as we can and not introduce a potential delay.&lt;/p&gt;

&lt;p&gt;The only time handleApplyState() is handled asynchronously, is in the PreLeader&lt;br/&gt;
 state where its used to check whether all entries from previous term were commited&lt;br/&gt;
 and switches behavior to Leader.&lt;/p&gt;

&lt;p&gt;Delete of entries from the journal and snapshot is needed as well.&lt;br/&gt;
 Both are needed during snapshotiting for old journal entries or old snapshots.&lt;br/&gt;
 ie: DataPersistenceProvider.deleteMessages() is used in RaftActorRecoverySupport&lt;br/&gt;
 and SnapshotManager to delete journal after snapshot has been saved.&lt;br/&gt;
 DataPersistenceProvider.deleteSnapshots() is used in SnapshotManager to delete&lt;br/&gt;
 old snapshots after a snapshot has been saved.&lt;/p&gt;

&lt;p&gt;Apart from the replacement of synchronous callback, it looks like the switch&lt;br/&gt;
 should be relatively painless and the majority of time spent needs to&lt;br/&gt;
 happen on akka-persistence replacement(atomix.io?) and rewriting to akka typed.&lt;/p&gt;

&lt;p&gt;&#160;&lt;/p&gt;</description>
                <environment></environment>
        <key id="34217">CONTROLLER-1988</key>
            <summary>Migrate from akka persistence to a custom solution</summary>
                <type id="10100" iconUrl="https://jira.opendaylight.org/secure/viewavatar?size=xsmall&amp;avatarId=10310&amp;avatarType=issuetype">Improvement</type>
                                            <priority id="3" iconUrl="https://jira.opendaylight.org/images/icons/priorities/major.svg">Medium</priority>
                        <status id="1" iconUrl="https://jira.opendaylight.org/images/icons/statuses/open.png" description="The issue is open and ready for the assignee to start work on it.">Open</status>
                    <statusCategory id="2" key="new" colorName="blue-gray"/>
                                    <resolution id="-1">Unresolved</resolution>
                                        <assignee username="tcere">Tomas Cere</assignee>
                                    <reporter username="tcere">Tomas Cere</reporter>
                        <labels>
                    </labels>
                <created>Tue, 20 Jul 2021 09:03:09 +0000</created>
                <updated>Wed, 21 Jul 2021 12:30:46 +0000</updated>
                                                                                <due></due>
                            <votes>0</votes>
                                    <watches>1</watches>
                                                                                                                        <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_10000" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0|i03ywn:</customfieldvalue>

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