Codebase list libblockdev / 51c7f86
lvm-dbus: Add support for changing compression and deduplication For LVM VDO pools LVM DBus API initally didn't support enabling and disabling deduplication and compression so this wasn't part of the original LVM VDO support. Vojtech Trefny 2 years ago
2 changed file(s) with 74 addition(s) and 19 deletion(s). Raw diff Collapse all Expand all
374374 } else
375375 return TRUE;
376376 case BD_LVM_TECH_VDO:
377 if (mode & BD_LVM_TECH_MODE_MODIFY) {
378 g_set_error (error, BD_LVM_ERROR, BD_LVM_ERROR_TECH_UNAVAIL,
379 "Modifying existing LVM VDO devices is not supported by this plugin implementation.");
380 return FALSE;
381
382 } else
383 return check_dbus_deps (&avail_dbus_deps, DBUS_DEPS_LVMDBUSD_MASK, dbus_deps, DBUS_DEPS_LAST, &deps_check_lock, error) &&
384 check_features (&avail_features, FEATURES_VDO_MASK, features, FEATURES_LAST, &deps_check_lock, error) &&
385 check_module_deps (&avail_module_deps, MODULE_DEPS_VDO_MASK, module_deps, MODULE_DEPS_LAST, &deps_check_lock, error);
377 return check_dbus_deps (&avail_dbus_deps, DBUS_DEPS_LVMDBUSD_MASK, dbus_deps, DBUS_DEPS_LAST, &deps_check_lock, error) &&
378 check_features (&avail_features, FEATURES_VDO_MASK, features, FEATURES_LAST, &deps_check_lock, error) &&
379 check_module_deps (&avail_module_deps, MODULE_DEPS_VDO_MASK, module_deps, MODULE_DEPS_LAST, &deps_check_lock, error);
386380 default:
387381 /* everything is supported by this implementation of the plugin */
388382 return check_dbus_deps (&avail_dbus_deps, DBUS_DEPS_LVMDBUSD_MASK, dbus_deps, DBUS_DEPS_LAST, &deps_check_lock, error);
808802 g_free (obj_id);
809803 }
810804
805 static void call_vdopool_method_sync (const gchar *vg_name, const gchar *pool_name, const gchar *method, GVariant *params, GVariant *extra_params, const BDExtraArg **extra_args, gboolean lock_config, GError **error) {
806 gchar *obj_id = g_strdup_printf ("%s/%s", vg_name, pool_name);
807
808 call_lvm_obj_method_sync (obj_id, VDO_POOL_INTF, method, params, extra_params, extra_args, lock_config, error);
809 g_free (obj_id);
810 }
811
811812 static GVariant* get_lv_property (const gchar *vg_name, const gchar *lv_name, const gchar *property, GError **error) {
812813 gchar *lv_spec = NULL;
813814 GVariant *ret = NULL;
34773478 *
34783479 * Tech category: %BD_LVM_TECH_VDO-%BD_LVM_TECH_MODE_MODIFY
34793480 */
3480 gboolean bd_lvm_vdo_enable_compression (const gchar *vg_name UNUSED, const gchar *pool_name UNUSED, const BDExtraArg **extra UNUSED, GError **error) {
3481 return bd_lvm_is_tech_avail (BD_LVM_TECH_VDO, BD_LVM_TECH_MODE_MODIFY, error);
3481 gboolean bd_lvm_vdo_enable_compression (const gchar *vg_name, const gchar *pool_name, const BDExtraArg **extra, GError **error) {
3482 call_vdopool_method_sync (vg_name, pool_name, "EnableCompression", NULL, NULL, extra, TRUE, error);
3483
3484 return (*error == NULL);
34823485 }
34833486
34843487 /**
34933496 *
34943497 * Tech category: %BD_LVM_TECH_VDO-%BD_LVM_TECH_MODE_MODIFY
34953498 */
3496 gboolean bd_lvm_vdo_disable_compression (const gchar *vg_name UNUSED, const gchar *pool_name UNUSED, const BDExtraArg **extra UNUSED, GError **error) {
3497 return bd_lvm_is_tech_avail (BD_LVM_TECH_VDO, BD_LVM_TECH_MODE_MODIFY, error);
3499 gboolean bd_lvm_vdo_disable_compression (const gchar *vg_name, const gchar *pool_name, const BDExtraArg **extra, GError **error) {
3500 call_vdopool_method_sync (vg_name, pool_name, "DisableCompression", NULL, NULL, extra, TRUE, error);
3501
3502 return (*error == NULL);
34983503 }
34993504
35003505 /**
35093514 *
35103515 * Tech category: %BD_LVM_TECH_VDO-%BD_LVM_TECH_MODE_MODIFY
35113516 */
3512 gboolean bd_lvm_vdo_enable_deduplication (const gchar *vg_name UNUSED, const gchar *pool_name UNUSED, const BDExtraArg **extra UNUSED, GError **error) {
3513 return bd_lvm_is_tech_avail (BD_LVM_TECH_VDO, BD_LVM_TECH_MODE_MODIFY, error);
3517 gboolean bd_lvm_vdo_enable_deduplication (const gchar *vg_name, const gchar *pool_name, const BDExtraArg **extra, GError **error) {
3518 call_vdopool_method_sync (vg_name, pool_name, "EnableDeduplication", NULL, NULL, extra, TRUE, error);
3519
3520 return (*error == NULL);
35143521 }
35153522
35163523 /**
35253532 *
35263533 * Tech category: %BD_LVM_TECH_VDO-%BD_LVM_TECH_MODE_MODIFY
35273534 */
3528 gboolean bd_lvm_vdo_disable_deduplication (const gchar *vg_name UNUSED, const gchar *pool_name UNUSED, const BDExtraArg **extra UNUSED, GError **error) {
3529 return bd_lvm_is_tech_avail (BD_LVM_TECH_VDO, BD_LVM_TECH_MODE_MODIFY, error);
3535 gboolean bd_lvm_vdo_disable_deduplication (const gchar *vg_name, const gchar *pool_name, const BDExtraArg **extra, GError **error) {
3536 call_vdopool_method_sync (vg_name, pool_name, "DisableDeduplication", NULL, NULL, extra, TRUE, error);
3537
3538 return (*error == NULL);
35303539 }
35313540
35323541 /**
16181618
16191619 @tag_test(TestTags.SLOW)
16201620 def test_enabla_disable_compression(self):
1621 self.skipTest("Enabling/disabling compression on LVM VDO not implemented in LVM DBus API.")
1621 succ = BlockDev.lvm_vdo_pool_create("testVDOVG", "vdoLV", "vdoPool", 7 * 1024**3, 35 * 1024**3,
1622 300 * 1024**2)
1623 self.assertTrue(succ)
1624
1625 # enabled by default
1626 vdo_info = BlockDev.lvm_vdo_info("testVDOVG", "vdoPool")
1627 self.assertIsNotNone(vdo_info)
1628 self.assertTrue(vdo_info.compression)
1629
1630 # disable compression
1631 succ = BlockDev.lvm_vdo_disable_compression("testVDOVG", "vdoPool")
1632 self.assertTrue(succ)
1633
1634 vdo_info = BlockDev.lvm_vdo_info("testVDOVG", "vdoPool")
1635 self.assertIsNotNone(vdo_info)
1636 self.assertFalse(vdo_info.compression)
1637
1638 # and enable compression back
1639 succ = BlockDev.lvm_vdo_enable_compression("testVDOVG", "vdoPool")
1640 self.assertTrue(succ)
1641
1642 vdo_info = BlockDev.lvm_vdo_info("testVDOVG", "vdoPool")
1643 self.assertIsNotNone(vdo_info)
1644 self.assertTrue(vdo_info.compression)
16221645
16231646 @tag_test(TestTags.SLOW)
16241647 def test_enable_disable_deduplication(self):
1625 self.skipTest("Enabling/disabling deduplication on LVM VDO not implemented in LVM DBus API.")
1648 succ = BlockDev.lvm_vdo_pool_create("testVDOVG", "vdoLV", "vdoPool", 7 * 1024**3, 35 * 1024**3,
1649 300 * 1024**2)
1650 self.assertTrue(succ)
1651
1652 # enabled by default
1653 vdo_info = BlockDev.lvm_vdo_info("testVDOVG", "vdoPool")
1654 self.assertIsNotNone(vdo_info)
1655 self.assertTrue(vdo_info.deduplication)
1656
1657 # disable compression
1658 succ = BlockDev.lvm_vdo_disable_deduplication("testVDOVG", "vdoPool")
1659 self.assertTrue(succ)
1660
1661 vdo_info = BlockDev.lvm_vdo_info("testVDOVG", "vdoPool")
1662 self.assertIsNotNone(vdo_info)
1663 self.assertFalse(vdo_info.deduplication)
1664
1665 # and enable compression back
1666 succ = BlockDev.lvm_vdo_enable_deduplication("testVDOVG", "vdoPool")
1667 self.assertTrue(succ)
1668
1669 vdo_info = BlockDev.lvm_vdo_info("testVDOVG", "vdoPool")
1670 self.assertIsNotNone(vdo_info)
1671 self.assertTrue(vdo_info.deduplication)
16261672
16271673 @tag_test(TestTags.SLOW)
16281674 def test_vdo_pool_convert(self):