Bug 1956383 - rebuilding xleases using vdsm-tool fails when SD is not setup using defaults
Summary: rebuilding xleases using vdsm-tool fails when SD is not setup using defaults
Keywords:
Status: NEW
Alias: None
Product: Red Hat Enterprise Virtualization Manager
Classification: Red Hat
Component: vdsm
Version: 4.4.6
Hardware: x86_64
OS: Linux
unspecified
low
Target Milestone: ovirt-4.4.9
: ---
Assignee: Roman Bednář
QA Contact: Avihai
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2021-05-03 15:08 UTC by Roman Bednář
Modified: 2021-05-10 10:26 UTC (History)
4 users (show)

Fixed In Version:
Doc Type: If docs needed, set a value
Doc Text:
Clone Of:
Environment:
Last Closed:
oVirt Team: Storage
Target Upstream Version:


Attachments (Terms of Use)

Description Roman Bednář 2021-05-03 15:08:37 UTC
Rebuilding index of xleases volume using vdsm-tool fails when storage domain is configured to use different block size than 512 bytes and alignment of 1M. This happens because vdsm-tool does not detect the block size and alignment like vdsm-client does and always uses defaults (512/1M).

This should be fixed probably by adding block size and alignment options to 'vdsm-tool rebuild-leases'. The case shown below does not break the index due to early failure to read metadata but there might be other cases as well that could lead to destroying the index (would require more testing, 4k/1M?).

How reproducible:
100%

Steps to reproduce:
To setup 4k storage domain we can use gluster with 4k loopback device.

Gluster installation can be done via script [1] and volume properties need to be
changed to enable 4k and set vdsm permissions, see config script [2].

Example configuration:

[root@gluster]# losetup
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE           DIO LOG-SEC
/dev/loop1         0      0         0  0 /var/disks/disk1_4k   0    4096

[root@gluster]# gluster volume info
Volume Name: brick1_4k
Type: Distribute
Volume ID: f6459a93-eddc-4a22-bbff-2f1146cb0c92
Status: Started
Snapshot Count: 0
Number of Bricks: 1
Transport-type: tcp
Bricks:
Brick1: node1:/mnt/bricks/lo_brick1_4k/data
Options Reconfigured:
nfs.disable: on
transport.address-family: inet
storage.fips-mode-rchecksum: on
network.remote-dio: disable
storage.owner-uid: 36
storage.owner-gid: 36

[root@gluster]# mount | grep brick
/dev/loop1 on /mnt/bricks/lo_brick1_4k type ext4 (rw,relatime,seclabel)

Configure engine max hosts to more than 1000 hosts to get 8M alignment.
Using lower alignment (less hosts) should reproduce this bug as well:

[root@engine]# engine-config -g MaxNumberOfHostsInStoragePool
MaxNumberOfHostsInStoragePool: 2000 version: general

[root@engine]# systemctl restart ovirt-engine

Create a new data gluster storage domain in ovirt gui.

Check storage domain alignment and block size is set as expected on host:

[root@host]# vdsm-client StorageDomain dump sd_id=06408f74-2de7-44b4-a990-3faf4da5944d
{
    "metadata": {
        "alignment": 8388608,
        "block_size": 4096,
        "class": "Data",
        "name": "domain_gluster_4k",
        "pool": [
            "4fc1c8aa-6245-11eb-83ae-525400ea2c38"
        ],
        "remotePath": "node1:/brick1_4k",
        "role": "Regular",
        "type": "GLUSTERFS",
        "uuid": "06408f74-2de7-44b4-a990-3faf4da5944d",
        "version": "5"
    },
    "volumes": {}
}

Run vdsm-tool to attempt index rebuild:

[root@host]# vdsm-tool rebuild-xleases 06408f74-2de7-44b4-a990-3faf4da5944d /rhev/data-center/mnt/glusterSD/node1:_brick1__4k/06408f74-2de7-44b4-a990-3faf4da5944d/dom_md/xleases
Traceback (most recent call last):
  File "/usr/bin/vdsm-tool", line 209, in main
    return tool_command[cmd]["command"](*args)
  File "/usr/lib/python3.6/site-packages/vdsm/tool/xleases.py", line 118, in rebuild_xleases
    xlease.rebuild_index(args.sd_id, backend)
  File "/usr/lib/python3.6/site-packages/vdsm/storage/xlease.py", line 800, in rebuild_index
    meta = index.read_metadata()
  File "/usr/lib/python3.6/site-packages/vdsm/storage/xlease.py", line 1049, in read_metadata
    return IndexMetadata.fromebytes(data)
  File "/usr/lib/python3.6/site-packages/vdsm/storage/xlease.py", line 336, in fromebytes
    raise InvalidMetadata("invalid magic: %s" % magic, data)
vdsm.storage.xlease.InvalidMetadata: Invalid index metadata (invalid magic: 0), the index must be formatted or rebuilt from storage: b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'


Tested with:
vdsm-4.40.60.4-11.git6a1827b00.el8.x86_64


[1] https://github.com/oVirt/vdsm/blob/master/contrib/deploy-gluster.sh
[2] https://github.com/oVirt/vdsm/blob/master/contrib/create-gluster-volume.sh


Note You need to log in before you can comment on or make changes to this bug.