<!-- 
RSS generated by JIRA (9.4.14#940014-sha1:734e6822bbf0d45eff9af51f82432957f73aa32c) at Sat Feb 10 02:40:16 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-11023] OST Pool Quotas</title>
                <link>https://jira.whamcloud.com/browse/LU-11023</link>
                <project id="10000" key="LU">Lustre</project>
                    <description>&lt;p&gt;OST (or MDT) pool feature enables users to group OSTs together to make object placement more flexible which is a very useful mechanism for system management. However the pool support of quota is not completed now which limits the use of it. Luckily current quota framework is really powerful and flexible which makes it possible to add new extension.&lt;/p&gt;</description>
                <environment></environment>
        <key id="52249">LU-11023</key>
            <summary>OST Pool Quotas</summary>
                <type id="2" iconUrl="https://jira.whamcloud.com/secure/viewavatar?size=xsmall&amp;avatarId=11311&amp;avatarType=issuetype">New Feature</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="scherementsev">Sergey Cheremencev</assignee>
                                    <reporter username="adilger">Andreas Dilger</reporter>
                        <labels>
                            <label>DoM2</label>
                            <label>FLR2</label>
                    </labels>
                <created>Wed, 16 May 2018 02:43:14 +0000</created>
                <updated>Tue, 30 May 2023 15:17:04 +0000</updated>
                            <resolved>Thu, 14 May 2020 13:46:33 +0000</resolved>
                                                    <fixVersion>Lustre 2.14.0</fixVersion>
                                        <due></due>
                            <votes>0</votes>
                                    <watches>26</watches>
                                                                            <comments>
                            <comment id="227941" author="adilger" created="Wed, 16 May 2018 02:55:59 +0000"  >&lt;p&gt;I&apos;ve created a new issue for tracking pool quota, or possibly OST/MDT quota, since &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-4017&quot; title=&quot;Add project quota support feature&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-4017&quot;&gt;&lt;del&gt;LU-4017&lt;/del&gt;&lt;/a&gt; was used for Project Quota and closed.  There are lots of good discussions in that ticket on this feature.&lt;/p&gt;

&lt;p&gt;Having the ability to put separate quotas on OSTs/MDTs (either directly or via pools) is important for production deployment of both Data-on-MDT to limit space usage on MDTs, as well as FLR for burst-buffer implementation to limit usage on flash OSTs.  I&apos;m not fixed on linking this quota to OST pools since there are some complexities there, and we&apos;d also want to have MDT pools for that to be useful for DoM, but I think some kind of limits are needed for these use cases.&lt;/p&gt;</comment>
                            <comment id="232764" author="nrutman" created="Wed, 29 Aug 2018 20:02:56 +0000"  >&lt;p&gt;The design doc seems to have a problematic concept: a new EA with the &quot;pool the object belongs to&quot;. The &lt;em&gt;OST&lt;/em&gt;&#160;belongs to a pool (or pools), but the &lt;em&gt;object&lt;/em&gt;&#160;does not belong to a pool itself. Or put another way, all objects on the OST belong to same set of pools that the OST belongs to. I guess the original idea in the doc was to try to make OST pools &quot;look like&quot; directory quotas by setting a new pool per directory, and so can&apos;t handle a single object in more than one pool. If we drop this idea, then we can drastically simplify the pool quotas design.&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;Don&apos;t need EA for each object.&lt;/li&gt;
	&lt;li&gt;OSTs don&apos;t need to know which pool they are part of.&lt;/li&gt;
	&lt;li&gt;Don&apos;t need to send pool configuration or changes to OSTs.&#160;&lt;/li&gt;
	&lt;li&gt;Don&apos;t need to hash pool names.&lt;/li&gt;
	&lt;li&gt;All pool knowledge remains local to MDS.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Why all that? Because all the handling of pool quotas can be confined to the quota master on the MDS. The OSTs just continue to request a single user or group quota from quota master. The master knows which pool(s) the OST is a member of, and just checks the quota for each pool, returning the minimum remaining amount for that OST to the slave.&#160;&lt;/p&gt;

&lt;p&gt;E.g. for this case&lt;br/&gt;
 &lt;tt&gt;lfs setquota --block-hardlimit 2097152 -u user1 -p flash /mnt/lustre&lt;/tt&gt;&lt;br/&gt;
 &lt;tt&gt;lfs setquota --block-hardlimit 2097152 -u user2 -p flash /mnt/lustre&lt;/tt&gt;&lt;br/&gt;
 &lt;tt&gt;lfs setquota --block-hardlimit 2097152 -u user1 /mnt/lustre&lt;/tt&gt;&lt;/p&gt;

&lt;p&gt;there would be 4 quotas files created (2 per pool): admin_quotafile.usr, admin_quotafile.grp, admin_quotafile.usr.flash, admin_quotafile.grp.flash. For a quota acq request from an OST in the flash pool, the MDS would check all four files and return the minimal amount remaining. For an OST not in the flash pool, it would not check the .flash quotafiles.&lt;/p&gt;

&lt;p&gt;The more pools we have, the more quotafiles, and so quota checks will go incrementally slower, but I think this is acceptable.&lt;/p&gt;

&lt;p&gt;So after two hours of looking into this, I think this should be relatively easy to do. Am I missing something?&lt;br/&gt;
 &#160;&lt;/p&gt;</comment>
                            <comment id="232782" author="adilger" created="Thu, 30 Aug 2018 02:53:12 +0000"  >&lt;p&gt;It would be great if you are going to implement this feature.  This is one of the major gaps for tiered storage being really usable within Lustre.  If we have e.g. flash OSTs in the filesystem there is currently no way to exclude them from regular usage (e.g. if someone creates files without specifying a pool).&lt;/p&gt;

&lt;p&gt;Typically, the flash OSTs will also be smaller than the disk OSTs, so they will also fill up more quickly.  Having the object allocator tied into pool quotas will ensure that the flash OSTs are skipped when a user doesn&apos;t have any remaining quota there, or was never given any in the first place.  While the MDS allocation-time decision is not going to prevent all abuses (e.g. user creates a million small files in the flash pool, then tries to write lots of data into each one) it will at least avoid the majority of such issues.&lt;/p&gt;

&lt;p&gt;Conveniently, the &quot;default quota&quot; functionality (&lt;a href=&quot;https://jira.whamcloud.com/browse/LU-7816&quot; title=&quot;Add default quota setting support for Lustre&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-7816&quot;&gt;&lt;del&gt;LU-7816&lt;/del&gt;&lt;/a&gt;) was just landed to 2.12, so proper integration with this should allow admins to configure (if they want) &quot;by default users have no quota/X quota on the flash pool&quot; instead of having to explicitly configure this for all users on all pools.&lt;/p&gt;

&lt;p&gt;Nathan, would you be able to write up a revised design doc that explains your proposed solution.  It should include some reasonable use cases (in particular the tiered storage case with a flash OST pool and a disk OST pool that allows users some limited amount of space in the flash pool that can be time-limited to a short time like 24h).  There also needs to be consideration on how the quota tools will be able to specify the quota limits and how this will integrate into the allocator on the MDS.&lt;/p&gt;</comment>
                            <comment id="232819" author="nrutman" created="Thu, 30 Aug 2018 17:21:27 +0000"  >&lt;p&gt;It&apos;s on Cray&apos;s short list for implementation (Cray ticket LUS-5801). We considered including pool quotas in allocator decisions, but came to the conclusion that we should not: it was the user&apos;s decision to use this pool; it&apos;s not really the MDS&apos;s role to second-guess and use a different pool that what it was told.&#160;&lt;/p&gt;

&lt;p&gt;In any case, I&apos;d prefer to get the pool quotas restrictions first (in this ticket), then consider the allocator changes as a follow-on. (Frankly, I think the allocator is in bad need of a complete rewrite in any case.)&lt;/p&gt;</comment>
                            <comment id="236714" author="spitzcor" created="Fri, 9 Nov 2018 02:54:44 +0000"  >&lt;p&gt;I&apos;ve added this LU to &lt;a href=&quot;http://wiki.lustre.org/Projects.&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://wiki.lustre.org/Projects.&lt;/a&gt;&#160;&#160;@sergey from Cray will be picking this up within the next month.&lt;/p&gt;</comment>
                            <comment id="237840" author="nrutman" created="Mon, 3 Dec 2018 15:51:23 +0000"  >&lt;p&gt;A design question:&lt;/p&gt;

&lt;p&gt;When destroying a pool, does it make more sense to destroy all associated pool quota settings, or retain them in case the pool is recreated?&lt;/p&gt;

&lt;p&gt;&#160;&lt;/p&gt;</comment>
                            <comment id="237872" author="spitzcor" created="Mon, 3 Dec 2018 22:10:28 +0000"  >&lt;p&gt;What&apos;s the case for keeping them? &#160;If it is to make the user&apos;s life easier if/when a pool is recreated&#160;just give the user a tool to save the config. &#160;Remember, the system will still have to do some re-accounting when the quotas are respecified.&lt;/p&gt;

&lt;p&gt;&#160;&lt;/p&gt;</comment>
                            <comment id="237892" author="adilger" created="Tue, 4 Dec 2018 06:06:50 +0000"  >&lt;p&gt;Cory, I think there are two separate issues here.  There is the pool &lt;em&gt;usage&lt;/em&gt; accounting, which is just based on the per-OST quota accounting, and is not accounted on a per-pool basis.  There is a separate pool &lt;em&gt;limit&lt;/em&gt; file, which is what the administrator specifies for each user (e.g. adilger gets 1TB in the &lt;tt&gt;flash&lt;/tt&gt; pool), which contains potentially a lot of custom information and does not necessarily become stale when the pool name is removed.&lt;/p&gt;

&lt;p&gt;Given that the pool quota files are probably going to be relatively small, I&apos;m not against keeping them if the pool is removed, so long as there is some way to &lt;em&gt;actually&lt;/em&gt; delete the quota limits.  Otherwise, I foresee that some admin will have a problem with their pool quota file, try to remove the pool and recreate it, and not be able to resolve their problem.&lt;/p&gt;</comment>
                            <comment id="239037" author="sergey" created="Fri, 21 Dec 2018 19:54:51 +0000"  >&lt;p&gt;Hello !&lt;br/&gt;
I would like to discuss OST pools and Quota pools interaction.&lt;/p&gt;

&lt;p&gt;There are 2 ways:&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;Quota pools use get all info from OST pools.&lt;br/&gt;
 &lt;em&gt;Benefits&lt;/em&gt;: OST pools currently exist, don&apos;t need to add the same code. &lt;br/&gt;
 &lt;em&gt;Drawbacks&lt;/em&gt;: quota pool master and OST pools are located on different obd devices.&lt;br/&gt;
 I am not sure I see a nice way to communication between them. Thoughts, ideas how it should/could be done ?&lt;br/&gt;
 Configs ?&lt;/li&gt;
	&lt;li&gt;Quota pools doesn&apos;t depend on OST pools. We need to add just 2 commands like &quot;quota_pool_new&quot; and &quot;quota_pool_add&quot;.&lt;br/&gt;
 &lt;em&gt;Benefits&lt;/em&gt;: we can use these commands for DoM: &quot;lfs quota_pool_new -type DOM dom_pool1 /mnt/lustre&quot;. And even combine OST and MDT pools in one: &quot;lfs quota_pool_new -type DOM,OSS fast_pool /mnt/lustre&quot;.&lt;br/&gt;
 &lt;em&gt;Drawbacks&lt;/em&gt;: new code that partially clone OST pools functionality.&lt;/li&gt;
&lt;/ol&gt;
</comment>
                            <comment id="239044" author="adilger" created="Fri, 21 Dec 2018 23:29:36 +0000"  >&lt;p&gt;IMHO it would be confusing/annoying to have to configure OST pools separately from pool quotas. People are already using OST pools for allocating files on specific OSTs, so having to define and configure pool quotas separately (and possibly differently by accident) would cause a lot of support issues/questions. &lt;/p&gt;

&lt;p&gt;Even though the quota master (MDT0000) is on a different device from the MGS, it should be that MDT0000 has all of the pool information because it is using the pools to do allocation. &lt;/p&gt;

&lt;p&gt;I think the biggest effort would be to allow MDTs to be added to pools, and have this affect inode allocation is the MDTs are added to a pool. &lt;/p&gt;</comment>
                            <comment id="239112" author="sergey" created="Tue, 25 Dec 2018 15:48:37 +0000"  >&lt;p&gt;Thanks for the answer, Andreas.&lt;/p&gt;

&lt;p&gt;Have one more item for discussion.&lt;br/&gt;
 Right now to address the pool is used qpi_key that is&#160;composed of (pool_id | (pool_type &amp;lt;&amp;lt; 16)).&lt;br/&gt;
 As OSTs shouldn&apos;t know anything about pool_id&apos;s we can change this to use LOD pool name for qpi_key.&lt;br/&gt;
 And use pool_name as a name for directory with quota_files.&lt;br/&gt;
 Now we have:&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;&#9500;&#9472;&#9472; changelog_catalog
&#9500;&#9472;&#9472; ...
&#9500;&#9472;&#9472; quota_master
&#9474;   &#9500;&#9472;&#9472; dt-0x0
&#9474;   &#9474;   &#9500;&#9472;&#9472; 0x1020000
&#9474;   &#9474;   &#9500;&#9472;&#9472; 0x1020000-OST0000_UUID
&#9474;   &#9474;   &#9500;&#9472;&#9472; 0x1020000-OST0001_UUID
&#160;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Instead we can have something like&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;&#9500;&#9472;&#9472; quota_master
&#9474;   &#9500;&#9472;&#9472; dt-pool1
&#9474;   &#9474;...
&#9474;   &#9500;&#9472;&#9472; dt-poolN
 &lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;However I guess pool_id could be useful later. Possibly to group disks directly on the OST.&lt;br/&gt;
 Thus if we want to hold all the code existed around pool ids we need to have a mapping from Quota pool to LOD pool.&lt;br/&gt;
 For example each Quota pool can store both pool name and pool id. Pool name is to address LOD pools and appropriate pool id to operate with quota pools by current scheme.&lt;/p&gt;</comment>
                            <comment id="239212" author="sergey" created="Sat, 29 Dec 2018 20:10:51 +0000"  >&lt;p&gt;Please ignore my previous comment - it is not actual right now.&lt;br/&gt;
I&apos;ve looked to quota code carefully and not sure that we can use the model when OSTs know nothing about different pools and all pool quota accounting is performed on MDS.&lt;/p&gt;</comment>
                            <comment id="239213" author="adilger" created="Sat, 29 Dec 2018 21:08:50 +0000"  >&lt;p&gt;According to Nathan&apos;s proposal, which I agree with, the concept of a pool quota would be something only understood by the MDT, basically adding the per-OST quotas together based on which OSTs belong in a pool. This would be similar to how &quot;&lt;tt&gt;lfs df -p&lt;/tt&gt;&quot; works on the client, only adding the free space from OSTs that are part of a pool. &lt;/p&gt;</comment>
                            <comment id="242008" author="nrutman" created="Thu, 14 Feb 2019 20:54:25 +0000"  >&lt;p&gt;I&apos;ve attached our HLD for review (Sergey and I both worked on it).&#160; Please let us know any comments or concerns; we&apos;ll be implementing this shortly.&lt;/p&gt;</comment>
                            <comment id="242011" author="pfarrell" created="Thu, 14 Feb 2019 21:37:03 +0000"  >&lt;p&gt;Referring to the example about qunit calculations in:&lt;/p&gt;

&lt;p&gt;&quot;5.2.2. Qunit changes &quot;&lt;/p&gt;

&lt;p&gt;I won&apos;t quote the whole example.&lt;/p&gt;

&lt;p&gt;In the case described in the doc, of two overlapping pools, the user &lt;b&gt;is&lt;/b&gt; close to out on one of those OSTs because of that pool.&#160; So it is affecting performance, but also, if they&apos;ve got anything using that OST, then they&apos;re almost out of quota.&#160; And the striping policy doesn&apos;t take quota in to account, so files will get striped to that OST, so they will use it...&#160; So unless you&apos;re making special efforts to avoid it, you&apos;ll run out of quota there while using the other pool.&lt;/p&gt;

&lt;p&gt;So I don&apos;t think this is worse than today in ways that matter, and I think &quot;do nothing&quot; would be acceptable...?&#160; &quot;Do nothing&quot; with advice to avoid overlapping pools where possible?&lt;/p&gt;

&lt;p&gt;&#160;&lt;/p&gt;</comment>
                            <comment id="242064" author="sergey" created="Fri, 15 Feb 2019 12:09:50 +0000"  >&lt;blockquote&gt;&lt;p&gt;&quot;Current code anticipated support for quota pools, but expected a scheme where the pool ID comes from the slaves. We therefore can&apos;t use the existing structure without breaking our requirement that OST-side quota tracking remains unaffected.&quot;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;As we can&apos;t use already existed &quot;quota pools&quot;, new feature should have different name. Propose to name this &quot;quota *s*pools&quot;(slave pools).&lt;br/&gt;
 On the other side term &quot;pools&quot; is known for a long times as a pool of OSTs. So for users it is better to call new feature - &quot;Quota pools&quot;.&lt;br/&gt;
 I suggest to rename existed &quot;quota pools&quot; to something like &quot;quota dpools&quot;(disk pools) or &quot;quota dcomb&quot;(disk combines) and keep term &quot;Quota pools&quot; for current feature.&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;C02TM06XHTD6:quota c17829$ grep -R pool . | wc -l
     383
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;What does community think about rename ?&lt;/p&gt;</comment>
                            <comment id="242766" author="adilger" created="Tue, 26 Feb 2019 02:01:28 +0000"  >&lt;p&gt;Will you be implementing MDT pools as part of this effort, or is that not in the current plans?&lt;/p&gt;</comment>
                            <comment id="242806" author="sergey" created="Tue, 26 Feb 2019 11:25:13 +0000"  >&lt;p&gt;MDT pools part is not in the current plans.&lt;/p&gt;

&lt;p&gt;I guess this work should be started with implementing MDT pools. Possibly we need some independent pools layer including both MDTs and MDTs pools that can be available from LOD, quota and MDD.&lt;/p&gt;</comment>
                            <comment id="242807" author="adilger" created="Tue, 26 Feb 2019 12:00:34 +0000"  >&lt;p&gt;Just reviewing the HLD, some general comments:&lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;6.2 examples do not match the use case presented in 6.1?  It would make it more clear if the numbers in these sections matched, so that the reader can &quot;follow along&quot; with the examples after the scenario is described in 6.1.&lt;/li&gt;
	&lt;li&gt;6.2.2,4 and 6.3.3 examples suppose the case where the user&apos;s pool quota is less than the free space on any OST.  It doesn&apos;t seem that there is any coordination between the MDS object allocation and the pool quota space?  What happens when Bob tries to create and write to a new file in a directory not associated with any pool, in the case where he is out of quota on OST10-20, and only 0.1GB on OST5-9?  If the MDS object allocator doesn&apos;t take the pool quota into account, it is entirely possible that the file objects will be allocated on the over-quota OSTs, and Bob will get &lt;tt&gt;-EDQUOT&lt;/tt&gt; even though there are OSTs that have space and quota available he could write to?  It would seem that having at least some communication between LOD and QMT for object allocation would avoid this issue.  It wouldn&apos;t need to be continuous (i.e. not for every object), but rather similar to how LOD is periodically checking the statfs for QOS allocation.  It may be that each user gets a separate &quot;mask&quot; of &quot;available space&quot; for each OST, based on available quota that limits the QOS algorithm&apos;s selection of OSTs for their file creations.&lt;/li&gt;
	&lt;li&gt;I saw in the comments at one point that destroying a pool would preserve the quota limits, so they are available if the pool is recreated (which may happen if e.g. there is some problem with the config logs or similar), but this is not reflected in the HLD.  IMHO, this behaviour makes sense, since assigning user/group/project quotas for pools is typically cumbersome work, and admins may not have scripts to do this or backups.  My understanding is that setting quotas for user/group/project is already a bit of a chore, so we don&apos;t want to make it harder.  If there is no pool definition, then the left-over pool quota limits could just be ignored completely (e.g. not loaded into memory)?  Is there a reason this was removed?&lt;/li&gt;
	&lt;li&gt;as for existing &quot;pool ID&quot; support in quotas, my (limited) understanding is that this is all totally unused.  At one time we discussed mapping a pool name to a numeric ID, but that was dropped due to complexity.  There was also an old proposal to allow a &quot;FID&quot; to be a pool ID, allowing a directory to have a quota for all of the tree underneath it.  However, that was later replaced with project quotas based on the XFS design, which has since been implemented for ext4 and ZFS as well, so it is unlikely to change in the future.  Granted that I&apos;m not very familiar with the quota code, I&apos;m fine with getting rid of the whole idea of numeric IDs for quotas and using names instead, if the protocol supports it.  We&apos;d probably have to watch out for mapping the string name to the network protocol so that it does not conflict with existing FID usage.&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Hongchao, can you please take a look at the HLD and provide your input on the pool ID issue, as well as any other thoughts.&lt;/p&gt;</comment>
                            <comment id="242828" author="pfarrell" created="Tue, 26 Feb 2019 16:47:51 +0000"  >&lt;p&gt;&quot;I saw in the comments at one point that destroying a pool would preserve the quota limits, so they are available if the pool is recreated (which may happen if e.g. there is some problem with the config logs or similar), but this is not reflected in the HLD. IMHO, this behaviour makes sense, since assigning user/group/project quotas for pools is typically cumbersome work, and admins may not have scripts to do this or backups. My understanding is that setting quotas for user/group/project is already a bit of a chore, so we don&apos;t want to make it harder. If there is no pool definition, then the left-over pool quota limits could just be ignored completely (e.g. not loaded into memory)? Is there a reason this was removed?&quot;&lt;/p&gt;

&lt;p&gt;I&apos;m not sure of the details on its removal, but I said (at some point, possibly in discussions at Cray) that I thought this would potentially be confusing and have relatively little utility.&lt;/p&gt;

&lt;p&gt;Basically, what if the creator of a pool doesn&apos;t &lt;b&gt;want&lt;/b&gt; quotas and doesn&apos;t realize they&apos;re re-using a name?&#160; It seems quite unpleasant to have &quot;surprise&quot; quotas.&lt;/p&gt;

&lt;p&gt;Then, also, when do we get rid of the pool quota info for pools that are gone?&lt;/p&gt;

&lt;p&gt;One of the ideas for pool quotas is that a workload manager or similar is creating them dynamically on a per-job basis, potentially both pools and pool quotas.&#160; So the old quotas could really pile up.&#160; Maybe they&apos;re so tiny it doesn&apos;t really matter...&#160; (Obviously, we could age them out or something, but it just adds complexity.)&lt;/p&gt;</comment>
                            <comment id="242829" author="pfarrell" created="Tue, 26 Feb 2019 16:48:41 +0000"  >&lt;p&gt;And, yeah, pool id is totally unused.&#160; I&apos;m confused about how discussion of it crept back in to the design doc - Are you guys planning to implement pool ids?&#160; They effectively don&apos;t exist today, despite a little bit of old code for them still being present.&lt;/p&gt;</comment>
                            <comment id="242868" author="adilger" created="Wed, 27 Feb 2019 00:22:39 +0000"  >&lt;blockquote&gt;
&lt;p&gt;One of the ideas for pool quotas is that a workload manager or similar is creating them dynamically on a per-job basis, potentially both pools and pool quotas.  So the old quotas could really pile up.  Maybe they&apos;re so tiny it doesn&apos;t really matter...  (Obviously, we could age them out or something, but it just adds complexity.)&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;This would be a bad implementation, from a configuration point of view.  Pools are stored in the Lustre config log, so that they are visible on the clients, but dynamically creating and removing the pools would quickly exhaust the available config llog space.  I could see that the quotas might be changed on a per-job basis, but it seems unlikely that the hardware composing a pool would change frequently?  If they really wanted per-OST quotas, then just configure one OST per pool and grant quota to the subset of OSTs that are desired.&lt;/p&gt;

&lt;p&gt;IMHO, in the longer term, it would be desirable to allow users to make their own &quot;pseudo pools&quot;, either by allowing something like &quot;&lt;tt&gt;lfs setstripe -o X,Y,Z -c1&lt;/tt&gt;&quot; to work in the same way as a pool (select 1 OST out of the list of OSTs &quot;&lt;tt&gt;X, Y, Z&lt;/tt&gt;&quot;), or by leveraging &lt;a href=&quot;https://review.whamcloud.com/28972&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/28972&lt;/a&gt; &quot;&lt;tt&gt;&lt;a href=&quot;https://jira.whamcloud.com/browse/LU-9982&quot; title=&quot;Clients striping from mapped FID in nodemap&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-9982&quot;&gt;LU-9982&lt;/a&gt; lustre: Clients striping from mapped FID in nodemap&lt;/tt&gt;&quot; to allow creating &quot;template&quot; layout files in e.g. &lt;tt&gt;~/.lustre/ostXYZ_1stripe&lt;/tt&gt; (possibly using the above &quot;pseudo pool&quot;) and then using it like &quot;&lt;tt&gt;lfs setstripe -F ostXYZ_1stripe /path/to/new/file&lt;/tt&gt;&quot; to allow them to have named default layouts of their choosing.&lt;/p&gt;</comment>
                            <comment id="242956" author="sergey" created="Wed, 27 Feb 2019 14:34:11 +0000"  >&lt;blockquote&gt;&lt;p&gt;Basically, what if the creator of a pool doesn&apos;t&#160;&lt;b&gt;want&lt;/b&gt;&#160;quotas and doesn&apos;t realize they&apos;re re-using a name?&#160; It seems quite unpleasant to have &quot;surprise&quot; quotas.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Yes, it was the main reason why we decided it is better to remove quota pool files together with appropriate pool.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;And, yeah, pool id is totally unused.&#160; I&apos;m confused about how discussion of it crept back in to the design doc - Are you guys planning to implement pool ids?&#160;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;No, we are not planning. Furthermore I&apos;ve already started to write the code and place &quot;new quota pools&quot; in parallel with &quot;old quota id pools&quot;. If we make a decision that existing quota pools could be removed, I stop my work and start with a patch that removes existing quota pools. It can save a lot of time because removing existing pools at final stage will need more effort.&lt;/p&gt;</comment>
                            <comment id="243048" author="nrutman" created="Thu, 28 Feb 2019 16:47:35 +0000"  >&lt;blockquote&gt;&lt;p&gt;MDT pools part is not in the current plans.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Right - this pools quota work is in no way related to hypothetical MDT pools &lt;img class=&quot;emoticon&quot; src=&quot;https://jira.whamcloud.com/images/icons/emoticons/smile.png&quot; height=&quot;16&quot; width=&quot;16&quot; align=&quot;absmiddle&quot; alt=&quot;&quot; border=&quot;0&quot;/&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;the MDS object allocator doesn&apos;t take the pool quota into account&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Right again. Although we agree this would be a nice feature, we are not lumping a big effort like changing the allocator into this ticket. The allocator needs to get some attention, but not only related to this:&lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;take into account remaining quotas&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;https://jira.whamcloud.com/browse/LU-9809&quot; title=&quot;RTDS(Real-Time Dynamic Striping): A policy based striping framework&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-9809&quot;&gt;LU-9809&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;take into account mirror locations&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;https://jira.whamcloud.com/browse/LU-10070&quot; title=&quot;PFL self-extending file layout&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-10070&quot;&gt;&lt;del&gt;LU-10070&lt;/del&gt;&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;enable other patterns like &quot;fill groups of OSTs one at a time&quot; for large systems&lt;/li&gt;
	&lt;li&gt;capability-aware allocator&lt;/li&gt;
	&lt;li&gt;fix the QoS which is too opaque/broken?&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;https://jira.whamcloud.com/browse/LU-9982&quot; title=&quot;Clients striping from mapped FID in nodemap&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-9982&quot;&gt;LU-9982&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;lfs setstripe -o X,Y,Z -c1&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;So we are not going to mess with it for this ticket.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;at one point that destroying a pool would preserve the quota limits, so they are available if the pool is recreated&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;We removed this, as we felt that lingering settings would just be confusing. We don&apos;t really expect people to be destroying and then recreating pools, but normally if I destroy something I want it to be dead and gone, and part of the reason I am destroying and re-creating is to clear out something that was confusing/broken/unknown.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;setting quotas for user/group/project is already a bit of a chore&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Yes, and we are actually thinking about another feature: default quotas. Right now, unset quotas means that there are no limits. Instead, we are thinking about defining a &quot;default&quot; quota user, such that if a user has no explicit quota setting, she gets the default quota. This could of course be set for a pool quota as well. But we will be working on this in a separate ticket; not here.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&quot;pool ID&quot; support in quotas, my (limited) understanding is that this is all totally unused.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;It is unused. It&apos;s going to take us some significant effort to remove, and will interrupt Sergey&apos;s current progress. We are willing to do this, and will include this as a first patch here. If anyone objects to this, PLEASE SPEAK UP NOW since we will shift to working on this immediately.&lt;/p&gt;

&lt;p&gt;&#160;&lt;/p&gt;</comment>
                            <comment id="243054" author="adilger" created="Thu, 28 Feb 2019 17:09:18 +0000"  >&lt;p&gt;Note that there is already a mechanism in new Lustre release to have a default quota user. This was added in patch &lt;a href=&quot;https://review.whamcloud.com/32306&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/32306&lt;/a&gt; &quot;&lt;tt&gt;&lt;a href=&quot;https://jira.whamcloud.com/browse/LU-7816&quot; title=&quot;Add default quota setting support for Lustre&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-7816&quot;&gt;&lt;del&gt;LU-7816&lt;/del&gt;&lt;/a&gt; quota: add default quota setting support&lt;/tt&gt;&quot;. &lt;/p&gt;

&lt;p&gt;What is missing is a good way to backup and restore quota settings. &lt;/p&gt;</comment>
                            <comment id="243287" author="sergey" created="Mon, 4 Mar 2019 13:51:52 +0000"  >&lt;p&gt;I started thinking about existing quota pools removing.&lt;br/&gt;
 At first look this task has several problems that may move aside &#8220;target quota pools&#8221;:&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;If we want to fully remove existing pools, a lot of code should be changed that increases chances of regressions.&lt;/li&gt;
	&lt;li&gt;Question about compatibility. Now all quota index file names consist of &#8220;pool id + pool type + pool_id + slave_uuid(optionally for slave indexes)&#8220;. The name(except _UUID part for slaves) is equal to it&#8217;s fid-&amp;gt;oid. In case of removing quota pools we also need to rename all this files according to some new rules. It could be a problem in case of upgrade/downgrade. Furthermore we should save part of code for some long period of time to have ability do rename from old to new names.&lt;/li&gt;
	&lt;li&gt;Theoretically, existing quota pools code could be used for &#8220;new quota pools&#8221;.&lt;/li&gt;
&lt;/ol&gt;


&lt;p&gt;So, what if I just will try to &lt;em&gt;reuse&lt;/em&gt; existing quota pools for new feature purposes ?&lt;br/&gt;
 For example one of the main places where existing pools are searched by ID is a request handler - qmt_dqacq.&lt;br/&gt;
 We can use change qmt_pool_lqe_lookup-&amp;gt;qmt_pool_lookup to return not only one pool with ID 0, but the list of pointers to all pools that includes OST/MDT from where MDT0 get quota request. And go to the direction when we always work with a list of pools and LQEs.&lt;/p&gt;

&lt;p&gt;qmt_pool_info(used to describe currently quota pools) includes all needed for LOD quota pools(just several fieldes should be added). So no reasons to remove it and add the same structure but with another name. I believe the main part of functions from qmt_pool.c can also be used without big changes.&lt;/p&gt;

&lt;p&gt;If suggested way is&#160;acceptable, we will finally have following&#160;hierarchy:&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;&#9500;&#9472;&#9472; quota_master
&#9474;   &#9500;&#9472;&#9472; dt-0x0
&#9474;   &#9474;   &#9500;&#9472;&#9472; 0x1020000
&#9474;   &#9474;   &#9500;&#9472;&#9472; 0x1020000-OST0000_UUID
&#9474;   &#9474;   &#9500;&#9472;&#9472; 0x1020000-OST0001_UUID
&#9474;   &#9474;   &#9500;&#9472;&#9472; 0x20000
&#9474;   &#9474;   &#9500;&#9472;&#9472; ....
&#9474;   &#9500;&#9472;&#9472; md-0x0
&#9474;   &#9474; &#9500;&#9472;&#9472; 0x10000
&#9474;   &#9474; &#9500;&#9472;&#9472; 0x1010000
&#9474;   &#9474; &#9500;&#9472;&#9472; ...
&#9474;   &#9492;&#9472;&#9472; pools
&#9474;   &#9474; &#9500;&#9472;&#9472; pool1_usr
&#9474;   &#9474; &#9500;&#9472;&#9472; pool1_grp
&#9474;   &#9474; &#9500;&#9472;&#9472; pool1_prj
&#9474;   &#9474; &#9500;&#9472;&#9472; pool2_usr
&#9474;   &#9474; &#9500;&#9472;&#9472; ...
&#9500;&#9472;&#9472; quota_slave
&#9474;   &#9500;&#9472;&#9472; 0x10000
&#9474;   &#9500;&#9472;&#9472; 0x10000-MDT0000
&#9474;   &#9500;&#9472;&#9472; ...
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                            <comment id="243644" author="gerrit" created="Mon, 11 Mar 2019 16:01:43 +0000"  >&lt;p&gt;Sergey Cheremencev (c17829@cray.com) uploaded a new patch: &lt;a href=&quot;https://review.whamcloud.com/34389&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/34389&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-11023&quot; title=&quot;OST Pool Quotas&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-11023&quot;&gt;&lt;del&gt;LU-11023&lt;/del&gt;&lt;/a&gt; quota: remove quota pool ID&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: 0d8a127b778b3e17d5efff1bd4b544632457b7cf&lt;/p&gt;</comment>
                            <comment id="245792" author="gerrit" created="Mon, 15 Apr 2019 20:31:48 +0000"  >&lt;p&gt;Sergey Cheremencev (c17829@cray.com) uploaded a new patch: &lt;a href=&quot;https://review.whamcloud.com/34667&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/34667&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-11023&quot; title=&quot;OST Pool Quotas&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-11023&quot;&gt;&lt;del&gt;LU-11023&lt;/del&gt;&lt;/a&gt; quota: tune quota pools through LCFG&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: 035e8052b1c141857b709cc4662f9b710d7edec6&lt;/p&gt;</comment>
                            <comment id="249667" author="sergey" created="Fri, 21 Jun 2019 15:38:57 +0000"  >&lt;p&gt;Hello !&lt;/p&gt;

&lt;p&gt;Small update about my work on quota pools. The work still is in progress. But the main part is finished.&lt;br/&gt;
Now it passes simple tests (like sanity_quota test_1) with a couple quota pools with different hard limits.&lt;br/&gt;
However I see a lot of work in a future.&lt;/p&gt;



&lt;p&gt;I have a question about &quot;lfs quota&quot;.&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;Should &quot;lfs quota -u/g/p&quot; show information for all existing pools for requested ID(u/g/p) ?&lt;/li&gt;
	&lt;li&gt;I am going to introduce a key to show&#160; quota information only for requested pool. For &quot;lfs&#160; &#160;setquota&quot; to set pool settings I am using key &quot;-o&quot; because keys &quot;-p/-P&quot; are already used for project. But I can&apos;t use &quot;-o&quot; with &quot;lfs quota&quot; because it is used to set obd_uuid. Could someone suggest which key is better ? Is &quot;-o obd_uuid&quot; used somewhere ?&lt;/li&gt;
&lt;/ol&gt;
</comment>
                            <comment id="249680" author="adilger" created="Fri, 21 Jun 2019 21:25:51 +0000"  >&lt;p&gt;You could just stil with the long option &quot;&lt;tt&gt;--pool&lt;/tt&gt;&quot;.&lt;/p&gt;</comment>
                            <comment id="249743" author="sergey" created="Mon, 24 Jun 2019 12:17:27 +0000"  >&lt;p&gt;what about the 1st question ? Should lfs quota without key &quot;&#8211;pool&quot; show information for all existing pools ?&lt;/p&gt;</comment>
                            <comment id="249959" author="adilger" created="Tue, 25 Jun 2019 11:25:51 +0000"  >&lt;p&gt;I&apos;m not really an expert in the quota code, but as long as this does not repeatedly list the OSTs, I think this would be OK.  My concern would be if the output becomes too verbose, or if there isn&apos;t a way to limit the information to a specific quota type (maybe &quot;&lt;tt&gt;--pool=none&lt;/tt&gt;&quot; to avoid the pool output)?&lt;/p&gt;</comment>
                            <comment id="252036" author="gerrit" created="Thu, 25 Jul 2019 18:10:11 +0000"  >&lt;p&gt;Sergey Cheremencev (c17829@cray.com) uploaded a new patch: &lt;a href=&quot;https://review.whamcloud.com/35615&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/35615&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-11023&quot; title=&quot;OST Pool Quotas&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-11023&quot;&gt;&lt;del&gt;LU-11023&lt;/del&gt;&lt;/a&gt; quota: quota pools for OSTs&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: 2d983ab779d203d73b01f132cb991253855af51a&lt;/p&gt;</comment>
                            <comment id="252843" author="gerrit" created="Fri, 9 Aug 2019 04:41:24 +0000"  >&lt;p&gt;Oleg Drokin (green@whamcloud.com) merged in patch &lt;a href=&quot;https://review.whamcloud.com/34389/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/34389/&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-11023&quot; title=&quot;OST Pool Quotas&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-11023&quot;&gt;&lt;del&gt;LU-11023&lt;/del&gt;&lt;/a&gt; quota: remove quota pool ID&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: &lt;br/&gt;
Commit: f6819c90c8532e017646c8173337a9c92250e60f&lt;/p&gt;</comment>
                            <comment id="259776" author="adilger" created="Thu, 12 Dec 2019 23:32:07 +0000"  >&lt;p&gt;Since this work is already nearing completion, I&apos;m wondering if there are additional developments in this area that you will pursue:&lt;/p&gt;
&lt;ul class=&quot;alternate&quot; type=&quot;square&quot;&gt;
	&lt;li&gt;MDT pools and pool quotas?  This is becoming increasingly important for limiting DoM space usage&lt;/li&gt;
	&lt;li&gt;integrating quota with OST object allocation on the MDS.  It doesn&apos;t make sense to allocate objects on OSTs for which the user has no space. With SEL (and PFL when &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13058&quot; title=&quot;Intermediate component removal (PFL/SEL)&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13058&quot;&gt;LU-13058&lt;/a&gt; is landed) it would be possible to skip intermediate components on pools for which the user has no quota.&lt;/li&gt;
&lt;/ul&gt;
</comment>
                            <comment id="259974" author="sergey" created="Mon, 16 Dec 2019 15:42:51 +0000"  >&lt;blockquote&gt;&lt;p&gt;MDT pools and pool quotas? This is becoming increasingly important for limiting DoM space usage&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;From my side I did all things to make the process of implementing MDT quota pools simple as possible. MDT pools look like&#160;a distinct feature. Suggest to discuss it in a another ticket. Possibly we can implement MDT pools only for DOM. Anyway I believe Cray is interesting to have pool quotas on MDT pools and I will have opportunity(need to get approvement from management) to be involved in this development process. Let&apos;s start discussing!&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;integrating quota with OST object allocation on the MDS. It doesn&apos;t make sense to allocate objects on OSTs for which the user has no space. With SEL (and PFL when&#160;&lt;a href=&quot;https://jira.whamcloud.com/browse/LU-13058&quot; title=&quot;Intermediate component removal (PFL/SEL)&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-13058&quot;&gt;LU-13058&lt;/a&gt;&#160;is landed) it would be possible to skip intermediate components on pools for which the user has no quota.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;The key thing here is to provide quota pools state for usr/grp/prj to LOD layer. If OST belongs to a pool, LOD could ask QMT - does this user has quota at the pool. It looks like we need just to find lqe from global pool(&lt;em&gt;qmt_pool_lqe_lookup(env, qmt,&lt;/em&gt; &lt;em&gt;pooltype, qtype, id, NULL))&lt;/em&gt;&#160;and check each entry in&#160;&lt;em&gt;lqe global array&lt;/em&gt;&#160;for &lt;em&gt;edquot&lt;/em&gt;. So if it is a simple patch, I can help to implement this.&lt;br/&gt;
But current patch is pretty big and I&apos;d like to make this simple and small as much as possible. So I am voting to do this at another ticket when QP will be ready.&lt;/p&gt;</comment>
                            <comment id="266346" author="sergey" created="Mon, 30 Mar 2020 14:56:06 +0000"  >&lt;p&gt;I am stuck with investigation of &lt;a href=&quot;https://testing.whamcloud.com/test_sets/28dc60c8-122b-4953-887d-08dd98977dd0&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;sanity-quota_69 failure&lt;/a&gt;. It fails only on configuration with 8 OSTs, 4 OSTs and 2 clients(review-dne-part-4).&lt;br/&gt;
 The test fails with timeout after 423 minutes from the beginning. Thus I haven&apos;t needed logs that should relate to the several minutes after test&apos;s start. Is it possible to restart this test with reduced timeout to capture needed period? I propose to set it to 4 minutes.&lt;/p&gt;</comment>
                            <comment id="266363" author="spitzcor" created="Mon, 30 Mar 2020 19:55:10 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.whamcloud.com/secure/ViewProfile.jspa?name=mdiep&quot; class=&quot;user-hover&quot; rel=&quot;mdiep&quot;&gt;mdiep&lt;/a&gt;, I heard that you might be able to assist with Sergey&apos;s request.  Can you?&lt;/p&gt;</comment>
                            <comment id="266365" author="adilger" created="Mon, 30 Mar 2020 20:43:44 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.whamcloud.com/secure/ViewProfile.jspa?name=sergey&quot; class=&quot;user-hover&quot; rel=&quot;sergey&quot;&gt;sergey&lt;/a&gt; you could add debugging to the test script in your patch to dump the debug logs sooner (e.g. a background thread that calls &quot;&lt;tt&gt;lctl dk /tmp/lustre-log-$(date +%s).log&lt;/tt&gt;&quot; every 5s for some time).  I believe that Maloo will attach all &quot;&lt;tt&gt;/tmp/*.log&lt;/tt&gt;&quot; files to the test results.&lt;/p&gt;</comment>
                            <comment id="266367" author="mdiep" created="Mon, 30 Mar 2020 21:47:59 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.whamcloud.com/secure/ViewProfile.jspa?name=spitzcor&quot; class=&quot;user-hover&quot; rel=&quot;spitzcor&quot;&gt;spitzcor&lt;/a&gt;, I am not sure what you&apos;re taking about.&lt;/p&gt;</comment>
                            <comment id="266615" author="sergey" created="Wed, 1 Apr 2020 18:37:17 +0000"  >&lt;blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://jira.whamcloud.com/secure/ViewProfile.jspa?name=sergey&quot; class=&quot;user-hover&quot; rel=&quot;sergey&quot;&gt;sergey&lt;/a&gt;&#160;you could add debugging to the test script in your patch to dump the debug logs sooner&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&#160;I tried this approach but didn&apos;t get success. The latest sanity-quota_69&#160;&lt;a href=&quot;https://testing.whamcloud.com/test_sets/d325bae7-ee1c-49fa-b0cb-1728449013a4&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;failure&lt;/a&gt;&#160;doesn&apos;t contain any debug logs I saved at tmp with name &quot;$TMP/lustre-log-client-$(date +%s).log&quot;. Probably it should be similar with &quot;sanity-quota.test_69.test_log.onyx-49vm1.log&quot; ? If no, please advice another way.&lt;/p&gt;

&lt;p&gt;Thanks.&lt;/p&gt;</comment>
                            <comment id="266621" author="adilger" created="Wed, 1 Apr 2020 19:17:03 +0000"  >&lt;p&gt;Poking around a bit further, I see that &lt;tt&gt;lustre/tests/auster&lt;/tt&gt; is uploading all of the logs from its &lt;tt&gt;$LOGDIR&lt;/tt&gt;, and within &lt;tt&gt;test-framework.sh&lt;/tt&gt; the &lt;tt&gt;generate_logname()&lt;/tt&gt; function is using &lt;tt&gt;$LOGDIR/$TESTSUITE.$TESTNAME.$1.&amp;lt;hostname&amp;gt;.log&lt;/tt&gt; for the individual logfiles.  It looks like you could use &quot;&lt;tt&gt;lctl dk $(generate_logname $(date +%s))&lt;/tt&gt;&quot; to dump the logs (similar to what &lt;tt&gt;gather_logs()&lt;/tt&gt; does if an error is hit) and then they will be uploaded.&lt;/p&gt;

&lt;p&gt;James, Minh, Charlie, please correct me if the above is not corrent for log files to be included into the Maloo report for a test session.&lt;/p&gt;</comment>
                            <comment id="266736" author="sergey" created="Thu, 2 Apr 2020 19:29:27 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.whamcloud.com/secure/ViewProfile.jspa?name=adilger&quot; class=&quot;user-hover&quot; rel=&quot;adilger&quot;&gt;adilger&lt;/a&gt;, thank you for advice. However my last attempt when I used generate_logname also failed. The reason is not finally clear for me. At first look it doesn&apos;t relate to my patch - crash dump doesn&apos;t consist the reason of panic:&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;crash&amp;gt; dmesg | tail -n 2
[ 1593.570869] Lustre: lustre-OST0001-osc-ffff8800a60bc800: disconnect after 21s idle
[ 1593.573338] Lustre: Skipped 19 previous similar messages
crash&amp;gt; sys | grep PANIC
&#160;&#160; &#160; &#160; PANIC: &quot;&quot; &lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;On the other side it is occurred in sanity-quota_69 when it calls lctl dk -&#160;&lt;a href=&quot;https://testing-archive.whamcloud.com/gerrit-janitor/7821/results.html&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://testing-archive.whamcloud.com/gerrit-janitor/7821/results.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Can someone assist me here ?&lt;/p&gt;</comment>
                            <comment id="266738" author="adilger" created="Thu, 2 Apr 2020 19:39:14 +0000"  >&lt;p&gt;Looking earlier in the test logs, I see a few other stack traces in the &lt;a href=&quot;https://testing-archive.whamcloud.com/gerrit-janitor/7821/testresults/sanity-quota-special1-ldiskfs-DNE-centos7_x86_64-centos7_x86_64/oleg308-server-console.txt&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;oleg308-server-console.txt&lt;/a&gt;  from a &lt;a href=&quot;https://testing-archive.whamcloud.com/gerrit-janitor/7821/testresults/sanity-quota-special1-ldiskfs-DNE-centos7_x86_64-centos7_x86_64/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;special test&lt;/a&gt; run for this patch:&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;[ 4326.625102] WARNING: CPU: 2 PID: 3431 at fs/proc/generic.c:399 proc_register+0x94/0xb0
[ 4326.627740] proc_dir_entry &apos;lustre-QMT0000/dt-qpool1&apos; already registered
[ 4326.640806] CPU: 2 PID: 3431 Comm: llog_process_th Kdump: loaded Tainted: P        W  OE  ------------   3.10.0-7.7-debug #1
[ 4326.644194] Call Trace:
[ 4326.644610]  [&amp;lt;ffffffff817d1711&amp;gt;] dump_stack+0x19/0x1b
[ 4326.645525]  [&amp;lt;ffffffff8108ba58&amp;gt;] __warn+0xd8/0x100
[ 4326.646338]  [&amp;lt;ffffffff8108badf&amp;gt;] warn_slowpath_fmt+0x5f/0x80
[ 4326.649833]  [&amp;lt;ffffffff812c2434&amp;gt;] proc_register+0x94/0xb0
[ 4326.650741]  [&amp;lt;ffffffff812c2576&amp;gt;] proc_mkdir_data+0x66/0xa0
[ 4326.651683]  [&amp;lt;ffffffff812c25e5&amp;gt;] proc_mkdir+0x15/0x20
[ 4326.652710]  [&amp;lt;ffffffffa0315374&amp;gt;] lprocfs_register+0x24/0x80 [obdclass]
[ 4326.653941]  [&amp;lt;ffffffffa0aa2385&amp;gt;] qmt_pool_alloc+0x175/0x570 [lquota]
[ 4326.655347]  [&amp;lt;ffffffffa0aa74a4&amp;gt;] qmt_pool_new+0x224/0x4d0 [lquota]
[ 4326.656901]  [&amp;lt;ffffffffa032c83b&amp;gt;] class_process_config+0x22eb/0x2ee0 [obdclass]
[ 4326.660700]  [&amp;lt;ffffffffa032eec9&amp;gt;] class_config_llog_handler+0x819/0x14b0 [obdclass]
[ 4326.662767]  [&amp;lt;ffffffffa02f2582&amp;gt;] llog_process_thread+0x7d2/0x1a20 [obdclass]
[ 4326.665703]  [&amp;lt;ffffffffa02f4292&amp;gt;] llog_process_thread_daemonize+0xa2/0xe0 [obdclass]
[ 4326.676370] LustreError: 3431:0:(qmt_pool.c:208:qmt_pool_alloc()) lustre-QMT0000: failed to create proc entry for pool dt-qpool1 (-12)
[ 4326.680007] LustreError: 3431:0:(qmt_pool.c:935:qmt_pool_new()) Can&apos;t alloc pool qpool1
[ 4336.217899] LustreError: 3774:0:(qmt_pool.c:1343:qmt_pool_add_rem()) Can&apos;t add to lustre-OST0001_UUID pool qpool1, err -17
[ 4336.223934] LustreError: 3774:0:(qmt_pool.c:1343:qmt_pool_add_rem()) Skipped 5 previous similar messages
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;so it may be that the code tries to register this same proc entry multiple times, and then crashes during cleanup when it is freed multiple times?&lt;/p&gt;</comment>
                            <comment id="266775" author="sergey" created="Fri, 3 Apr 2020 12:52:40 +0000"  >&lt;blockquote&gt;&lt;p&gt;so it may be that the code tries to register this same proc entry multiple times, and then crashes during cleanup when it is freed multiple times?&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;In such case I&apos;d expect to see the reason of failure in crash dump, smth like &quot;BUG: unable to handle kernel NULL pointer&quot;.&lt;/p&gt;

&lt;p&gt;Anyway the reason is clear - I lost &quot;dk&quot; in my script causing timeout error:&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;do_facet mds1 $LCTL &amp;gt; $(generate_logname $(date +%s)) &lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                            <comment id="270144" author="gerrit" created="Thu, 14 May 2020 05:38:32 +0000"  >&lt;p&gt;Oleg Drokin (green@whamcloud.com) merged in patch &lt;a href=&quot;https://review.whamcloud.com/35615/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/35615/&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-11023&quot; title=&quot;OST Pool Quotas&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-11023&quot;&gt;&lt;del&gt;LU-11023&lt;/del&gt;&lt;/a&gt; quota: quota pools for OSTs&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: &lt;br/&gt;
Commit: 09f9fb3211cd998c87e26df5217cc4ad84e6ce0b&lt;/p&gt;</comment>
                            <comment id="270193" author="pjones" created="Thu, 14 May 2020 13:46:33 +0000"  >&lt;p&gt;Landed for 2.14&lt;/p&gt;</comment>
                            <comment id="270197" author="spitzcor" created="Thu, 14 May 2020 14:29:02 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.whamcloud.com/secure/ViewProfile.jspa?name=pjones&quot; class=&quot;user-hover&quot; rel=&quot;pjones&quot;&gt;pjones&lt;/a&gt; and &lt;a href=&quot;https://jira.whamcloud.com/secure/ViewProfile.jspa?name=adilger&quot; class=&quot;user-hover&quot; rel=&quot;adilger&quot;&gt;adilger&lt;/a&gt;, can we rename this ticket from &quot;Add OST/MDT pool quota feature&quot; to &quot;OST Quota Pools&quot;?  The landed code doesn&apos;t include MDT pools and it is probably better to say OST pool quotas because we have user quotas, project quotas and &lt;em&gt;pool&lt;/em&gt; quotas, not quota pools.&lt;/p&gt;</comment>
                            <comment id="270204" author="pjones" created="Thu, 14 May 2020 15:04:45 +0000"  >&lt;p&gt;I agree that this is more clear as to what is being provided in 2.14. Thanks for your attention to detail on this!&lt;/p&gt;</comment>
                            <comment id="278917" author="spitzcor" created="Fri, 4 Sep 2020 21:33:04 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.whamcloud.com/secure/ViewProfile.jspa?name=pjones&quot; class=&quot;user-hover&quot; rel=&quot;pjones&quot;&gt;pjones&lt;/a&gt;, I&apos;m afraid I didn&apos;t have the proper attention to detail after all!&lt;br/&gt;
I said to rename it to &quot;OST Quota Pools&quot; above, but I also said, &quot;probably better to say OST pool quotas because we have user quotas, project quotas and pool quotas, not quota pools.&quot;&lt;br/&gt;
I&apos;m sorry about the confusion.  Let&apos;s call it &quot;OST Pool Quotas&quot; per that rational.&lt;/p&gt;</comment>
                            <comment id="281755" author="gerrit" created="Thu, 8 Oct 2020 15:02:56 +0000"  >&lt;p&gt;Sergey Cheremencev (sergey.cheremencev@hpe.com) uploaded a new patch: &lt;a href=&quot;https://review.whamcloud.com/40175&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/40175&lt;/a&gt;&lt;br/&gt;
Subject: &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-11023&quot; title=&quot;OST Pool Quotas&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-11023&quot;&gt;&lt;del&gt;LU-11023&lt;/del&gt;&lt;/a&gt; tests: test quota interop&lt;br/&gt;
Project: fs/lustre-release&lt;br/&gt;
Branch: master&lt;br/&gt;
Current Patch Set: 1&lt;br/&gt;
Commit: 760d9be975dca2370a0cda558289818868c801c0&lt;/p&gt;</comment>
                            <comment id="282243" author="sergey" created="Wed, 14 Oct 2020 18:29:38 +0000"  >&lt;p&gt;There is no special ticket about Pool Quotas testing results.&lt;br/&gt;
 Thus leaving a link to test report here -&#160;&lt;a href=&quot;https://wiki.lustre.org/OST_Pool_Quotas_Test_Report&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://wiki.lustre.org/OST_Pool_Quotas_Test_Report&lt;/a&gt;.&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10324">
                    <name>Cloners</name>
                                            <outwardlinks description="Clones">
                                        <issuelink>
            <issuekey id="21158">LU-4017</issuekey>
        </issuelink>
                            </outwardlinks>
                                                        </issuelinktype>
                            <issuelinktype id="10011">
                    <name>Related</name>
                                            <outwardlinks description="is related to ">
                                        <issuelink>
            <issuekey id="47571">LU-9809</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="34957">LU-7816</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="58363">LU-13359</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="10082">LU-9</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="57575">LU-13058</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="76267">LU-16857</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="52248">LU-11022</issuekey>
        </issuelink>
                            </outwardlinks>
                                                                <inwardlinks description="is related to">
                                        <issuelink>
            <issuekey id="59247">LU-13587</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="60206">LU-13840</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="60747">LU-13954</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="59860">LU-13756</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="60054">LU-13810</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="58717">LUDOC-467</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="53815">LU-11571</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="52102">LU-10995</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="57613">LU-13066</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="58733">LU-13445</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="60736">LU-13952</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="60854">LU-13971</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="61329">LU-14071</issuekey>
        </issuelink>
                            </inwardlinks>
                                    </issuelinktype>
                    </issuelinks>
                <attachments>
                            <attachment id="30193" name="CLUG2013_Pool-Support-of-Quota_final.pdf" size="1178542" author="adilger" created="Wed, 16 May 2018 02:43:14 +0000"/>
                            <attachment id="32005" name="HLD Lustre Pool Quotas-Cray201902.pdf" size="315852" author="nrutman" created="Thu, 14 Feb 2019 19:56:34 +0000"/>
                            <attachment id="30194" name="OST_POOL_Based_Quota_Design.pdf" size="434905" author="adilger" created="Wed, 16 May 2018 02:43:14 +0000"/>
                    </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_10490" key="com.atlassian.jira.plugin.system.customfieldtypes:datepicker">
                        <customfieldname>End date</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>Thu, 2 Jun 2016 00:52:10 +0000</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                            <customfield id="customfield_10390" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>1|hzzx93:</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_10493" key="com.atlassian.jira.plugin.system.customfieldtypes:datepicker">
                        <customfieldname>Start date</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>Fri, 27 Sep 2013 00:52:10 +0000</customfieldvalue>

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