<!-- 
RSS generated by JIRA (9.4.14#940014-sha1:734e6822bbf0d45eff9af51f82432957f73aa32c) at Sat Feb 10 03:35:10 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-17403] lfs migrate: cannot get group lock: No space left on device</title>
                <link>https://jira.whamcloud.com/browse/LU-17403</link>
                <project id="10000" key="LU">Lustre</project>
                    <description>&lt;p&gt;Happy New Year &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;p&gt;We are seeing a new problem on our Fir filesystem (full 2.15.3) when lfs migrating some files. The symptom is &lt;tt&gt;ENOSPC&lt;/tt&gt; when trying to &lt;tt&gt;lfs migrate&lt;/tt&gt;, which makes me think of &lt;a href=&quot;https://jira.whamcloud.com/browse/LU-12852&quot; title=&quot;growing a PFL file with last stripe as -1 fails&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-12852&quot;&gt;&lt;del&gt;LU-12852&lt;/del&gt;&lt;/a&gt;, here is an example:&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;[root@fir-rbh03 ~]# lfs migrate -c 1 /fir/users/anovosel/Seisbench_DATA/stead_mem.csv
lfs migrate: cannot get group lock: No space left on device (28)
error: lfs migrate: /fir/users/anovosel/Seisbench_DATA/stead_mem.csv: cannot get group lock: No space left on device
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;These files are using PFL and a common point between them is that both first and second components are initialized but NOT the last one. For example:&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;[root@fir-rbh03 ~]# lfs getstripe /fir/users/anovosel/Seisbench_DATA/stead_mem.csv
/fir/users/anovosel/Seisbench_DATA/stead_mem.csv
  lcm_layout_gen:    6
  lcm_mirror_count:  1
  lcm_entry_count:   3
    lcme_id:             1
    lcme_mirror_id:      0
    lcme_flags:          init
    lcme_extent.e_start: 0
    lcme_extent.e_end:   4194304
      lmm_stripe_count:  1
      lmm_stripe_size:   4194304
      lmm_pattern:       raid0
      lmm_layout_gen:    0
      lmm_stripe_offset: 125
      lmm_pool:          ssd
      lmm_objects:
      - 0: { l_ost_idx: 125, l_fid: [0x1007d0000:0x3e14ca6:0x0] }

    lcme_id:             2
    lcme_mirror_id:      0
    lcme_flags:          init
    lcme_extent.e_start: 4194304
    lcme_extent.e_end:   17179869184
      lmm_stripe_count:  2
      lmm_stripe_size:   4194304
      lmm_pattern:       raid0
      lmm_layout_gen:    0
      lmm_stripe_offset: 74
      lmm_pool:          hdd
      lmm_objects:
      - 0: { l_ost_idx: 74, l_fid: [0x1004a0000:0x778f9c9:0x0] }
      - 1: { l_ost_idx: 75, l_fid: [0x1004b0000:0x73f371a:0x0] }

    lcme_id:             3
    lcme_mirror_id:      0
    lcme_flags:          0
    lcme_extent.e_start: 17179869184
    lcme_extent.e_end:   EOF
      lmm_stripe_count:  16
      lmm_stripe_size:   4194304
      lmm_pattern:       raid0
      lmm_layout_gen:    0
      lmm_stripe_offset: -1
      lmm_pool:          hdd
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;We have four ldiskfs MDTs, and I have example of files like that on MDT 0, 2 and 3. We don&apos;t have the &lt;tt&gt;ea_inode&lt;/tt&gt; feature set but our inode size is 1KB:&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;[root@fir-md1-s1 Seisbench_DATA]# dumpe2fs -h /dev/mapper/md1-rbod1-mdt0
dumpe2fs 1.47.0-wc2 (25-May-2023)
Filesystem volume name:   fir-MDT0000
Last mounted on:          /
Filesystem UUID:          2f44ac0b-e931-4a58-90a4-d4f1765176bb
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr dir_index filetype needs_recovery extent 64bit mmp flex_bg dirdata large_dir sparse_super large_file huge_file uninit_bg dir_nlink quota project
Filesystem flags:         signed_directory_hash 
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              3745217760
Block count:              4681213440
Reserved block count:     234060672
Free blocks:              3721821762
Free inodes:              3623118029
First block:              0
Block size:               4096
Fragment size:            4096
Group descriptor size:    64
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         26216
Inode blocks per group:   6554
Flex block group size:    16
Filesystem created:       Tue Dec  1 09:29:39 2020
Last mount time:          Wed Jul  5 22:09:02 2023
Last write time:          Wed Jul  5 22:09:02 2023
Mount count:              26
Maximum mount count:      -1
Last checked:             Tue Dec  1 09:29:39 2020
Check interval:           0 (&amp;lt;none&amp;gt;)
Lifetime writes:          35 TB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:	          1024
Required extra isize:     32
Desired extra isize:      32
Journal inode:            8
Default directory hash:   half_md4
Directory Hash Seed:      b8d9b0f5-1004-482d-83a0-44b8305a24cd
Journal backup:           inode blocks
MMP block number:         28487
MMP update interval:      5
User quota inode:         3
Group quota inode:        4
Project quota inode:      12
Journal features:         journal_incompat_revoke journal_64bit
Total journal size:       4096M
Total journal blocks:     1048576
Max transaction length:   1048576
Fast commit length:       0
Journal sequence:         0x0e6dad3b
Journal start:            356385
MMP_block:
    mmp_magic: 0x4d4d50
    mmp_check_interval: 10
    mmp_sequence: 0x3131f5
    mmp_update_date: Mon Jan  8 11:02:45 2024
    mmp_update_time: 1704740565
    mmp_node_name: fir-md1-s1
    mmp_device_name: dm-0
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Under ldiskfs:&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;[root@fir-md1-s1 Seisbench_DATA]# pwd
/mnt/fir/ldiskfs/mdt/0/ROOT/users/[0x200000400:0x5:0x0]:0/anovosel/Seisbench_DATA

[root@fir-md1-s1 Seisbench_DATA]# stat stead_mem.csv
  File: &#8216;stead_mem.csv&#8217;
  Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
Device: fd00h/64768d	Inode: 419466      Links: 1
Access: (0644/-rw-r--r--)  Uid: (419500/anovosel)   Gid: (18036/  beroza)
Access: 2023-10-12 17:49:40.000000000 -0700
Modify: 2023-10-11 15:45:05.000000000 -0700
Change: 2023-10-30 04:12:08.000000000 -0700
 Birth: -

[root@fir-md1-s1 Seisbench_DATA]# getfattr -m &apos;.*&apos; -d stead_mem.csv
# file: stead_mem.csv
trusted.link=0s3/HqEQEAAAA3AAAAAAAAAAAAAAAAAAAAAB8AAAACAAU7gAAAQQIAAAAAc3RlYWRfbWVtLmNzdg==
trusted.lma=0sAAAAAAAAAADBnAUAAgAAABcFAAAAAAAA
trusted.lov=0s0AvWC6ABAAAGAAAAAAADAAAAAAAAAAAAAAAAAAAAAAABAAAAEAAAAAAAAAAAAAAAAABAAAAAAACwAAAASAAAAAAAAABrAAAAAAAAAAAAAAACAAAAEAAAAAAAQAAAAAAAAAAAAAQAAAD4AAAAYAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAEAAAA//////////9YAQAASAAAAAAAAAAAAAAAAAAAAAAAAADQC9MLAQAAABcFAAAAAAAAwZwFAAIAAAAAAEAAAQAAAHNzZAAAAAAAAAAAAAAAAACmTOEDAAAAAAAAAAAAAAAAAAAAAH0AAADQC9MLAQAAABcFAAAAAAAAwZwFAAIAAAAAAEAAAgAAAGhkZAAQAP//AAAAAAAAAADJ+XgHAAAAAAAAAAAAAAAAAAAAAEoAAAAaNz8HAAAAAAAAAAAAAAAAAAAAAEsAAADQC9MLAQAAABcFAAAAAAAAwZwFAAIAAAAAAEAAEAD//2hkZAD/////IGiiAv////8AAAAAAAAAAAAAAAB1AAAAN8UpBv////8=
trusted.projid=&quot;419500&quot;
trusted.som=0sBAAAAAAAAADUpL4WAAAAAGhfCwAAAAAA
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&#160;&lt;br/&gt;
Out of tens of millions of files migrated like that in the last months, I could find only a few hundreds like this, so it&apos;s rare and appeared only recently with 2.15.3. We have to replace old storage chassis so won&apos;t have much time to troubleshoot, so let me know if you think of anything I could try. My current workaround for this problem is to make a copy + unlink the files manually instead.&lt;/p&gt;

&lt;p&gt;Note: the hdd pool (last component) only have OSTs with max_create_count=0 but this PFL setting is very common and worked on many other files.&lt;/p&gt;</description>
                <environment>CentOS 7.9 (3.10.0-1160.90.1.el7_lustre.pl1.x86_64)</environment>
        <key id="79878">LU-17403</key>
            <summary>lfs migrate: cannot get group lock: No space left on device</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="1" iconUrl="https://jira.whamcloud.com/images/icons/statuses/open.png" description="The issue is open and ready for the assignee to start work on it.">Open</status>
                    <statusCategory id="2" key="new" colorName="default"/>
                                    <resolution id="-1">Unresolved</resolution>
                                        <assignee username="wc-triage">WC Triage</assignee>
                                    <reporter username="sthiell">Stephane Thiell</reporter>
                        <labels>
                    </labels>
                <created>Mon, 8 Jan 2024 19:12:14 +0000</created>
                <updated>Mon, 8 Jan 2024 23:42:41 +0000</updated>
                                            <version>Lustre 2.15.3</version>
                                                        <due></due>
                            <votes>0</votes>
                                    <watches>2</watches>
                                                                            <comments>
                            <comment id="398872" author="adilger" created="Mon, 8 Jan 2024 20:17:42 +0000"  >&lt;p&gt;I think your analysis is correct that the missing PFL &quot;&lt;tt&gt;eof&lt;/tt&gt;&quot; component is the cause of the migration error.  When testing a &quot;short&quot; PFL layout I see something similar, though with a different error code:&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;# lfs migrate -c 1 /mnt/testfs/pfl-short
lfs migrate: cannot get group lock: Invalid argument (22)
error: lfs migrate: /mnt/testfs/pfl-short: cannot get group lock: Invalid argument
# lfs setstripe -E 1M -c 1 -E 1G -c 4 /mnt/testfs/pfl-short
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;It is possible to add the last component to an existing file to resolve this 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;# lfs setstripe --component-add -E eof -c 30 /mnt/testfs/pfl-short
# lfs migrate -c 1 /mnt/testfs/pfl-short
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;At its core, this issue relates to the same problem as &lt;tt&gt;O_APPEND&lt;/tt&gt; issue - we depend on holding the DLM locks on the whole file to ensure that nobody else is modifying it while the migration is in progress.  That could be fixed by ensuring the layout doesn&apos;t change, but it hasn&apos;t been a priority since very few files actually exist without the last component.&lt;/p&gt;</comment>
                            <comment id="398876" author="sthiell" created="Mon, 8 Jan 2024 20:31:24 +0000"  >&lt;p&gt;Thanks Andreas and interesting!&lt;/p&gt;

&lt;p&gt;I tried to delete the last component to test this:&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;[root@fir-rbh03 ~]# lfs setstripe --comp-del -I 3 /fir/users/anovosel/Seisbench_DATA/stead_mem.csv
[root@fir-rbh03 ~]# lfs getstripe /fir/users/anovosel/Seisbench_DATA/stead_mem.csv
/fir/users/anovosel/Seisbench_DATA/stead_mem.csv
  lcm_layout_gen:    7
  lcm_mirror_count:  1
  lcm_entry_count:   2
    lcme_id:             1
    lcme_mirror_id:      0
    lcme_flags:          init
    lcme_extent.e_start: 0
    lcme_extent.e_end:   4194304
      lmm_stripe_count:  1
      lmm_stripe_size:   4194304
      lmm_pattern:       raid0
      lmm_layout_gen:    0
      lmm_stripe_offset: 125
      lmm_pool:          ssd
      lmm_objects:
      - 0: { l_ost_idx: 125, l_fid: [0x1007d0000:0x3e14ca6:0x0] }

    lcme_id:             2
    lcme_mirror_id:      0
    lcme_flags:          init
    lcme_extent.e_start: 4194304
    lcme_extent.e_end:   17179869184
      lmm_stripe_count:  2
      lmm_stripe_size:   4194304
      lmm_pattern:       raid0
      lmm_layout_gen:    0
      lmm_stripe_offset: 74
      lmm_pool:          hdd
      lmm_objects:
      - 0: { l_ost_idx: 74, l_fid: [0x1004a0000:0x778f9c9:0x0] }
      - 1: { l_ost_idx: 75, l_fid: [0x1004b0000:0x73f371a:0x0] }

&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;But then I got the same Invalid argument error you see:&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;[root@fir-rbh03 ~]# lfs migrate -c 1 /fir/users/anovosel/Seisbench_DATA/stead_mem.csv
lfs migrate: cannot get group lock: Invalid argument (22)
error: lfs migrate: /fir/users/anovosel/Seisbench_DATA/stead_mem.csv: cannot get group lock: Invalid argument
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;And your workaround to add the last component then worked:&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;[root@fir-rbh03 ~]# lfs setstripe --component-add -E eof -c 16 /fir/users/anovosel/Seisbench_DATA/stead_mem.csv
[root@fir-rbh03 ~]# lfs getstripe /fir/users/anovosel/Seisbench_DATA/stead_mem.csv
/fir/users/anovosel/Seisbench_DATA/stead_mem.csv
  lcm_layout_gen:    8
  lcm_mirror_count:  1
  lcm_entry_count:   3
    lcme_id:             1
    lcme_mirror_id:      0
    lcme_flags:          init
    lcme_extent.e_start: 0
    lcme_extent.e_end:   4194304
      lmm_stripe_count:  1
      lmm_stripe_size:   4194304
      lmm_pattern:       raid0
      lmm_layout_gen:    0
      lmm_stripe_offset: 125
      lmm_pool:          ssd
      lmm_objects:
      - 0: { l_ost_idx: 125, l_fid: [0x1007d0000:0x3e14ca6:0x0] }

    lcme_id:             2
    lcme_mirror_id:      0
    lcme_flags:          init
    lcme_extent.e_start: 4194304
    lcme_extent.e_end:   17179869184
      lmm_stripe_count:  2
      lmm_stripe_size:   4194304
      lmm_pattern:       raid0
      lmm_layout_gen:    0
      lmm_stripe_offset: 74
      lmm_pool:          hdd
      lmm_objects:
      - 0: { l_ost_idx: 74, l_fid: [0x1004a0000:0x778f9c9:0x0] }
      - 1: { l_ost_idx: 75, l_fid: [0x1004b0000:0x73f371a:0x0] }

    lcme_id:             8
    lcme_mirror_id:      0
    lcme_flags:          0
    lcme_extent.e_start: 17179869184
    lcme_extent.e_end:   EOF
      lmm_stripe_count:  16
      lmm_stripe_size:   1048576
      lmm_pattern:       raid0
      lmm_layout_gen:    0
      lmm_stripe_offset: -1

[root@fir-rbh03 ~]# lfs migrate -c 1 /fir/users/anovosel/Seisbench_DATA/stead_mem.csv
[root@fir-rbh03 ~]# lfs getstripe /fir/users/anovosel/Seisbench_DATA/stead_mem.csv
/fir/users/anovosel/Seisbench_DATA/stead_mem.csv
lmm_stripe_count:  1
lmm_stripe_size:   1048576
lmm_pattern:       raid0
lmm_layout_gen:    10
lmm_stripe_offset: 134
lmm_pool:          ssd
	obdidx		 objid		 objid		 group
	   134	      25241290	    0x18126ca	             0
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</comment>
                            <comment id="398882" author="sthiell" created="Mon, 8 Jan 2024 20:58:01 +0000"  >&lt;p&gt;Andreas, we noticed something: when the last component is uninitialized, &lt;tt&gt;lfs migrate&lt;/tt&gt; only works when no &lt;tt&gt;lmm_pool&lt;/tt&gt; is assigned.&lt;/p&gt;

&lt;p&gt;Demonstration with another file in that situation:&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;# lfs getstripe /fir/users/anovosel/.ipynb_checkpoints/11_PhaseHunter_SCEDC-checkpoint.ipynb
/fir/users/anovosel/.ipynb_checkpoints/11_PhaseHunter_SCEDC-checkpoint.ipynb
  lcm_layout_gen:    6
  lcm_mirror_count:  1
  lcm_entry_count:   3
    lcme_id:             1
    lcme_mirror_id:      0
    lcme_flags:          init
    lcme_extent.e_start: 0
    lcme_extent.e_end:   4194304
      lmm_stripe_count:  1
      lmm_stripe_size:   4194304
      lmm_pattern:       raid0
      lmm_layout_gen:    0
      lmm_stripe_offset: 117
      lmm_pool:          ssd
      lmm_objects:
      - 0: { l_ost_idx: 117, l_fid: [0x100750000:0x62aaa56:0x0] }

    lcme_id:             2
    lcme_mirror_id:      0
    lcme_flags:          init
    lcme_extent.e_start: 4194304
    lcme_extent.e_end:   17179869184
      lmm_stripe_count:  2
      lmm_stripe_size:   4194304
      lmm_pattern:       raid0
      lmm_layout_gen:    0
      lmm_stripe_offset: 78
      lmm_pool:          hdd
      lmm_objects:
      - 0: { l_ost_idx: 78, l_fid: [0x1004e0000:0x76d69de:0x0] }
      - 1: { l_ost_idx: 76, l_fid: [0x1004c0000:0x77418bb:0x0] }

    lcme_id:             3
    lcme_mirror_id:      0
    lcme_flags:          0
    lcme_extent.e_start: 17179869184
    lcme_extent.e_end:   EOF
      lmm_stripe_count:  16
      lmm_stripe_size:   4194304
      lmm_pattern:       raid0
      lmm_layout_gen:    0
      lmm_stripe_offset: -1
      lmm_pool:          hdd                   &amp;lt;&amp;lt;&amp;lt;

# lfs migrate -c 1 /fir/users/anovosel/.ipynb_checkpoints/11_PhaseHunter_SCEDC-checkpoint.ipynb
lfs migrate: cannot get group lock: No space left on device (28)
error: lfs migrate: /fir/users/anovosel/.ipynb_checkpoints/11_PhaseHunter_SCEDC-checkpoint.ipynb: cannot get group lock: No space left on device
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Delete last component and add it in the hdd pool:&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;# lfs setstripe --comp-del -I 3 /fir/users/anovosel/.ipynb_checkpoints/11_PhaseHunter_SCEDC-checkpoint.ipynb
# lfs setstripe --component-add -E eof -c 16 --pool hdd /fir/users/anovosel/.ipynb_checkpoints/11_PhaseHunter_SCEDC-checkpoint.ipynb
# lfs getstripe /fir/users/anovosel/.ipynb_checkpoints/11_PhaseHunter_SCEDC-checkpoint.ipynb
/fir/users/anovosel/.ipynb_checkpoints/11_PhaseHunter_SCEDC-checkpoint.ipynb
  lcm_layout_gen:    8
  lcm_mirror_count:  1
  lcm_entry_count:   3
    lcme_id:             1
    lcme_mirror_id:      0
    lcme_flags:          init
    lcme_extent.e_start: 0
    lcme_extent.e_end:   4194304
      lmm_stripe_count:  1
      lmm_stripe_size:   4194304
      lmm_pattern:       raid0
      lmm_layout_gen:    0
      lmm_stripe_offset: 117
      lmm_pool:          ssd
      lmm_objects:
      - 0: { l_ost_idx: 117, l_fid: [0x100750000:0x62aaa56:0x0] }

    lcme_id:             2
    lcme_mirror_id:      0
    lcme_flags:          init
    lcme_extent.e_start: 4194304
    lcme_extent.e_end:   17179869184
      lmm_stripe_count:  2
      lmm_stripe_size:   4194304
      lmm_pattern:       raid0
      lmm_layout_gen:    0
      lmm_stripe_offset: 78
      lmm_pool:          hdd
      lmm_objects:
      - 0: { l_ost_idx: 78, l_fid: [0x1004e0000:0x76d69de:0x0] }
      - 1: { l_ost_idx: 76, l_fid: [0x1004c0000:0x77418bb:0x0] }

    lcme_id:             8
    lcme_mirror_id:      0
    lcme_flags:          0
    lcme_extent.e_start: 17179869184
    lcme_extent.e_end:   EOF
      lmm_stripe_count:  16
      lmm_stripe_size:   1048576
      lmm_pattern:       raid0
      lmm_layout_gen:    0
      lmm_stripe_offset: -1
      lmm_pool:          hdd
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Confirmation of failure:&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;[root@fir-rbh03 Seisbench_DATA]# lfs migrate -c 1 /fir/users/anovosel/.ipynb_checkpoints/11_PhaseHunter_SCEDC-checkpoint.ipynb
lfs migrate: cannot get group lock: No space left on device (28)
error: lfs migrate: /fir/users/anovosel/.ipynb_checkpoints/11_PhaseHunter_SCEDC-checkpoint.ipynb: cannot get group lock: No space left on device
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Remove last component and add it without the pool:&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;# lfs setstripe --comp-del -I 8 /fir/users/anovosel/.ipynb_checkpoints/11_PhaseHunter_SCEDC-checkpoint.ipynb
# lfs setstripe --component-add -E eof -c 16 /fir/users/anovosel/.ipynb_checkpoints/11_PhaseHunter_SCEDC-checkpoint.ipynb
# lfs getstripe /fir/users/anovosel/.ipynb_checkpoints/11_PhaseHunter_SCEDC-checkpoint.ipynb
/fir/users/anovosel/.ipynb_checkpoints/11_PhaseHunter_SCEDC-checkpoint.ipynb
  lcm_layout_gen:    10
  lcm_mirror_count:  1
  lcm_entry_count:   3
    lcme_id:             1
    lcme_mirror_id:      0
    lcme_flags:          init
    lcme_extent.e_start: 0
    lcme_extent.e_end:   4194304
      lmm_stripe_count:  1
      lmm_stripe_size:   4194304
      lmm_pattern:       raid0
      lmm_layout_gen:    0
      lmm_stripe_offset: 117
      lmm_pool:          ssd
      lmm_objects:
      - 0: { l_ost_idx: 117, l_fid: [0x100750000:0x62aaa56:0x0] }

    lcme_id:             2
    lcme_mirror_id:      0
    lcme_flags:          init
    lcme_extent.e_start: 4194304
    lcme_extent.e_end:   17179869184
      lmm_stripe_count:  2
      lmm_stripe_size:   4194304
      lmm_pattern:       raid0
      lmm_layout_gen:    0
      lmm_stripe_offset: 78
      lmm_pool:          hdd
      lmm_objects:
      - 0: { l_ost_idx: 78, l_fid: [0x1004e0000:0x76d69de:0x0] }
      - 1: { l_ost_idx: 76, l_fid: [0x1004c0000:0x77418bb:0x0] }

    lcme_id:             10
    lcme_mirror_id:      0
    lcme_flags:          0
    lcme_extent.e_start: 17179869184
    lcme_extent.e_end:   EOF
      lmm_stripe_count:  16
      lmm_stripe_size:   1048576
      lmm_pattern:       raid0
      lmm_layout_gen:    0
      lmm_stripe_offset: -1
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Now, &lt;tt&gt;lfs migrate&lt;/tt&gt; works:&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;[root@fir-rbh03 Seisbench_DATA]# lfs migrate -c 1 /fir/users/anovosel/.ipynb_checkpoints/11_PhaseHunter_SCEDC-checkpoint.ipynb
[root@fir-rbh03 Seisbench_DATA]# 
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;I believe this might be because we have &lt;tt&gt;max_create_count=0&lt;/tt&gt; set on all the OSTs of this &lt;tt&gt;hdd&lt;/tt&gt; OST pool, as we&apos;re in the process of decommissioning all its OSTs.&lt;/p&gt;</comment>
                            <comment id="398884" author="sthiell" created="Mon, 8 Jan 2024 21:18:56 +0000"  >&lt;p&gt;Steps to reproduce:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Create OST pool on MGS (this one is called &quot;empty&quot;):
&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;lctl pool_new elm.empty
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/li&gt;
	&lt;li&gt;Add at least one OST to the pool:
&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;# llctl pool_add elm.empty elm-OST0000
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/li&gt;
	&lt;li&gt;on MDTs, set &lt;tt&gt;max_create_count&lt;/tt&gt; to 0:
&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;# lctl set_param osp.elm-OST0000-osc-MDT*.max_create_count=0
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;ul&gt;
	&lt;li&gt;create PFL file using this pool for the last component
&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;# lfs setstripe -E 1M -c 1 -E 1G -c 4 -E eof -c 16 --pool empty /elm/pfl-test
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;p&gt;Result:&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;# lfs migrate -c 1 /elm/pfl-test
lfs migrate: cannot get group lock: No space left on device (28)
error: lfs migrate: /elm/pfl-test: cannot get group lock: No space left on device
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Tested with 2.15.59&lt;/p&gt;</comment>
                            <comment id="398889" author="sthiell" created="Mon, 8 Jan 2024 21:40:37 +0000"  >&lt;p&gt;By emptying the &lt;tt&gt;hdd&lt;/tt&gt; OST pool, we are able to migrate those files again. No more ENOSPC errors!&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;# lctl pool_remove fir.hdd fir-OST[0024-005f]_UUID
# lctl pool_list fir.hdd
Pool: fir.hdd
# 
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;It&apos;s a bit of a corner case but glad that we were able to understand it.&lt;/p&gt;</comment>
                            <comment id="398897" author="adilger" created="Mon, 8 Jan 2024 23:22:03 +0000"  >&lt;blockquote&gt;
&lt;p&gt;when the last component is uninitialized, lfs migrate only works when no lmm_pool is assigned.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;I think this is &lt;em&gt;mostly&lt;/em&gt; working as expected?  If you are trying to allocate from a pool that is &quot;full&quot; (or otherwise unusable), then &lt;tt&gt;28 = ENOSPC&lt;/tt&gt; should be returned when no objects can be allocated from that pool.  &quot;&lt;tt&gt;lfs migrate&lt;/tt&gt;&quot; should be using the pool (if any) from the last &lt;b&gt;in use&lt;/b&gt; component, rather than the last &quot;existing&quot; component, but it doesn&apos;t quite seem to be the case here.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Now, &lt;tt&gt;lfs migrate&lt;/tt&gt; works:&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;# lfs migrate -c 1 /fir/users/anovosel/.ipynb_checkpoints/11_PhaseHunter_SCEDC-checkpoint.ipynb
#
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;I believe this might be because we have &lt;tt&gt;max_create_count=0&lt;/tt&gt; set on all the OSTs of this &lt;tt&gt;hdd&lt;/tt&gt; OST pool, as we&apos;re in the process of decommissioning all its OSTs.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;It would be interesting to get the &quot;&lt;tt&gt;lfs getstripe&lt;/tt&gt;&quot; on this file after the migration.  Is it using pool &quot;&lt;tt&gt;ssd&lt;/tt&gt;&quot; because that is the one used on the first component, or inheriting from the parent directory because of &quot;&lt;tt&gt;&amp;#45;c 1&lt;/tt&gt;&quot;?&lt;/p&gt;

&lt;p&gt;Note that you can configure &quot;pool spilling&quot; so that allocations that target one pool (&quot;&lt;tt&gt;hdd&lt;/tt&gt;&quot; in this case) are redirected to a different pool (&quot;&lt;tt&gt;ssd&lt;/tt&gt;&quot; in this case) when the pool usage is above a usage threshold:&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;lctl set_param lov.*.pool.hdd.spill_target=ssd lov.*.pool.hdd.spill_threshold_pct=1
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Note that it isn&apos;t possible to set the &lt;tt&gt;spill_threshold_pct=0&lt;/tt&gt;, since that also means &quot;disabled&quot;, but I don&apos;t think that matters here.  It looks like the pool spilling properly handles the case of all OSTs in the pool being marked with &lt;tt&gt;max_create_count=0&lt;/tt&gt;, or at least with patch &lt;a href=&quot;https://review.whamcloud.com/50250&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://review.whamcloud.com/50250&lt;/a&gt; &quot;&lt;tt&gt;&lt;a href=&quot;https://jira.whamcloud.com/browse/LU-16623&quot; title=&quot;lod_statfs_and_check() does not skip unusable OSTs&quot; class=&quot;issue-link&quot; data-issue-key=&quot;LU-16623&quot;&gt;&lt;del&gt;LU-16623&lt;/del&gt;&lt;/a&gt; lod: handle object allocation consistently&lt;/tt&gt;&quot; applied (I don&apos;t have a system without that patch to test).&lt;/p&gt;
</comment>
                            <comment id="398902" author="sthiell" created="Mon, 8 Jan 2024 23:42:41 +0000"  >&lt;blockquote&gt;&lt;p&gt;I think this is mostly working as expected? If you are trying to allocate from a pool that is &quot;full&quot; (or otherwise unusable), then 28 = ENOSPC should be returned when no objects can be allocated from that pool. &quot;lfs migrate&quot; should be using the pool (if any) from the last in use component, rather than the last &quot;existing&quot; component, but it doesn&apos;t quite seem to be the case here.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Yes, I think it&apos;s working as expected in the end, I was confused at first but it now makes sense and I also missed that the pool might be preserved if not explictly specified so in that case ENOSPC makes sense!&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;It would be interesting to get the &quot;lfs getstripe&quot; on this file after the migration. Is it using pool &quot;ssd&quot; because that is the one used on the first component, or inheriting from the parent directory because of &quot;-c 1&quot;?&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;It is using the pool &quot;ssd&quot;:&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;# lfs getstripe /fir/users/anovosel/.ipynb_checkpoints/11_PhaseHunter_SCEDC-checkpoint.ipynb
/fir/users/anovosel/.ipynb_checkpoints/11_PhaseHunter_SCEDC-checkpoint.ipynb
lmm_stripe_count:  1
lmm_stripe_size:   1048576
lmm_pattern:       raid0
lmm_layout_gen:    14
lmm_stripe_offset: 129
lmm_pool:          ssd
	obdidx		 objid		 objid		 group
	   129	      25344189	    0x182b8bd	             0
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;If inherited from the parent directory, our default striping is set at the root level, which indeed has a first component with the pool &quot;ssd&quot;:&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;# lfs getstripe -d /fir
  lcm_layout_gen:    0
  lcm_mirror_count:  1
  lcm_entry_count:   3
    lcme_id:             N/A
    lcme_mirror_id:      N/A
    lcme_flags:          0
    lcme_extent.e_start: 0
    lcme_extent.e_end:   4194304
      stripe_count:  1       stripe_size:   4194304       pattern:       raid0       stripe_offset: -1       pool:          ssd

    lcme_id:             N/A
    lcme_mirror_id:      N/A
    lcme_flags:          0
    lcme_extent.e_start: 4194304
    lcme_extent.e_end:   17179869184
      stripe_count:  2       stripe_size:   4194304       pattern:       raid0       stripe_offset: -1

    lcme_id:             N/A
    lcme_mirror_id:      N/A
    lcme_flags:          0
    lcme_extent.e_start: 17179869184
    lcme_extent.e_end:   EOF
      stripe_count:  16       stripe_size:   4194304       pattern:       raid0       stripe_offset: -1
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Noted about the &quot;pool spilling&quot; feature. Thanks Andreas!&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10011">
                    <name>Related</name>
                                            <outwardlinks description="is related to ">
                                        <issuelink>
            <issuekey id="45980">LU-9479</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="58668">LU-13420</issuekey>
        </issuelink>
            <issuelink>
            <issuekey id="56863">LU-12738</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|i046rz:</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>