<!-- 
RSS generated by JIRA (9.4.14#940014-sha1:734e6822bbf0d45eff9af51f82432957f73aa32c) at Sat Feb 10 02:16:47 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-8351] ptlrpc_import_delay_req() refuses to delay blocking asts when import is not in LUSTRE_IMP_FULL yet</title>
                <link>https://jira.whamcloud.com/browse/LU-8351</link>
                <project id="10000" key="LU">Lustre</project>
                    <description>&lt;p&gt;ptlrpc_import_delay_req() refuses to delay blocking asts when import&lt;br/&gt;
is not in LUSTRE_IMP_FULL yet. That leads to client eviction assuming&lt;br/&gt;
that it failed to respond.&lt;/p&gt;

&lt;p&gt;Solution: allow delays for blocking asts being resent.&lt;/p&gt;</description>
                <environment></environment>
        <key id="37895">LU-8351</key>
            <summary>ptlrpc_import_delay_req() refuses to delay blocking asts when import is not in LUSTRE_IMP_FULL yet</summary>
                <type id="1" iconUrl="https://jira.whamcloud.com/secure/viewavatar?size=xsmall&amp;avatarId=11303&amp;avatarType=issuetype">Bug</type>
                                            <priority id="3" iconUrl="https://jira.whamcloud.com/images/icons/priorities/major.svg">Major</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="green">Oleg Drokin</assignee>
                                    <reporter username="artem_blagodarenko">Artem Blagodarenko</reporter>
                        <labels>
                            <label>patch</label>
                    </labels>
                <created>Wed, 29 Jun 2016 13:05:15 +0000</created>
                <updated>Sat, 17 Dec 2016 14:12:17 +0000</updated>
                            <resolved>Sat, 17 Dec 2016 14:12:17 +0000</resolved>
                                                    <fixVersion>Lustre 2.10.0</fixVersion>
                                        <due></due>
                            <votes>0</votes>
                                    <watches>5</watches>
                                                                            <comments>
                            <comment id="157258" author="gerrit" created="Wed, 29 Jun 2016 13:19:15 +0000"  >&lt;p&gt;Artem Blagodarenko (artem.blagodarenko@seagate.com) uploaded a new patch: &lt;a href=&quot;http://review.whamcloud.com/21065&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://review.whamcloud.com/21065&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-8351&quot; title=&quot;ptlrpc_import_delay_req() refuses to delay blocking asts when import is not in LUSTRE_IMP_FULL yet&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-8351&quot;&gt;&lt;del&gt;LU-8351&lt;/del&gt;&lt;/a&gt; ptlrpc: allow blocking asts to be delayed&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: 44dc760a25d313cd96f9dbd5071ff6018326eae6&lt;/p&gt;</comment>
                            <comment id="161089" author="vsaveliev" created="Mon, 8 Aug 2016 11:09:04 +0000"  >&lt;blockquote&gt;
&lt;p&gt;Was it considered that the alternative is the server is stuck waiting for a lock from unavailable client for a long time?&lt;br/&gt;
What&apos;s the plan there?&lt;br/&gt;
Before the patch: Send AST, once there is timeout, retry a few more times, then evict client.&lt;br/&gt;
Now: Try to send AST, it gets blocked... wait...? (for how long) and then what?&lt;br/&gt;
What if the client never reappears, are we waiting for it to be evicted by the ping evictor or something?&lt;br/&gt;
What about all the other clients that could get blocked on this lock meanwhile?&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;I believe that all the above will remain as it is now.&lt;/p&gt;

&lt;p&gt;The only situation the patch is to address arises when a server handles reconnect from a client and when there is blocking ast for that client to be resend.&lt;/p&gt;

&lt;p&gt;The server enters target_handle_connect() and eventually rev_import_reconnect(), where the reverse import is set to LUSTRE_IMP_RECOVER, and then ptlrpc_import_recovery_state_machine() is called to do resends.&lt;br/&gt;
ptlrpc_resend() sets rq_resend flag for each request on the sending list and wakeup corresponding ptlrpc_check_set-s. Then the import state is set to LUSTRE_IMP_FULL. &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-keyword&quot;&gt;if&lt;/span&gt; (imp-&amp;gt;imp_state == LUSTRE_IMP_RECOVER) {
                struct ptlrpc_connection *conn = imp-&amp;gt;imp_connection;

                rc = ptlrpc_resend(imp);
                &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (rc)
                        GOTO(out, rc);
                IMPORT_SET_STATE(imp, LUSTRE_IMP_FULL);
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;There is a import&#8217;s lock race window between ptlrpc_resend() and IMPORT_SET_STATE(imp, LUSTRE_IMP_FULL).&lt;br/&gt;
If awaken ptlrpc_set_check()&amp;#45;&amp;gt;ptlrpc_import_delay_req() locks the import before import&#8217;s state gets set to LUSTRE_IMP_FULL, it sees req-&amp;gt;rq_send_state != imp-&amp;gt;imp_state and sets *status to -EWOULDBLOCK(-EAGAIN).  &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-keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (req-&amp;gt;rq_send_state != imp-&amp;gt;imp_state) {
                &lt;span class=&quot;code-comment&quot;&gt;/* invalidate in progress - any requests should be drop */&lt;/span&gt;
                &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (atomic_read(&amp;amp;imp-&amp;gt;imp_inval_count) != 0) {
                        DEBUG_REQ(D_ERROR, req, &lt;span class=&quot;code-quote&quot;&gt;&quot;invalidate in flight&quot;&lt;/span&gt;);
                        *status = -EIO;
                } &lt;span class=&quot;code-keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;code-keyword&quot;&gt;if&lt;/span&gt; (imp-&amp;gt;imp_dlm_fake || req-&amp;gt;rq_no_delay) {
                        *status = -EWOULDBLOCK;
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;After that the request goes to interpret state and ldlm_handle_ast_error()&amp;#45;&amp;gt;ldlm_failed_ast() evicts the client as req-&amp;gt;rq_status is -EAGAIN.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Also, the import on the server is not a real import, so how could it be non-full?&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;The server is handling reconnect. The state of the reverse import is changed in rev_import_reconnect().&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;this probably needs an interop check too? I.e. the change is on the server, but we always run with client scriptss, so we need to ensure the server has this fix before running this test?&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;I do not know. The test is attached just to illustrate the problem. If you would like older servers testing to not fail you might want to just add the test to exception list.&lt;/p&gt;</comment>
                            <comment id="178189" author="gerrit" created="Sat, 17 Dec 2016 05:36:12 +0000"  >&lt;p&gt;Oleg Drokin (oleg.drokin@intel.com) merged in patch &lt;a href=&quot;https://review.whamcloud.com/21065/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/21065/&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-8351&quot; title=&quot;ptlrpc_import_delay_req() refuses to delay blocking asts when import is not in LUSTRE_IMP_FULL yet&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-8351&quot;&gt;&lt;del&gt;LU-8351&lt;/del&gt;&lt;/a&gt; ptlrpc: allow blocking asts to be delayed&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: &lt;br/&gt;
Commit: bde948c9cf11793d8e7fef59ea2a10bb2d684bf6&lt;/p&gt;</comment>
                            <comment id="178242" author="pjones" created="Sat, 17 Dec 2016 14:12:17 +0000"  >&lt;p&gt;Landed for 2.10&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10010">
                    <name>Duplicate</name>
                                                                <inwardlinks description="is duplicated by">
                                                        </inwardlinks>
                                    </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|hzyg67:</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>