<!-- 
RSS generated by JIRA (9.4.14#940014-sha1:734e6822bbf0d45eff9af51f82432957f73aa32c) at Sat Feb 10 03:30:19 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>Whamcloud Community JIRA</title>
    <link>https://jira.whamcloud.com</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-us</language>    <build-info>
        <version>9.4.14</version>
        <build-number>940014</build-number>
        <build-date>05-12-2023</build-date>
    </build-info>


<item>
            <title>[LU-16823] add LNet and OBD connect flags for IPv6 peers</title>
                <link>https://jira.whamcloud.com/browse/LU-16823</link>
                <project id="10000" key="LU">Lustre</project>
                    <description>&lt;p&gt;When nodes are connecting to peers the sender should set a bit in the connection that it supports IPv6 (large) NIDs.  This would inform LNet discovery whether it is safe to reply with large NIDs during connection or ping replies.&lt;/p&gt;

&lt;p&gt;At the Lustre level new clients should set an &lt;tt&gt;OBD_CONNECT2_LARGE_NID=0x100000000ULL&lt;/tt&gt; flag in &lt;tt&gt;obd_connect_data&lt;/tt&gt; so that the MGS knows whether it can safely reply with large NIDs in &lt;tt&gt;mgs_nidtbl_entry&lt;/tt&gt;.   That avoids the need to backport a patch (ala &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13306&quot; title=&quot;allow clients to accept mgs_nidtbl_entry with IPv6 NIDs&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13306&quot;&gt;&lt;del&gt;LU-13306&lt;/del&gt;&lt;/a&gt;) to allow old clients to mount a server with both IPv4 and IPv6 NIDs configured.  &lt;/p&gt;</description>
                <environment></environment>
        <key id="76021">LU-16823</key>
            <summary>add LNet and OBD connect flags for IPv6 peers</summary>
                <type id="4" iconUrl="https://jira.whamcloud.com/secure/viewavatar?size=xsmall&amp;avatarId=11310&amp;avatarType=issuetype">Improvement</type>
                                            <priority id="4" iconUrl="https://jira.whamcloud.com/images/icons/priorities/minor.svg">Minor</priority>
                        <status id="5" iconUrl="https://jira.whamcloud.com/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="success"/>
                                    <resolution id="1">Fixed</resolution>
                                        <assignee username="simmonsja">James A Simmons</assignee>
                                    <reporter username="adilger">Andreas Dilger</reporter>
                        <labels>
                            <label>IPv6</label>
                    </labels>
                <created>Thu, 11 May 2023 19:26:49 +0000</created>
                <updated>Sun, 7 Jan 2024 18:14:34 +0000</updated>
                            <resolved>Wed, 3 Jan 2024 14:23:39 +0000</resolved>
                                                    <fixVersion>Lustre 2.16.0</fixVersion>
                                        <due></due>
                            <votes>0</votes>
                                    <watches>4</watches>
                                                                            <comments>
                            <comment id="372010" author="adilger" created="Thu, 11 May 2023 19:27:57 +0000"  >&lt;p&gt;I haven&apos;t looked into all of the details here, but this would potentially allow a better alternative to patching old clients to ignore large NIDs.&lt;/p&gt;</comment>
                            <comment id="375766" author="simmonsja" created="Sat, 17 Jun 2023 22:29:18 +0000"  >&lt;p&gt;&lt;a href=&quot;https://review.whamcloud.com/#/c/fs/lustre-release/+/51108&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/#/c/fs/lustre-release/+/51108&lt;/a&gt; covers the goal of this ticket.&lt;/p&gt;</comment>
                            <comment id="375964" author="simmonsja" created="Tue, 20 Jun 2023 13:42:33 +0000"  >&lt;p&gt;While 51108 landed we do need one more patch here to communicate that the MGS supports large NIDs.&lt;/p&gt;</comment>
                            <comment id="376049" author="adilger" created="Wed, 21 Jun 2023 03:16:34 +0000"  >&lt;p&gt;James, adding the handling for the &lt;tt&gt;OBD_CONNECT2_LARGE_NID&lt;/tt&gt; feature is relatively straight forward:&lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;the 51108 patch has already handled the mechanics of adding a new connect flag (definition, wiretest/wirecheck, &lt;tt&gt;obd_connect_names[]&lt;/tt&gt;, etc.)&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;When the client and MGS support for handling large NIDs is finished, a patch should be pushed that:&lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;adds this flag to &lt;tt&gt;data-&amp;gt;ocd_connect_flags2&lt;/tt&gt; on the client when they are connecting to the MGS (and possibly MDS and OSS, not sure)&lt;/li&gt;
	&lt;li&gt;adds this flag to &lt;tt&gt;MGS_CONNECT_SUPPORTED2&lt;/tt&gt; (and &lt;tt&gt;MDS_CONNECT_SUPPORTED2&lt;/tt&gt; and &lt;tt&gt;OSS_CONNECT_SUPPORTED2&lt;/tt&gt; if needed)&lt;/li&gt;
	&lt;li&gt;the old MGS will mask off &lt;tt&gt;OBD_CONNECT2_LARGE_NID&lt;/tt&gt; in the reply to new clients, because it is not in the old &lt;tt&gt;MGS_CONNECT_SUPPORTED2&lt;/tt&gt;&lt;/li&gt;
	&lt;li&gt;the new MGS will reply with &lt;tt&gt;OBD_CONNECT2_LARGE_NID&lt;/tt&gt; to clients that send it&lt;/li&gt;
	&lt;li&gt;the MGS can check this on client exports to determine if they support large NIDs, as needed&lt;/li&gt;
	&lt;li&gt;clients can check this to determine if the MGS supports large NIDs, as needed&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;We don&apos;t want to land the &quot;supported&quot; patch until the code is (substantially) working, otherwise a client/server might advertise their support for this feature, but not actually work yet.&lt;/p&gt;</comment>
                            <comment id="385331" author="simmonsja" created="Fri, 8 Sep 2023 19:19:20 +0000"  >&lt;p&gt;I was looking at adding the final touches for this work and I found one place its not a easy replacement. For lmv_setup() we call LNetGetId() which only gets small size NIDs. I don&apos;t see an easy way to get the connect flag here.&#160; Any suggestions? Should we move to another setup function that has an export as a parameter?&lt;/p&gt;</comment>
                            <comment id="385341" author="adilger" created="Fri, 8 Sep 2023 20:40:37 +0000"  >&lt;p&gt;James, are you referring to this hunk of code to initialize the &lt;tt&gt;lmv_qos_rr_index&lt;/tt&gt; starting value:&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;
        /*
         * initialize rr_index to lower 32bit of netid, so that client
         * can distribute subdirs evenly from the beginning.
         */
        &lt;span class=&quot;code-keyword&quot;&gt;while&lt;/span&gt; (LNetGetId(i++, &amp;amp;lnet_id, &lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;) != -ENOENT) {
                &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (!nid_is_lo0(&amp;amp;lnet_id.nid)) {
                        lmv-&amp;gt;lmv_qos_rr_index = ntohl(lnet_id.nid.nid_addr[0]);
                        &lt;span class=&quot;code-keyword&quot;&gt;break&lt;/span&gt;;
                }
        }
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;That code doesn&apos;t really need to have the full NID.  The main goal is that each client is initialized in some way to a well-balanced starting value (instead of 0) so that clients don&apos;t all start creating subdirectories on MDT0000 and go in lockstep across MDTs.  Using the NID is deterministic and likely gives us a more uniform distribution compared to a purely random number, because it normally only changes the low bits among nearby clients in a single job.  It could use any other kind of  value that is slowly changing for each client, but it would need to be available early during the mount process.&lt;/p&gt;

&lt;p&gt;I don&apos;t know if IPv6 NIDs have the same property or not, or if they have too much &quot;random&quot; stuff in them that they may be wildly imbalanced?&lt;/p&gt;

&lt;p&gt;We could potentially have the MDS assign each client a sequential &quot;client number&quot; for this purpose in the mount reply, but that might be imbalanced for clients that are allocated into the same job because it would only &quot;globally&quot; be uniform (though still better than a purely random number).&lt;/p&gt;

&lt;p&gt;In any case, the &lt;tt&gt;lmv_qos_rr_index&lt;/tt&gt; doesn&apos;t have to be perfect, as it drifts over time anyway, but it avoids the &quot;thundering herd&quot; problem at initial mount time.&lt;/p&gt;

&lt;p&gt;A similar solution is needed for &lt;tt&gt;lmv_select_statfs_mdt()&lt;/tt&gt; to select an MDT to send &lt;tt&gt;MDS_STATFS&lt;/tt&gt; RPCs to:&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-comment&quot;&gt;/* choose initial MDT &lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;code-keyword&quot;&gt;this&lt;/span&gt; client */&lt;/span&gt;
        &lt;span class=&quot;code-keyword&quot;&gt;for&lt;/span&gt; (i = 0;; i++) {
                struct lnet_processid lnet_id;
                &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (LNetGetId(i, &amp;amp;lnet_id, &lt;span class=&quot;code-keyword&quot;&gt;false&lt;/span&gt;) == -ENOENT)
                        &lt;span class=&quot;code-keyword&quot;&gt;break&lt;/span&gt;;
                        
                &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (!nid_is_lo0(&amp;amp;lnet_id.nid)) {
                        /* We dont need a full 64-bit modulus, just enough
                         * to distribute the requests across MDTs evenly.
                         */
                        lmv-&amp;gt;lmv_statfs_start = nidhash(&amp;amp;lnet_id.nid) %
                                                lmv-&amp;gt;lmv_mdt_count;
                        &lt;span class=&quot;code-keyword&quot;&gt;break&lt;/span&gt;;
                }     
        }
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;and it probably makes sense that these both use the same mechanism instead of fetching the NIDs each time.&lt;/p&gt;</comment>
                            <comment id="385521" author="simmonsja" created="Mon, 11 Sep 2023 18:56:24 +0000"  >&lt;p&gt;Then tendency is for IPv6 to be very random in an network. Need to think about a solution for this. Looking at lmv_setup() its processing an lcfg that contains a lmv_desc. Perhaps we can in mgs_llog.c create a record for lmv_desc with new info for the index to be used?&lt;/p&gt;</comment>
                            <comment id="396168" author="gerrit" created="Sun, 10 Dec 2023 14:57:22 +0000"  >&lt;p&gt;&quot;James Simmons &amp;lt;jsimmons@infradead.org&amp;gt;&quot; uploaded a new patch: &lt;a href=&quot;https://review.whamcloud.com/c/fs/lustre-release/+/53398&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/c/fs/lustre-release/+/53398&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-16823&quot; title=&quot;add LNet and OBD connect flags for IPv6 peers&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-16823&quot;&gt;&lt;del&gt;LU-16823&lt;/del&gt;&lt;/a&gt; lustre: test if large nid is support&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: 64bc4ffbff2c8a6927f8c9474887a32ec528e1b9&lt;/p&gt;</comment>
                            <comment id="398373" author="gerrit" created="Wed, 3 Jan 2024 03:03:45 +0000"  >&lt;p&gt;&quot;Oleg Drokin &amp;lt;green@whamcloud.com&amp;gt;&quot; merged in patch &lt;a href=&quot;https://review.whamcloud.com/c/fs/lustre-release/+/53398/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/c/fs/lustre-release/+/53398/&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-16823&quot; title=&quot;add LNet and OBD connect flags for IPv6 peers&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-16823&quot;&gt;&lt;del&gt;LU-16823&lt;/del&gt;&lt;/a&gt; lustre: test if large nid is support&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: &lt;br/&gt;
Commit: 165cf78ab54e6e8d172f999940c62afabc043cd5&lt;/p&gt;</comment>
                            <comment id="398418" author="simmonsja" created="Wed, 3 Jan 2024 14:23:39 +0000"  >&lt;p&gt;Work is complete&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10011">
                    <name>Related</name>
                                            <outwardlinks description="is related to ">
                                        <issuelink>
            <issuekey id="13182">LU-10391</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="58213">LU-13306</issuekey>
        </issuelink>
                            </outwardlinks>
                                                        </issuelinktype>
                    </issuelinks>
                <attachments>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                                                                                                                                                            <customfield id="customfield_10890" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummary">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_10390" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>1|i03l7b:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10090" key="com.pyxis.greenhopper.jira:gh-global-rank">
                        <customfieldname>Rank (Obsolete)</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>9223372036854775807</customfieldvalue>
                        </customfieldvalues>
                    </customfield>
                                                                                            <customfield id="customfield_10060" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                        <customfieldname>Severity</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="10022"><![CDATA[3]]></customfieldvalue>

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