<!-- 
RSS generated by JIRA (8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d) at Wed Feb 07 20:34:00 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>[OPNFLWPLUG-1026] OFP should proactively check and fix flow table on nodes</title>
                <link>https://jira.opendaylight.org/browse/OPNFLWPLUG-1026</link>
                <project id="10155" key="OPNFLWPLUG">OpenFlowPlugin</project>
                    <description>&lt;p&gt;If an OVS node is somehow missing a flow that should exist on the switch, currently OFP does not try to proactively fix the issue by reprogramming the flow on the switch. OFP should periodically read all of the flows and groups on the switch and reprogram them if something is missing.&lt;/p&gt;</description>
                <environment></environment>
        <key id="30321">OPNFLWPLUG-1026</key>
            <summary>OFP should proactively check and fix flow table on nodes</summary>
                <type id="10100" iconUrl="https://jira.opendaylight.org/secure/viewavatar?size=xsmall&amp;avatarId=10310&amp;avatarType=issuetype">Improvement</type>
                                            <priority id="2" iconUrl="https://jira.opendaylight.org/images/icons/priorities/critical.svg">High</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="-1">Unassigned</assignee>
                                    <reporter username="trozet">Tim Rozet</reporter>
                        <labels>
                            <label>neon-release</label>
                    </labels>
                <created>Wed, 11 Jul 2018 20:06:27 +0000</created>
                <updated>Mon, 27 Sep 2021 09:46:55 +0000</updated>
                                            <version>Oxygen</version>
                                                    <component>forwardingrules-manager</component>
                        <due></due>
                            <votes>0</votes>
                                    <watches>4</watches>
                                                                                                                <comments>
                            <comment id="64014" author="vishnoianil@gmail.com" created="Wed, 11 Jul 2018 21:01:54 +0000"  >&lt;p&gt;Installing and removing the flow from device is application&apos;s scope. Openflowplugin can&apos;t assume that the flow is intentionally removed (assuming some external infrastructure in place is also sharing the switch for some reason) or it was accidently removed from the switch. Whenever a flow is getting removed, it will be removed from the operational data store, so application will get notification about the flow removal. This is an event for application to take an action on, and they can decide what action they want to take.&lt;/p&gt;

&lt;p&gt;So having this functionality in built to the openflowplugin&#160;southbound driver itself is not a right solution, but this functionality can be implemented using an application on top of openflowplugin (like other application -frm, lldp etc), so that user can enable it if they need this functionality. We are happy to receive any contribution regarding this kind of application. Also just to Note : it will require statistics to be enabled in the openflowplugin.&lt;/p&gt;</comment>
                            <comment id="64015" author="trozet@redhat.com" created="Wed, 11 Jul 2018 21:27:55 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.opendaylight.org/secure/ViewProfile.jspa?name=Avishnoi&quot; class=&quot;user-hover&quot; rel=&quot;Avishnoi&quot;&gt;Avishnoi&lt;/a&gt; thanks for your response. I&apos;m somewhat confused as to who is responsible here for ensuring the flows are correct in the switch. My thought process was (take the netvirt scenario) that netvirt would configure some flows in the oper DS to be programmed on the switches. OFP would then read these and program them into the switch. At this point if somehow a flow is deleted on the switch, what netvirt had asked to be programmed hasn&apos;t changed, so shouldn&apos;t it be OFP job to fix the problem? It sounds like you are saying that the notification that the switch has lost a flow should be punted to the netvirt and he decides what to do. To me it would seem like netvirt should just describe what should be in the switches, and then the southbound handler should ensure it exists and they stay configured as described.&lt;/p&gt;

&lt;p&gt;To your first point I think you can assume the flow needs to be reprogrammed, regardless of if it was removed accidentally or intentionally. The purpose of assigning ODL as the controller of the switch gives ODL complete control over the flow programming. This is how other OF controllers work like BigSwitch or NEC. If you remove a flow on the switch, it reprograms it immediately.&lt;/p&gt;</comment>
                            <comment id="64050" author="thapar" created="Mon, 16 Jul 2018 06:22:56 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.opendaylight.org/secure/ViewProfile.jspa?name=Avishnoi&quot; class=&quot;user-hover&quot; rel=&quot;Avishnoi&quot;&gt;Avishnoi&lt;/a&gt; This is issue with Netvirt that uses FRM. Expectation is that applications write flows to ConfigDS and then OFP takes over. Here we&apos;re seeing flow is added to and present in FRM, but missing from switches. So not a case of flow missing, but flow never showing up. Netvir today doesn&apos;t even track operational flows. If it were using RPCs, it would make sense.&lt;/p&gt;

&lt;p&gt;In other words, this is a bug in -frm. Doesn&apos;t that count as part of OFP?&lt;/p&gt;</comment>
                            <comment id="64692" author="vishnoianil@gmail.com" created="Mon, 20 Aug 2018 20:55:27 +0000"  >&lt;p&gt;I am not sure what is the real ask here. There are two scenarios where flow won&apos;t be present in the switch&lt;/p&gt;

&lt;p&gt;(1) When user configured the flow/group, FRM failed to install the flow/group properly on the switch ( normal installation, or while reconciliation).&lt;/p&gt;

&lt;p&gt;(2) Flow was installed properly by openflowplugin, but removed by external entity (user, other application sharing switch etc).&lt;/p&gt;

&lt;p&gt;FRM is responsible for (1) and it should take care of proper programming of the flow/groups. There has been many improvement is been done in this area. So if you are hitting some issue where flow/group is correct, but plugin is not installing the flow, please report that specific issue with error message.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://git.opendaylight.org/gerrit/73531&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://git.opendaylight.org/gerrit/73531&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://git.opendaylight.org/gerrit/71090&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://git.opendaylight.org/gerrit/71090&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://git.opendaylight.org/gerrit/70184&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://git.opendaylight.org/gerrit/70184&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&#160;&lt;/p&gt;

&lt;p&gt;Retry mechanism is something that make sense for (2) only and (2) is something that can be usecase specific as well. So just enforcing a common rule of re-installing&#160; flow/group whenever it&apos;s missing from operational might not go well with all the usecases. So that&apos;s where i was suggesting to implement this as a new feature in the FRM, where user can enable it if it really needs that feature.&lt;/p&gt;</comment>
                            <comment id="64693" author="vishnoianil@gmail.com" created="Mon, 20 Aug 2018 21:31:16 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.opendaylight.org/secure/ViewProfile.jspa?name=trozet&quot; class=&quot;user-hover&quot; rel=&quot;trozet&quot;&gt;trozet&lt;/a&gt; As you mentioned above, ODL as a controller has a complete control over the flow programming, than the question is how the flow is deleted from the switch? It means someone externally deleted the flow from switch (probably intentionally (attack) or accidentally (admin&apos;s mistake) . In the production environment both of these scenarios are &lt;b&gt;critical&lt;/b&gt; to be notified to the application and the default action of re-installing the flow/group is not a recommended approach because you are probably ignoring the possible network attack, so we can&apos;t assume reprogramming as a default action in this case. That&apos;s the reason this feature needs to be implemented in a way that user can enable it if they want it, so the application who don&apos;t care about any external system removing flows/groups from their controlled switches (like netvirt) can enable this feature by default, but application who wants to take action in these scenarios (like isolate&#160; switch and avoid any programming on the switch as it might be compromised), can keep it disabled.&lt;/p&gt;

&lt;p&gt;&#160;&lt;/p&gt;</comment>
                            <comment id="64694" author="thapar" created="Tue, 21 Aug 2018 06:00:02 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.opendaylight.org/secure/ViewProfile.jspa?name=Avishnoi&quot; class=&quot;user-hover&quot; rel=&quot;Avishnoi&quot;&gt;Avishnoi&lt;/a&gt; Agree, we&apos;re mainly talking about (1) here. The issues we&apos;ve seen mostly end up being about flow in FRM not pushed due to leader election being in progress. this mostly happens during bring up, restart or when due to other reasons there is ask timeout and leader re-election kicks in.&lt;/p&gt;

&lt;p&gt;For 2, though we don&apos;t have use cases for external entities currently, do agree a config parameter to enable/disable this functionality would be good way.&lt;/p&gt;

&lt;p&gt;I believe &lt;a href=&quot;https://jira.opendaylight.org/browse/OPNFLWPLUG-1028&quot; class=&quot;external-link&quot; rel=&quot;nofollow&quot;&gt;https://jira.opendaylight.org/browse/OPNFLWPLUG-1028&lt;/a&gt; addresses a part of it. Arun mentions a proper fix for OPENFLWPLUG-1028 in Neon. I think a proper fix for 1028 should address bulk of issues that require this. If we can prioritize a proper redesign/fix for it, it would help.&lt;/p&gt;

&lt;p&gt;I think retry mechanism would help as a failsafe mechanism. Just like 1028, there might be other such corner cases where a flow can miss being programmed, not to mention bugs in fixes that are coming in or already in. We can&apos;t assume that we&apos;ve fixed all possible scenarios where (1) can occur and having option for retry would help avoid data plane failures for such scenarios.&lt;/p&gt;</comment>
                            <comment id="64696" author="vishnoianil@gmail.com" created="Tue, 21 Aug 2018 08:25:11 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.opendaylight.org/browse/OPNFLWPLUG-1028&quot; title=&quot;Table Miss Entry failed to program in 3 node netvirt CSIT&quot; class=&quot;issue-link&quot; data-issue-key=&quot;OPNFLWPLUG-1028&quot;&gt;&lt;del&gt;OPNFLWPLUG-1028&lt;/del&gt;&lt;/a&gt; is something we are targeting for Neon.&lt;/p&gt;

&lt;p&gt;Yes, agree that having a retry mechanism is useful. Currently we have the functionality that user/application can use to trigger the device reconciliation, but there is no service that does this automatically for user.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://docs.opendaylight.org/projects/openflowplugin/en/stable-oxygen/specs/reconciliation-cli.html&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://docs.opendaylight.org/projects/openflowplugin/en/stable-oxygen/specs/reconciliation-cli.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My initial comment was not against the functionality, but moreover where it should be implemented (application level - like FRM or new application) and it should be configurable. As of now i can think of following configuration parameter that we can provide &lt;/p&gt;

&lt;p&gt;(1) Enable / disable service&lt;/p&gt;

&lt;p&gt;(2) Retry interval (periodic interval this service should trigger the synchronization for each device, if it&apos;s set to 0, it will be triggered on each statistics cycle). Syncing on each statistics cycle can have performance issue, so we need to provide interval so that user can configure it as per their environment and scale.&lt;/p&gt;

&lt;p&gt;(3) How many attempt it should make to install the missing flows (because in case user install wrong flow, you don&apos;t want sync service to keep firing the flow-mod in every iteration).&lt;/p&gt;

&lt;p&gt;(4) It should remove the flow if it&apos;s present in operational datastore but not in config datastore? (Unknown flow installed by someone externally), also how many statistics cycle do we want to wait for this flow to be removed (ideally 2)&lt;/p&gt;

&lt;p&gt;Probably some more might come up during development phase.&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10003">
                    <name>Relates</name>
                                            <outwardlinks description="relates to">
                                        <issuelink>
            <issuekey id="30333">OPNFLWPLUG-1028</issuekey>
        </issuelink>
                            </outwardlinks>
                                                        </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_10000" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0|i03gpj:</customfieldvalue>

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