[virt-tools-list] [PATCH] virt-manager: Add support for fs write policy
Deepak C Shetty
deepakcs at linux.vnet.ibm.com
Wed Jan 18 18:52:02 UTC 2012
This introduces new attribute wrpolicy with only supported
value as immediate. This helps specify whether to skip the
host page cache.
When wrpolicy is specified, meaning when wrpolicy=immediate
a writeback is explicitly initiated for the dirty pages in
the host page cache as part of the guest file write operation
Signed-off-by: Deepak C Shetty <deepakcs at linux.vnet.ibm.com>
---
src/virtManager/addhardware.py | 36 +++++++++++++++++++----
src/virtManager/details.py | 3 ++
src/vmm-add-hardware.glade | 64 ++++++++++++++++++++++++++++++++++------
src/vmm-details.glade | 55 ++++++++++++++++++++++++++--------
4 files changed, 128 insertions(+), 30 deletions(-)
diff --git a/src/virtManager/addhardware.py b/src/virtManager/addhardware.py
index 8687c1f..a61dec2 100644
--- a/src/virtManager/addhardware.py
+++ b/src/virtManager/addhardware.py
@@ -329,6 +329,7 @@ class vmmAddHardware(vmmGObjectUI):
VirtualFilesystem.TYPE_TEMPLATE])
simple_store_set("fs-mode-combo", VirtualFilesystem.MOUNT_MODES)
simple_store_set("fs-driver-combo", VirtualFilesystem.DRIVER_TYPES)
+ simple_store_set("fs-wrpolicy-combo", VirtualFilesystem.WRPOLICIES)
self.show_pair_combo("fs-type", self.conn.is_openvz())
self.show_check_button("fs-readonly", self.conn.is_qemu())
@@ -483,6 +484,7 @@ class vmmAddHardware(vmmGObjectUI):
self.widget("fs-type-combo").set_active(0)
self.widget("fs-mode-combo").set_active(0)
self.widget("fs-driver-combo").set_active(0)
+ self.widget("fs-wrpolicy-combo").set_active(0)
self.widget("fs-source").set_text("")
self.widget("fs-target").set_text("")
self.widget("fs-readonly").set_active(False)
@@ -729,6 +731,15 @@ class vmmAddHardware(vmmGObjectUI):
return None
return combo.get_model()[combo.get_active()][0]
+
+ def get_config_fs_wrpolicy(self):
+ name = "fs-wrpolicy-combo"
+ combo = self.widget(name)
+ if not combo.get_property("visible"):
+ return None
+
+ return combo.get_model()[combo.get_active()][0]
+
def get_config_fs_type(self):
name = "fs-type-combo"
combo = self.widget(name)
@@ -1039,6 +1050,7 @@ class vmmAddHardware(vmmGObjectUI):
fstype = None
show_mode_combo = False
show_driver_combo = False
+ show_wrpolicy_combo = self.conn.is_qemu()
if idx >= 0 and src.get_property("visible"):
fstype = src.get_model()[idx][0]
@@ -1054,24 +1066,33 @@ class vmmAddHardware(vmmGObjectUI):
self.widget("fs-source-title").set_use_underline(True)
self.show_pair_combo("fs-mode", show_mode_combo)
self.show_pair_combo("fs-driver", show_driver_combo)
+ self.show_pair_combo("fs-wrpolicy", show_wrpolicy_combo)
def change_fs_driver(self, src):
idx = src.get_active()
fsdriver = None
- combo = self.widget("fs-mode-combo")
- label1 = self.widget("fs-mode-title")
+ modecombo = self.widget("fs-mode-combo")
+ modelabel1 = self.widget("fs-mode-title")
+ wrpcombo = self.widget("fs-wrpolicy-combo")
+ wrplabel1 = self.widget("fs-wrpolicy-title")
if idx >= 0 and src.get_property("visible"):
fsdriver = src.get_model()[idx][0]
if (fsdriver == virtinst.VirtualFilesystem.DRIVER_PATH or
fsdriver == virtinst.VirtualFilesystem.DRIVER_DEFAULT):
- combo.set_property("visible", True)
- label1.set_property("visible", True)
+ modecombo.set_property("visible", True)
+ modelabel1.set_property("visible", True)
else:
- combo.set_property("visible", False)
- label1.set_property("visible", False)
+ modecombo.set_property("visible", False)
+ modelabel1.set_property("visible", False)
+ if (fsdriver == virtinst.VirtualFilesystem.DRIVER_DEFAULT):
+ wrpcombo.set_property("visible", False)
+ wrplabel1.set_property("visible", False)
+ else:
+ wrpcombo.set_property("visible", True)
+ wrplabel1.set_property("visible", True)
@@ -1423,6 +1444,7 @@ class vmmAddHardware(vmmGObjectUI):
fstype = self.get_config_fs_type()
readonly = self.get_config_fs_readonly()
driver = self.get_config_fs_driver()
+ wrpolicy = self.get_config_fs_wrpolicy()
if not source:
return self.err.val_err(_("A filesystem source must be specified"))
@@ -1445,6 +1467,8 @@ class vmmAddHardware(vmmGObjectUI):
self._dev.readonly = readonly
if driver:
self._dev.driver = driver
+ if wrpolicy:
+ self._dev.wrpolicy = wrpolicy
except Exception, e:
return self.err.val_err(_("Filesystem parameter error"), e)
diff --git a/src/virtManager/details.py b/src/virtManager/details.py
index 8081cd5..670e3f7 100644
--- a/src/virtManager/details.py
+++ b/src/virtManager/details.py
@@ -3183,6 +3183,9 @@ class vmmDetails(vmmGObjectUI):
self.show_pair("fs-mode", False)
self.widget("fs-driver").set_text(dev.driver or _("Default"))
+
+ self.widget("fs-wrpolicy").set_text(dev.wrpolicy or _("Default"))
+
self.widget("fs-source").set_text(dev.source)
self.widget("fs-target").set_text(dev.target)
if dev.readonly:
diff --git a/src/vmm-add-hardware.glade b/src/vmm-add-hardware.glade
index f19b727..c800ab6 100644
--- a/src/vmm-add-hardware.glade
+++ b/src/vmm-add-hardware.glade
@@ -2165,6 +2165,50 @@ access in the guest.</property>
</packing>
</child>
<child>
+ <widget class="GtkLabel" id="fs-wrpolicy-title">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">_Write Policy:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">fs-wrpolicy-combo</property>
+ </widget>
+ <packing>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHBox" id="hbox12">
+ <property name="visible">True</property>
+ <child>
+ <widget class="GtkComboBox" id="fs-wrpolicy-combo">
+ <property name="visible">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="fs-wrpolicy-label">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Default</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ </packing>
+ </child>
+ <child>
<widget class="GtkLabel" id="fs-source-title">
<property name="visible">True</property>
<property name="xalign">0</property>
@@ -2173,8 +2217,8 @@ access in the guest.</property>
<property name="mnemonic_widget">fs-source</property>
</widget>
<packing>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
<property name="x_options">GTK_FILL</property>
</packing>
</child>
@@ -2187,8 +2231,8 @@ access in the guest.</property>
<property name="mnemonic_widget">fs-target</property>
</widget>
<packing>
- <property name="top_attach">4</property>
- <property name="bottom_attach">5</property>
+ <property name="top_attach">5</property>
+ <property name="bottom_attach">6</property>
<property name="x_options">GTK_FILL</property>
</packing>
</child>
@@ -2201,8 +2245,8 @@ access in the guest.</property>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
- <property name="top_attach">4</property>
- <property name="bottom_attach">5</property>
+ <property name="top_attach">5</property>
+ <property name="bottom_attach">6</property>
</packing>
</child>
<child>
@@ -2217,8 +2261,8 @@ access in the guest.</property>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
- <property name="top_attach">5</property>
- <property name="bottom_attach">6</property>
+ <property name="top_attach">6</property>
+ <property name="bottom_attach">7</property>
</packing>
</child>
<child>
@@ -2253,8 +2297,8 @@ access in the guest.</property>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
</packing>
</child>
</widget>
diff --git a/src/vmm-details.glade b/src/vmm-details.glade
index 77c644e..f0a9cf8 100644
--- a/src/vmm-details.glade
+++ b/src/vmm-details.glade
@@ -5753,10 +5753,10 @@ I/O:</property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label65">
+ <widget class="GtkLabel" id="fs-wrpolicy-title">
<property name="visible">True</property>
<property name="xalign">0</property>
- <property name="label" translatable="yes">Source:</property>
+ <property name="label" translatable="yes">Write Policy:</property>
</widget>
<packing>
<property name="top_attach">3</property>
@@ -5766,14 +5766,14 @@ I/O:</property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="fs-readonly-title">
+ <widget class="GtkLabel" id="label65">
<property name="visible">True</property>
<property name="xalign">0</property>
- <property name="label" translatable="yes">Readonly:</property>
+ <property name="label" translatable="yes">Source:</property>
</widget>
<packing>
- <property name="top_attach">5</property>
- <property name="bottom_attach">6</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
@@ -5785,8 +5785,21 @@ I/O:</property>
<property name="label" translatable="yes">Target:</property>
</widget>
<packing>
- <property name="top_attach">4</property>
- <property name="bottom_attach">5</property>
+ <property name="top_attach">5</property>
+ <property name="bottom_attach">6</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="fs-readonly-title">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Readonly Filesystem:</property>
+ </widget>
+ <packing>
+ <property name="top_attach">6</property>
+ <property name="bottom_attach">7</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
@@ -5820,11 +5833,10 @@ I/O:</property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="fs-source">
+ <widget class="GtkLabel" id="fs-wrpolicy">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label">label</property>
- <property name="ellipsize">end</property>
</widget>
<packing>
<property name="left_attach">1</property>
@@ -5835,7 +5847,22 @@ I/O:</property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="fs-readonly">
+ <widget class="GtkLabel" id="fs-source">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label">label</property>
+ <property name="ellipsize">end</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="fs-target">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label">label</property>
@@ -5850,7 +5877,7 @@ I/O:</property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="fs-target">
+ <widget class="GtkLabel" id="fs-readonly">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label">label</property>
@@ -5859,8 +5886,8 @@ I/O:</property>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
- <property name="top_attach">4</property>
- <property name="bottom_attach">5</property>
+ <property name="top_attach">6</property>
+ <property name="bottom_attach">7</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
More information about the virt-tools-list
mailing list