Details
-
Bug
-
Resolution: Fixed
-
Minor
-
Lustre 2.7.0
-
3
-
17497
Description
This issue was created by maloo for Isaac Huang <he.huang@intel.com>
This issue relates to the following test suite run: https://testing.hpdd.intel.com/test_sets/f61d2cb6-b2a2-11e4-a8f5-5254006e85c2.
The sub-test test_22 failed with the following error:
27919 != 26845 + 1M after write
It seemed that the test was using 4096 as blocksize for the ZFS OST to estimate quota, which would fail.
On the client:
[root@eagle-44vm2 ~]# cat /proc/fs/lustre/osc/lustre-OST0000-osc-ffff88007a5bb800/import import: name: lustre-OST0000-osc-ffff88007a5bb800 target: lustre-OST0000_UUID state: FULL connect_flags: [ write_grant, server_lock, version, request_portal, truncate_lock, max_byte_per_rpc, early_lock_cancel, adaptive_timeouts, lru_resize, alt_checksum_algorithm, fid_is_enabled, version_recovery, full20, layout_lock, 64bithash, object_max_bytes, jobstats, einprogress, lvb_type, lfsck ] connect_data: flags: 0x404af0e3440478 instance: 1 target_version: 2.6.94.0 initial_grant: 1048576 max_brw_size: 4194304 grant_block_size: 0 grant_inode_size: 0 grant_extent_overhead: 0 cksum_types: 0x2 max_easize: 32768 max_object_bytes: 9223372036854775807 import_flags: [ replayable, pingable, connect_tried ] connection: failover_nids: [ 10.100.4.126@tcp ] current_connection: 10.100.4.126@tcp connection_attempts: 1 generation: 1 in-progress_invalidations: 0 rpcs: inflight: 0 unregistering: 0 timeouts: 0 avg_waittime: 1702 usec service_estimates: services: 1 sec network: 1 sec transactions: last_replay: 0 peer_committed: 0 last_checked: 0 [root@eagle-44vm2 ~]# lctl get_param -n osc.lustre-OST0000-*.blocksize 4096
On the OSS:
[root@eagle-44vm1 lustre]# cat /proc/fs/lustre/osd-zfs/lustre-OST0000/blocksize 131072
This seems to be the code that resets blocksize to 4K
int ofd_statfs(const struct lu_env *env, struct obd_export *exp, ...... if (obd->obd_self_export != exp && ofd_grant_compat(exp, ofd)) { /* clients which don't support OBD_CONNECT_GRANT_PARAM * should not see a block size > page size, otherwise * cl_lost_grant goes mad. Therefore, we emulate a 4KB (=2^12) * block size which is the biggest block size known to work * with all client's page size. */ osfs->os_blocks <<= ofd->ofd_blockbits - COMPAT_BSIZE_SHIFT; osfs->os_bfree <<= ofd->ofd_blockbits - COMPAT_BSIZE_SHIFT; osfs->os_bavail <<= ofd->ofd_blockbits - COMPAT_BSIZE_SHIFT; osfs->os_bsize = 1 << COMPAT_BSIZE_SHIFT; }
I'm not familiar with the code, but if the code is correct then the test should be fixed or skipped for ZFS OSTs.
Definitely there is a need for fuzz in all space accoubting tests. There are Lustre LLOG records written, object index, and other files that are not freed when a file is deleted. As long as the test file is large enough that we can be certain the remaining space is fuzz and not the file failing to be deleted (I think the current test is ok in this regard) then the accounting doesn't need to be totally accurate.
In fact, some tests are having a fuzz much larger than a single block. It might make sense to have an "official fuzz" for each backend, or helper routines to check if a value is within the limits instead of reinventing this for every test that is checking space limits. Not sure if there is something in sanity-quota.sh in this regard already or not, but if yes then it probably makes sense to use them.