Discussion:
[linux-lvm] Tagging LVs with Python Bindings
Michael Schmidt
2015-04-06 17:08:28 UTC
Permalink
Hi all,

While working with the Python bindings and attempting to add tags to
logical volume lvm_vg_write seems not to be called. This means if add_tag
is called and the virtual group handle is closed the tags disappear. The
action in _liblvm_lvm_vg_add_tag solves this by calling lvm_vg_write on the
handle itself. Since the lv handle does not seem to have access to it's vg
handle I added a method to the vg just to trigger a write:

--- liblvm.c 2015-04-06 11:55:01.972332429 -0500
+++ liblvm_python.c 2015-04-06 11:47:27.989632725 -0500
@@ -1202,6 +1202,23 @@
return pytuple;
}

+static PyObject *_liblvm_lvm_vg_write(vgobject *self)
+{
+ VG_VALID(self);
+
+ if (lvm_vg_write(self->vg) == -1)
+ goto error;
+
+ return Py_None;
+
+error:
+ PyErr_SetObject(_LibLVMError, _liblvm_get_last_error());
+
+ Py_INCREF(Py_None);
+ return NULL;
+}
+
+
typedef lv_t (*lv_fetch_by_N)(vg_t vg, const char *id);
typedef pv_t (*pv_fetch_by_N)(vg_t vg, const char *id);

@@ -1854,6 +1871,7 @@
{ "createLvLinear",
(PyCFunction)_liblvm_lvm_vg_create_lv_linear, METH_VARARGS },
{ "createLvThinpool",
(PyCFunction)_liblvm_lvm_vg_create_lv_thinpool, METH_VARARGS },
{ "createLvThin", (PyCFunction)_liblvm_lvm_vg_create_lv_thin,
METH_VARARGS },
+ { "write", (PyCFunction)_liblvm_lvm_vg_write, METH_VARARGS },
{ NULL, NULL } /* sentinel */
};



My question is: is there a better way to accomplish this?

Thanks,

Mike
--
Michael T Schmidt | schmidmt.com | duality.io
Tony Asleson
2015-04-07 20:54:15 UTC
Permalink
Post by Michael Schmidt
Hi all,
While working with the Python bindings and attempting to add tags to
logical volume lvm_vg_write seems not to be called. This means if add_tag
is called and the virtual group handle is closed the tags disappear.
Thanks for reporting this!
Post by Michael Schmidt
The
action in _liblvm_lvm_vg_add_tag solves this by calling lvm_vg_write on the
handle itself. Since the lv handle does not seem to have access to it's vg
The python bindings were written with the expectation that the state
changes would be saved automatically. So adding a call for the user to
issue a write on the vg goes against the overall design.

...
Post by Michael Schmidt
My question is: is there a better way to accomplish this?
In this case we should issue the lvm_vg_write in the add/remove tag
calls for the lv. The lv structure has a pointer to the parent vg in
the python binding.

I submitted a patch which does this and improves the unit test to test
for this.

Any bugzilla submitted for this?

Regards,
Tony
Tony Asleson
2015-04-08 17:10:11 UTC
Permalink
Much appreciated. I'll integrated your fix into the build I have.
I looked through Bugzilla and didn't see anything and decided it would be
more straight forward to ask if there was an existing method to solve the
problem before suggesting it was a bug.
Definitely a bug :-)

https://bugzilla.redhat.com/show_bug.cgi?id=1210020

Thanks!
-Tony

Loading...