Bug 2222960

Summary: Upgrades are inhibited when VDO is not installed
Product: Red Hat Enterprise Linux 8 Reporter: Andy Walsh <awalsh>
Component: vdoAssignee: Andy Walsh <awalsh>
Status: ASSIGNED --- QA Contact: vdo-qe
Severity: medium Docs Contact:
Priority: medium    
Version: 8.7CC: awalsh, cwei, jshimkus, pstodulk
Target Milestone: rcKeywords: Triaged
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Andy Walsh 2023-07-14 15:38:55 UTC
Description of problem:
I have not directly experienced this issue, but based on a report via IRC...

If a user attempts to upgrade from RHEL 8 to RHEL 9 via the LEAPP tooling and they do not have the vdo and kmod-kvdo packages installed, the vdo inhibitor prevents the system from being upgraded.

Actual results:
When kmod-kvdo and vdo packages are not present, the upgrade is inhibited due to the vdo_check.

Expected results:
When kmod-kvdo and vdo packages are not present, the upgrade does not attempt to perform the vdo_check and continues.

Comment 1 Joe Shimkus 2023-07-14 18:49:01 UTC
TL;DR: This is the designed behavior of the CheckVdo LEAPP actor.

Details:
The change in going from pre-RHEL9 to RHEL9 involves the necessary conversion of existing VDOs from being managed via VDO's python-based management to LVM-based management. The CheckVdo LEAPP actor takes an explicitly conservative approach (to prevent loss of access to data) in determining whether or not a block device is one of:

1. non-VDO
2. pre-conversion VDO
3. completed post-conversion VDO
4. incomplete post-conversion VDO (LVM configuration was not completed; e.g., due to a system crash)

A post-conversion VDO is not identified as 'vdo' but as 'lvm'.
To correctly categorize such devices CheckVdo requires a utility that understands the post-conversion VDO format.  The VDO-provided vdoprepareforlvm utility is used to perform this check.

The lack of vdoprepareforlvm (or an unexpected error condition) adds the additional categorization of

5. undetermined

Note that undetermined could be the result of the user (however erroneously) leaving the system without the software to perform the necessary checks.
In keeping with CheckVdo's conservative approach the categorization as undetermined (in addition to pre-conversion VDO and incomplete post-conversion VDO) results in CheckVdo inhibiting upgrade.

As CheckVdo errs on the side of caution if the user knows this to be the case they may specify an override to CheckVdo to allow the upgrade to proceed.

---
From the CheckVdo description:

    Check if VDO devices need to be migrated to lvm management.

    `Background`
    ============
    In RHEL 9.0 the independent VDO management software, `vdo manager`, is
    superseded by LVM management.  Existing VDOs must be converted to LVM-based
    management *before* upgrading to RHEL 9.0.

    The `CheckVdo` actor provides a pre-upgrade check for VDO devices that have
    not been converted and, if any are found, produces an inhibitory report
    during upgrade check phase.   If none are found `CheckVdo` does not produce
    a report concerning such VDO devices.

    As there currently exists the theoretical possibility that a VDO device may
    not complete its conversion to LVM-based management (e.g., via a poorly
    timed system crash during the conversion) `CheckVdo` also provides a
    pre-upgrade check for VDO devices in this state.  If any are found
    `CheckVdo` produces an inhibitory report during upgrade check phase.  If
    none are found `CheckVdo` does not produce a report concerning such VDO
    devices.

    If the VdoConversionInfo model indicates unexpected errors occurred during
    scanning CheckVdo will produce appropriate inhibitory reports.

    If the VdoConversionInfo model indicates conditions exist where VDO devices
    could exist but the necessary software to check was not installed on the
    system CheckVdo will present a dialog to the user. This dialog will ask the
    user to either install the required software if the user knows or is unsure
    that VDO devices exist or to approve the continuation of the upgrade if the
    user is certain that either there are no VDO devices present or that all
    VDO devices have been successfully converted.

    To maximize safety CheckVdo operates against all block devices which
    match the criteria for potential VDO devices.  Given the dynamic nature
    of device presence within a system some devices which may have been present
    during leapp discovery may not be present when CheckVdo runs.  As CheckVdo
    defaults to producing inhibitory reports if a device cannot be checked
    (for any reason) this dynamism may be problematic.  To prevent CheckVdo
    producing an inhibitory report for devices which are dynamically no longer
    present within the system the user may answer the previously mentioned
    dialog in the affirmative when the user knows that all VDO devices have
    been converted.  This will circumvent checks of block devices.