<!-- 
RSS generated by JIRA (8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d) at Wed Feb 07 19:13:59 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>[BGPCEP-740] BGP Best route selection not as expected when MED is present in the route</title>
                <link>https://jira.opendaylight.org/browse/BGPCEP-740</link>
                <project id="10108" key="BGPCEP">bgpcep</project>
                    <description>&lt;p&gt;The BGP Best path selection in ODL is as follows:&lt;/p&gt;

&lt;p&gt;1. prefer path with accessible next-hop&lt;br/&gt;
 2. prefer path with higher LOCAL_PREF&lt;br/&gt;
 3. prefer learned path (all paths are leaned by controller)&lt;br/&gt;
 4. prefer the path with the shortest AS_PATH.&lt;br/&gt;
 5. prefer the path with the lowest origin type&lt;br/&gt;
 6. prefer the path with the lowest multi-exit discriminator (MED)&lt;br/&gt;
 7. prefer eBGP over iBGP paths&lt;br/&gt;
 8. Prefer the path with the lowest IGP metric to the BGP next hop.&lt;br/&gt;
 9. When both paths are external, prefer the path that was received first (the oldest one).&lt;br/&gt;
 10. Prefer the route that comes from the BGP router with the lowest router ID.&lt;/p&gt;

&lt;p&gt;So when ODL learns same prefix from 2 different iBGP routers and all path attributes above are identical, the&#160;routes tie-break at step 10 above, meaning that preferred route is the one coming from lower router ID.&lt;/p&gt;

&lt;p&gt;This actually works as long as MED is not present in the routes. If same, for example MED=0 (default) is present in the routes, then preferred route is the one coming from higher router ID. This seems like a bug because both scenarios no MED or having same MED should resolve in the route with lower router ID.&lt;/p&gt;

&lt;p&gt;See ODL printouts from BGP deployment:&lt;/p&gt;

&lt;p&gt;1) Prefix learned from 10.100.16.161 in adj-rib-in:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;
{
&lt;span class=&quot;code-quote&quot;&gt;&quot;route-key&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;WAAA/egAAP3qZBUg&quot;&lt;/span&gt;,
&lt;span class=&quot;code-quote&quot;&gt;&quot;label-stack&quot;&lt;/span&gt;: [
{
&lt;span class=&quot;code-quote&quot;&gt;&quot;label-value&quot;&lt;/span&gt;: 17
}
],
&lt;span class=&quot;code-quote&quot;&gt;&quot;route-distinguisher&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;0:65000:65002&quot;&lt;/span&gt;,
&lt;span class=&quot;code-quote&quot;&gt;&quot;prefix&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;100.21.32.0/20&quot;&lt;/span&gt;,
&lt;span class=&quot;code-quote&quot;&gt;&quot;attributes&quot;&lt;/span&gt;: {
&lt;span class=&quot;code-quote&quot;&gt;&quot;as-path&quot;&lt;/span&gt;: {
&lt;span class=&quot;code-quote&quot;&gt;&quot;segments&quot;&lt;/span&gt;: [
{
&lt;span class=&quot;code-quote&quot;&gt;&quot;as-sequence&quot;&lt;/span&gt;: [
65002
]
}
]
},
&lt;span class=&quot;code-quote&quot;&gt;&quot;extended-communities&quot;&lt;/span&gt;: [
{
&lt;span class=&quot;code-quote&quot;&gt;&quot;route-target-extended-community&quot;&lt;/span&gt;: {
&lt;span class=&quot;code-quote&quot;&gt;&quot;global-administrator&quot;&lt;/span&gt;: 65000,
&lt;span class=&quot;code-quote&quot;&gt;&quot;local-administrator&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;AAD96g==&quot;&lt;/span&gt;
},
&lt;span class=&quot;code-quote&quot;&gt;&quot;transitive&quot;&lt;/span&gt;: &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;
},
{
&lt;span class=&quot;code-quote&quot;&gt;&quot;route-origin-ipv4&quot;&lt;/span&gt;: {
&lt;span class=&quot;code-quote&quot;&gt;&quot;global-administrator&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;169.254.2.2&quot;&lt;/span&gt;,
&lt;span class=&quot;code-quote&quot;&gt;&quot;local-administrator&quot;&lt;/span&gt;: 1
},
&lt;span class=&quot;code-quote&quot;&gt;&quot;transitive&quot;&lt;/span&gt;: &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;
}
],
&lt;span class=&quot;code-quote&quot;&gt;&quot;multi-exit-disc&quot;&lt;/span&gt;: {
&lt;span class=&quot;code-quote&quot;&gt;&quot;med&quot;&lt;/span&gt;: 0
},
&lt;span class=&quot;code-quote&quot;&gt;&quot;ipv4-next-hop&quot;&lt;/span&gt;: {
&lt;span class=&quot;code-quote&quot;&gt;&quot;global&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;10.100.16.161&quot;&lt;/span&gt;
},
&lt;span class=&quot;code-quote&quot;&gt;&quot;local-pref&quot;&lt;/span&gt;: {
&lt;span class=&quot;code-quote&quot;&gt;&quot;pref&quot;&lt;/span&gt;: 100
},
&lt;span class=&quot;code-quote&quot;&gt;&quot;origin&quot;&lt;/span&gt;: {
&lt;span class=&quot;code-quote&quot;&gt;&quot;value&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;igp&quot;&lt;/span&gt;
}
}
}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&#160;&lt;/p&gt;

&lt;p&gt;2) Same prefix learned from 10.100.16.162 in adj-rib-in:&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;
{
&lt;span class=&quot;code-quote&quot;&gt;&quot;route-key&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;WAAA/egAAP3qZBUg&quot;&lt;/span&gt;,
&lt;span class=&quot;code-quote&quot;&gt;&quot;label-stack&quot;&lt;/span&gt;: [
{
&lt;span class=&quot;code-quote&quot;&gt;&quot;label-value&quot;&lt;/span&gt;: 16
}
],
&lt;span class=&quot;code-quote&quot;&gt;&quot;route-distinguisher&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;0:65000:65002&quot;&lt;/span&gt;,
&lt;span class=&quot;code-quote&quot;&gt;&quot;prefix&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;100.21.32.0/20&quot;&lt;/span&gt;,
&lt;span class=&quot;code-quote&quot;&gt;&quot;attributes&quot;&lt;/span&gt;: {
&lt;span class=&quot;code-quote&quot;&gt;&quot;as-path&quot;&lt;/span&gt;: {
&lt;span class=&quot;code-quote&quot;&gt;&quot;segments&quot;&lt;/span&gt;: [
{
&lt;span class=&quot;code-quote&quot;&gt;&quot;as-sequence&quot;&lt;/span&gt;: [
65002
]
}
]
},
&lt;span class=&quot;code-quote&quot;&gt;&quot;extended-communities&quot;&lt;/span&gt;: [
{
&lt;span class=&quot;code-quote&quot;&gt;&quot;route-target-extended-community&quot;&lt;/span&gt;: {
&lt;span class=&quot;code-quote&quot;&gt;&quot;global-administrator&quot;&lt;/span&gt;: 65000,
&lt;span class=&quot;code-quote&quot;&gt;&quot;local-administrator&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;AAD96g==&quot;&lt;/span&gt;
},
&lt;span class=&quot;code-quote&quot;&gt;&quot;transitive&quot;&lt;/span&gt;: &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;
},
{
&lt;span class=&quot;code-quote&quot;&gt;&quot;route-origin-ipv4&quot;&lt;/span&gt;: {
&lt;span class=&quot;code-quote&quot;&gt;&quot;global-administrator&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;169.254.2.2&quot;&lt;/span&gt;,
&lt;span class=&quot;code-quote&quot;&gt;&quot;local-administrator&quot;&lt;/span&gt;: 1
},
&lt;span class=&quot;code-quote&quot;&gt;&quot;transitive&quot;&lt;/span&gt;: &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;
}
],
&lt;span class=&quot;code-quote&quot;&gt;&quot;multi-exit-disc&quot;&lt;/span&gt;: {
&lt;span class=&quot;code-quote&quot;&gt;&quot;med&quot;&lt;/span&gt;: 0
},
&lt;span class=&quot;code-quote&quot;&gt;&quot;ipv4-next-hop&quot;&lt;/span&gt;: {
&lt;span class=&quot;code-quote&quot;&gt;&quot;global&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;10.100.16.162&quot;&lt;/span&gt;
},
&lt;span class=&quot;code-quote&quot;&gt;&quot;local-pref&quot;&lt;/span&gt;: {
&lt;span class=&quot;code-quote&quot;&gt;&quot;pref&quot;&lt;/span&gt;: 100
},
&lt;span class=&quot;code-quote&quot;&gt;&quot;origin&quot;&lt;/span&gt;: {
&lt;span class=&quot;code-quote&quot;&gt;&quot;value&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;igp&quot;&lt;/span&gt;
}
}
}&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&#160; &#160; &#160;&lt;/p&gt;

&lt;p&gt;3) Prefix shown in loc-rib is the one with higher router ID (10.100.16.162):&lt;/p&gt;
&lt;div class=&quot;code panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;codeContent panelContent&quot;&gt;
&lt;pre class=&quot;code-java&quot;&gt;
{
&lt;span class=&quot;code-quote&quot;&gt;&quot;route-key&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;WAAA/egAAP3qZBUg&quot;&lt;/span&gt;,
&lt;span class=&quot;code-quote&quot;&gt;&quot;label-stack&quot;&lt;/span&gt;: [
{
&lt;span class=&quot;code-quote&quot;&gt;&quot;label-value&quot;&lt;/span&gt;: 16
}
],
&lt;span class=&quot;code-quote&quot;&gt;&quot;route-distinguisher&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;0:65000:65002&quot;&lt;/span&gt;,
&lt;span class=&quot;code-quote&quot;&gt;&quot;prefix&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;100.21.32.0/20&quot;&lt;/span&gt;,
&lt;span class=&quot;code-quote&quot;&gt;&quot;attributes&quot;&lt;/span&gt;: {
&lt;span class=&quot;code-quote&quot;&gt;&quot;as-path&quot;&lt;/span&gt;: {
&lt;span class=&quot;code-quote&quot;&gt;&quot;segments&quot;&lt;/span&gt;: [
{
&lt;span class=&quot;code-quote&quot;&gt;&quot;as-sequence&quot;&lt;/span&gt;: [
65002
]
}
]
},
&lt;span class=&quot;code-quote&quot;&gt;&quot;extended-communities&quot;&lt;/span&gt;: [
{
&lt;span class=&quot;code-quote&quot;&gt;&quot;route-target-extended-community&quot;&lt;/span&gt;: {
&lt;span class=&quot;code-quote&quot;&gt;&quot;global-administrator&quot;&lt;/span&gt;: 65000,
&lt;span class=&quot;code-quote&quot;&gt;&quot;local-administrator&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;AAD96g==&quot;&lt;/span&gt;
},
&lt;span class=&quot;code-quote&quot;&gt;&quot;transitive&quot;&lt;/span&gt;: &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;
},
{
&lt;span class=&quot;code-quote&quot;&gt;&quot;route-origin-ipv4&quot;&lt;/span&gt;: {
&lt;span class=&quot;code-quote&quot;&gt;&quot;global-administrator&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;169.254.2.2&quot;&lt;/span&gt;,
&lt;span class=&quot;code-quote&quot;&gt;&quot;local-administrator&quot;&lt;/span&gt;: 1
},
&lt;span class=&quot;code-quote&quot;&gt;&quot;transitive&quot;&lt;/span&gt;: &lt;span class=&quot;code-keyword&quot;&gt;true&lt;/span&gt;
}
],
&lt;span class=&quot;code-quote&quot;&gt;&quot;multi-exit-disc&quot;&lt;/span&gt;: {
&lt;span class=&quot;code-quote&quot;&gt;&quot;med&quot;&lt;/span&gt;: 0
},
&lt;span class=&quot;code-quote&quot;&gt;&quot;ipv4-next-hop&quot;&lt;/span&gt;: {
&lt;span class=&quot;code-quote&quot;&gt;&quot;global&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;10.100.16.162&quot;&lt;/span&gt;
},
&lt;span class=&quot;code-quote&quot;&gt;&quot;local-pref&quot;&lt;/span&gt;: {
&lt;span class=&quot;code-quote&quot;&gt;&quot;pref&quot;&lt;/span&gt;: 100
},
&lt;span class=&quot;code-quote&quot;&gt;&quot;origin&quot;&lt;/span&gt;: {
&lt;span class=&quot;code-quote&quot;&gt;&quot;value&quot;&lt;/span&gt;: &lt;span class=&quot;code-quote&quot;&gt;&quot;igp&quot;&lt;/span&gt;
}
}
}&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&#160;&lt;/p&gt;

&lt;p&gt;In the above example if MED is removed from the routes, then&#160;the route&#160;coming from&#160;lower router ID&#160;(10.100.16.161) is installed in loc-rib. Also note this behavior is observed in Carbon but it may happen in all branches as I believe there is no change in the best selection algorithm for a while.&lt;/p&gt;</description>
                <environment></environment>
        <key id="29056">BGPCEP-740</key>
            <summary>BGP Best route selection not as expected when MED is present in the route</summary>
                <type id="10104" iconUrl="https://jira.opendaylight.org/secure/viewavatar?size=xsmall&amp;avatarId=10303&amp;avatarType=issuetype">Bug</type>
                                            <priority id="3" iconUrl="https://jira.opendaylight.org/images/icons/priorities/major.svg">Medium</priority>
                        <status id="10004" iconUrl="https://jira.opendaylight.org/images/icons/status_generic.gif" description="">Verified</status>
                    <statusCategory id="3" key="done" colorName="green"/>
                                    <resolution id="10000">Done</resolution>
                                        <assignee username="ajayslele">Ajay Lele</assignee>
                                    <reporter username="ecelgp">Luis Gomez</reporter>
                        <labels>
                    </labels>
                <created>Wed, 10 Jan 2018 01:09:44 +0000</created>
                <updated>Wed, 18 Apr 2018 10:52:55 +0000</updated>
                            <resolved>Thu, 5 Apr 2018 07:20:31 +0000</resolved>
                                    <version>Fluorine</version>
                    <version>Nitrogen</version>
                    <version>Carbon</version>
                    <version>Oxygen</version>
                                    <fixVersion>Fluorine</fixVersion>
                    <fixVersion>Nitrogen</fixVersion>
                    <fixVersion>Carbon</fixVersion>
                    <fixVersion>Oxygen</fixVersion>
                                    <component>BGP</component>
                        <due></due>
                            <votes>0</votes>
                                    <watches>3</watches>
                                                                                                                <comments>
                            <comment id="62013" author="ajayslele" created="Mon, 2 Apr 2018 22:05:42 +0000"  >&lt;p&gt;master:&#160;&lt;a href=&quot;https://git.opendaylight.org/gerrit/#/c/70257/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://git.opendaylight.org/gerrit/#/c/70257/&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="62054" author="cdgasparini" created="Wed, 4 Apr 2018 16:09:51 +0000"  >&lt;p&gt;Hi,&#160;&lt;/p&gt;

&lt;p&gt;I&apos;ll say that for equal paths and present MED, latest path gets selected as new best path, independently of the router-id,and as you mentioned it shouldn&apos;t.&lt;/p&gt;

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

&lt;p&gt;&lt;a href=&quot;https://jira.opendaylight.org/secure/ViewProfile.jspa?name=ajayslele&quot; class=&quot;user-hover&quot; rel=&quot;ajayslele&quot;&gt;ajayslele&lt;/a&gt; I added a test coverage for your patch, and I did a small change. If you are ok with them, and you could test it, add +1, and I&apos;ll merge it.&lt;/p&gt;

&lt;p&gt;Aside from that, for equal path advertizement,&#160;the first advertized will be keep as best path independently of the router ID.&#160;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://jira.opendaylight.org/secure/ViewProfile.jspa?name=ecelgp&quot; class=&quot;user-hover&quot; rel=&quot;ecelgp&quot;&gt;ecelgp&lt;/a&gt; not sure if you expect that Router Id should be taken in consideration.&lt;/p&gt;

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

&lt;p&gt;Regards,&#160;&lt;/p&gt;</comment>
                            <comment id="62055" author="ecelgp" created="Wed, 4 Apr 2018 16:26:40 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.opendaylight.org/secure/ViewProfile.jspa?name=cdgasparini&quot; class=&quot;user-hover&quot; rel=&quot;cdgasparini&quot;&gt;cdgasparini&lt;/a&gt;, I am not sure I full follow your comment but my expectation is for ODL to implement the tie-break rules at the top of the ticket, meaning that in case of 1-9 match, 10 can be used to select best path.&lt;/p&gt;</comment>
                            <comment id="62056" author="ajayslele" created="Wed, 4 Apr 2018 18:23:57 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.opendaylight.org/secure/ViewProfile.jspa?name=cdgasparini&quot; class=&quot;user-hover&quot; rel=&quot;cdgasparini&quot;&gt;cdgasparini&lt;/a&gt; I agree with what &lt;a href=&quot;https://jira.opendaylight.org/secure/ViewProfile.jspa?name=ecelgp&quot; class=&quot;user-hover&quot; rel=&quot;ecelgp&quot;&gt;ecelgp&lt;/a&gt; said that router ID should be used as tie-breaker at the end if everything else is same. And that&apos;s how the existing code behaves if I understand correctly. My patch causes&#160;the decision making using MED comparison to happen only when the values are not equal, so that premature decision is not made when the MED values are equal.&lt;/p&gt;</comment>
                            <comment id="62081" author="cdgasparini" created="Thu, 5 Apr 2018 07:20:13 +0000"  >&lt;p&gt;Hi all,&lt;/p&gt;

&lt;p&gt;my fault, I wasn&apos;t sure if the Router Id was taken in account or if the path from the first peer(independently if the router ID) on advertize the path was&#160;taken as the best path.&#160;I just wanted to ensure that the patch was tested and it was doing what it was expected. &lt;a href=&quot;https://jira.opendaylight.org/secure/ViewProfile.jspa?name=ajayslele&quot; class=&quot;user-hover&quot; rel=&quot;ajayslele&quot;&gt;ajayslele&lt;/a&gt; I understand from your comments that you tested it, so I merged the patch. Sorry if I brought some confusion.&lt;/p&gt;

&lt;p&gt;Regards&lt;/p&gt;</comment>
                            <comment id="62092" author="ajayslele" created="Thu, 5 Apr 2018 16:09:26 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.opendaylight.org/secure/ViewProfile.jspa?name=cdgasparini&quot; class=&quot;user-hover&quot; rel=&quot;cdgasparini&quot;&gt;cdgasparini&lt;/a&gt; Yes I had tested my version of the patch (patch-set 1). The change you have proposed (patch-set 2) works differently and I don&apos;t think that is how we want the behavior to be, when MED values are equal.&lt;/p&gt;

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

&lt;p&gt;Logic in patch-set 1:&lt;/p&gt;

&lt;p&gt;If MED values are equal, do not take decision (i.e. don&apos;t return) from the isExistingPathBetter() method, and let rest of the conditions decide which is the better path.&lt;/p&gt;

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

&lt;p&gt;Logic in patch-set 2:&lt;/p&gt;

&lt;p&gt;If MED values are equal, specify that existing path is better (i.e. return true) from method isExistingPathBetter(). So if existing path has higher router ID, it is retained, which is not correct.&lt;/p&gt;</comment>
                            <comment id="62093" author="cdgasparini" created="Thu, 5 Apr 2018 16:55:06 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.opendaylight.org/secure/ViewProfile.jspa?name=ajayslele&quot; class=&quot;user-hover&quot; rel=&quot;ajayslele&quot;&gt;ajayslele&lt;/a&gt;&#160;&lt;/p&gt;

&lt;p&gt;checking&#160;it from gerrit, I think both logics do the same, I&apos;ll double check it tomorrow. But&lt;/p&gt;

&lt;p&gt;Logic in patch-set 1:&#160;&lt;/p&gt;

&lt;p&gt;If MED values are equal, do not take decision, is the last check then it goes to the end of the method where true is returned.&#160;&lt;/p&gt;</comment>
                            <comment id="62150" author="cdgasparini" created="Fri, 6 Apr 2018 06:41:02 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.opendaylight.org/secure/ViewProfile.jspa?name=ajayslele&quot; class=&quot;user-hover&quot; rel=&quot;ajayslele&quot;&gt;ajayslele&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Based on your comments on patch&lt;/p&gt;

&lt;p&gt;&quot;Since the rest of the steps* are essentially no-op right now, you are right, both approaches produce same result. But this* can change in future, so I prefer returning from right place for the right reason.&quot;&lt;/p&gt;

&lt;p&gt;Based on code annotation&lt;/p&gt;

&lt;p&gt;&#160;// 6. prefer the path with the lowest multi-exit discriminator (MED)&lt;/p&gt;

&lt;p&gt;If MED of new path is lower than the present one, then new path is better. Therefore Logic 2&#160;is in &quot;right place for the right reason.&quot;, MED.&lt;/p&gt;

&lt;p&gt;If you&#160;want to ensure that any future code change&#160;would not&#160;affect result&#160;on such scenario, the best way is to implement a test covering it.&#160;&lt;/p&gt;

&lt;p&gt;Please provide such covering test, and I&apos;ll merge it.&lt;/p&gt;

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

&lt;p&gt;&#160;&lt;/p&gt;</comment>
                            <comment id="62212" author="ajayslele" created="Fri, 6 Apr 2018 21:00:19 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.opendaylight.org/secure/ViewProfile.jspa?name=cdgasparini&quot; class=&quot;user-hover&quot; rel=&quot;cdgasparini&quot;&gt;cdgasparini&lt;/a&gt; - comment inline &lt;span class=&quot;error&quot;&gt;&amp;#91;AJAY&amp;#93;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&amp;#8212;&lt;/p&gt;

&lt;p&gt;Based on your comments on patch&lt;/p&gt;

&lt;p&gt;&quot;Since the rest of the steps* are essentially no-op right now, you are right, both approaches produce same result. But this* can change in future, so I prefer returning from right place for the right reason.&quot;&lt;/p&gt;

&lt;p&gt;Based on code annotation&lt;/p&gt;

&lt;p&gt;&#160;// 6. prefer the path with the lowest multi-exit discriminator (MED)&lt;/p&gt;

&lt;p&gt;If MED of new path is lower than the present one, then new path is better. Therefore Logic 2&#160;is in &quot;right place for the right reason.&quot;, MED.&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;error&quot;&gt;&amp;#91;AJAY&amp;#93;&lt;/span&gt; But now the check is &amp;gt;= i.e. it will hit if both MED values are same, not just when one value is lower than the other&lt;/p&gt;</comment>
                            <comment id="62216" author="cdgasparini" created="Fri, 6 Apr 2018 22:08:06 +0000"  >&lt;p&gt;Header of the method&lt;/p&gt;

&lt;p&gt;&#160; &#160; &#160;* @return true if the existing path is better, false if the new path is better&lt;/p&gt;

&lt;p&gt;if MED are = then new path is not better, therefore we keep the actual best path.&#160;&lt;/p&gt;

&lt;p&gt;If you still&#160;don&apos;t like it, push the change again with the covering test and I ll merge it. Both keep doing the same, but we different approach.&lt;/p&gt;

&lt;p&gt;Regards,&#160;&lt;/p&gt;</comment>
                    </comments>
                    <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|i039en:</customfieldvalue>

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