Description of problem:
The documentation in lvm2app.h specifies that lvm_vg_is_clustered() returns 1 if VG is clustered and 0 otherwise. However, the function returns 1024 if VG is clustered. This is because the macro vg_is_clustered in metadata-exported.h is set to
#define vg_is_clustered(vg) (vg_status((vg)) & CLUSTERED)
#define vg_is_clustered(vg) ((vg_status((vg)) & CLUSTERED) ? 1 : 0)
like in the case of for instance lv_is_locked
Other vg_is_* macros exhibit the similar issue.
The incorrect return value breaks the python wrapper as it does
rval = ( lvm_vg_is_clustered(self->vg) == 1) ? Py_True : Py_False;
which always returns Py_False regardless of the VG state.
Steps to Reproduce:
Build and run thic C program
int main(int args, char**argv)
vg_t vg = NULL;
libh = lvm_init(NULL);
vg = lvm_vg_open(libh, <clustered_vg_name>, "r", 0);
printf("ret: %lu\n", lvm_vg_is_clustered(vg));
The program returns "ret: 1024".
lvm_vg_is_clustered() and others should return 1 if the specific flag is set in the VG.
Nice catch! We'll certainly fix this, thanks for the report.
Verified as SanityOnly. No new issues observed during regression testing.
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.
For information on the advisory, and where to find the updated
files, follow the link below.
If the solution does not work for you, open a new bug report.