Changed handling of maxmem/memory balancing in VM Settings
According to changes in 4dc8631010
,
memory balancing is now handled not by a special service but by
magic value of 0 maxmem. Added handling thereof to VM Settings -
also, settings will store the last used maxmem value in
qubesmanager.maxmem_value feature.
fixes QubesOS/qubes-issues#4480
This commit is contained in:
parent
c16b9694b3
commit
9727a0938b
@ -644,22 +644,22 @@ class VMSettingsWindow(ui_settingsdlg.Ui_SettingsDialog, QtGui.QDialog):
|
|||||||
|
|
||||||
def __init_advanced_tab__(self):
|
def __init_advanced_tab__(self):
|
||||||
|
|
||||||
# mem/cpu
|
|
||||||
# qubes_memory = QubesHost().memory_total/1024
|
|
||||||
|
|
||||||
self.init_mem.setValue(int(self.vm.memory))
|
self.init_mem.setValue(int(self.vm.memory))
|
||||||
# self.init_mem.setMaximum(qubes_memory)
|
|
||||||
|
|
||||||
|
if self.vm.maxmem > 0:
|
||||||
self.max_mem_size.setValue(int(self.vm.maxmem))
|
self.max_mem_size.setValue(int(self.vm.maxmem))
|
||||||
# self.max_mem_size.setMaximum(qubes_memory)
|
else:
|
||||||
|
maxmem = self.vm.property_get_default('maxmem')
|
||||||
|
if maxmem == 0:
|
||||||
|
maxmem = self.vm.memory
|
||||||
|
self.max_mem_size.setValue(int(
|
||||||
|
self.vm.features.get('qubesmanager.maxmem_value', maxmem)))
|
||||||
|
|
||||||
self.vcpus.setMinimum(1)
|
self.vcpus.setMinimum(1)
|
||||||
# self.vcpus.setMaximum(QubesHost().no_cpus)
|
|
||||||
self.vcpus.setValue(int(self.vm.vcpus))
|
self.vcpus.setValue(int(self.vm.vcpus))
|
||||||
|
|
||||||
self.include_in_balancing.setEnabled(True)
|
self.include_in_balancing.setEnabled(True)
|
||||||
self.include_in_balancing.setChecked(
|
self.include_in_balancing.setChecked(int(self.vm.maxmem) > 0)
|
||||||
bool(self.vm.features.get('service.meminfo-writer', True)))
|
|
||||||
self.max_mem_size.setEnabled(self.include_in_balancing.isChecked())
|
self.max_mem_size.setEnabled(self.include_in_balancing.isChecked())
|
||||||
|
|
||||||
# in case VM is HVM
|
# in case VM is HVM
|
||||||
@ -713,16 +713,24 @@ class VMSettingsWindow(ui_settingsdlg.Ui_SettingsDialog, QtGui.QDialog):
|
|||||||
if self.init_mem.value() != int(self.vm.memory):
|
if self.init_mem.value() != int(self.vm.memory):
|
||||||
self.vm.memory = self.init_mem.value()
|
self.vm.memory = self.init_mem.value()
|
||||||
|
|
||||||
if self.max_mem_size.value() != int(self.vm.maxmem):
|
curr_maxmem = int(self.vm.maxmem)
|
||||||
self.vm.maxmem = self.max_mem_size.value()
|
|
||||||
|
if not self.include_in_balancing.isChecked():
|
||||||
|
maxmem = 0
|
||||||
|
else:
|
||||||
|
maxmem = self.max_mem_size.value()
|
||||||
|
|
||||||
|
if maxmem != curr_maxmem:
|
||||||
|
if curr_maxmem > 0:
|
||||||
|
self.vm.features['qubesmanager.maxmem_value'] = curr_maxmem
|
||||||
|
self.vm.maxmem = maxmem
|
||||||
|
|
||||||
if self.vcpus.value() != int(self.vm.vcpus):
|
if self.vcpus.value() != int(self.vm.vcpus):
|
||||||
self.vm.vcpus = self.vcpus.value()
|
self.vm.vcpus = self.vcpus.value()
|
||||||
|
|
||||||
except qubesadmin.exc.QubesException as ex:
|
except qubesadmin.exc.QubesException as ex:
|
||||||
msg.append(str(ex))
|
msg.append(str(ex))
|
||||||
|
|
||||||
# include_in_memory_balancing applied in services tab
|
|
||||||
|
|
||||||
# in case VM is not Linux
|
# in case VM is not Linux
|
||||||
if hasattr(self.vm, "kernel") and self.kernel_groupbox.isVisible():
|
if hasattr(self.vm, "kernel") and self.kernel_groupbox.isVisible():
|
||||||
try:
|
try:
|
||||||
@ -748,6 +756,16 @@ class VMSettingsWindow(ui_settingsdlg.Ui_SettingsDialog, QtGui.QDialog):
|
|||||||
|
|
||||||
return msg
|
return msg
|
||||||
|
|
||||||
|
def include_in_balancing_changed(self, state):
|
||||||
|
if self.dev_list.selected_list.count() > 0:
|
||||||
|
if state == ui_settingsdlg.QtCore.Qt.Checked:
|
||||||
|
self.dmm_warning_adv.show()
|
||||||
|
self.dmm_warning_dev.show()
|
||||||
|
else:
|
||||||
|
self.dmm_warning_adv.hide()
|
||||||
|
self.dmm_warning_dev.hide()
|
||||||
|
self.max_mem_size.setEnabled(self.include_in_balancing.isChecked())
|
||||||
|
|
||||||
def boot_from_cdrom_button_pressed(self):
|
def boot_from_cdrom_button_pressed(self):
|
||||||
self.save_and_apply()
|
self.save_and_apply()
|
||||||
subprocess.check_call(['qubes-vm-boot-from-device', self.vm.name])
|
subprocess.check_call(['qubes-vm-boot-from-device', self.vm.name])
|
||||||
@ -932,22 +950,6 @@ class VMSettingsWindow(ui_settingsdlg.Ui_SettingsDialog, QtGui.QDialog):
|
|||||||
|
|
||||||
return msg
|
return msg
|
||||||
|
|
||||||
def include_in_balancing_changed(self, state):
|
|
||||||
for i in range(self.services_list.count()):
|
|
||||||
item = self.services_list.item(i)
|
|
||||||
if str(item.text()) == 'meminfo-writer':
|
|
||||||
item.setCheckState(state)
|
|
||||||
break
|
|
||||||
|
|
||||||
if self.dev_list.selected_list.count() > 0:
|
|
||||||
if state == ui_settingsdlg.QtCore.Qt.Checked:
|
|
||||||
self.dmm_warning_adv.show()
|
|
||||||
self.dmm_warning_dev.show()
|
|
||||||
else:
|
|
||||||
self.dmm_warning_adv.hide()
|
|
||||||
self.dmm_warning_dev.hide()
|
|
||||||
self.max_mem_size.setEnabled(self.include_in_balancing.isChecked())
|
|
||||||
|
|
||||||
def devices_selection_changed(self):
|
def devices_selection_changed(self):
|
||||||
if self.include_in_balancing.isChecked():
|
if self.include_in_balancing.isChecked():
|
||||||
if self.dev_list.selected_list.count() > 0:
|
if self.dev_list.selected_list.count() > 0:
|
||||||
@ -1012,18 +1014,12 @@ class VMSettingsWindow(ui_settingsdlg.Ui_SettingsDialog, QtGui.QDialog):
|
|||||||
self.services_list.addItem(item)
|
self.services_list.addItem(item)
|
||||||
self.new_srv_dict[service] = self.vm.features[feature]
|
self.new_srv_dict[service] = self.vm.features[feature]
|
||||||
|
|
||||||
self.connect(
|
|
||||||
self.services_list,
|
|
||||||
QtCore.SIGNAL("itemClicked(QListWidgetItem *)"),
|
|
||||||
self.services_item_clicked)
|
|
||||||
|
|
||||||
# add suggested services
|
# add suggested services
|
||||||
self.service_line_edit.addItem('clocksync')
|
self.service_line_edit.addItem('clocksync')
|
||||||
self.service_line_edit.addItem('crond')
|
self.service_line_edit.addItem('crond')
|
||||||
self.service_line_edit.addItem('cups')
|
self.service_line_edit.addItem('cups')
|
||||||
self.service_line_edit.addItem('disable-default-route')
|
self.service_line_edit.addItem('disable-default-route')
|
||||||
self.service_line_edit.addItem('disable-dns-server')
|
self.service_line_edit.addItem('disable-dns-server')
|
||||||
self.service_line_edit.addItem('meminfo-writer')
|
|
||||||
self.service_line_edit.addItem('network-manager')
|
self.service_line_edit.addItem('network-manager')
|
||||||
self.service_line_edit.addItem('qubes-firewall')
|
self.service_line_edit.addItem('qubes-firewall')
|
||||||
self.service_line_edit.addItem('qubes-network')
|
self.service_line_edit.addItem('qubes-network')
|
||||||
@ -1053,27 +1049,11 @@ class VMSettingsWindow(ui_settingsdlg.Ui_SettingsDialog, QtGui.QDialog):
|
|||||||
|
|
||||||
if not item:
|
if not item:
|
||||||
return
|
return
|
||||||
if str(item.text()) == 'meminfo-writer':
|
|
||||||
QtGui.QMessageBox.information(
|
|
||||||
self,
|
|
||||||
self.tr('Service can not be removed'),
|
|
||||||
self.tr('Service meminfo-writer can not '
|
|
||||||
'be removed from the list.'))
|
|
||||||
return
|
|
||||||
|
|
||||||
row = self.services_list.currentRow()
|
row = self.services_list.currentRow()
|
||||||
item = self.services_list.takeItem(row)
|
item = self.services_list.takeItem(row)
|
||||||
del self.new_srv_dict[str(item.text())]
|
del self.new_srv_dict[str(item.text())]
|
||||||
|
|
||||||
def services_item_clicked(self, item):
|
|
||||||
if str(item.text()) == 'meminfo-writer':
|
|
||||||
if item.checkState() == ui_settingsdlg.QtCore.Qt.Checked:
|
|
||||||
if not self.include_in_balancing.isChecked():
|
|
||||||
self.include_in_balancing.setChecked(True)
|
|
||||||
elif item.checkState() == ui_settingsdlg.QtCore.Qt.Unchecked:
|
|
||||||
if self.include_in_balancing.isChecked():
|
|
||||||
self.include_in_balancing.setChecked(False)
|
|
||||||
|
|
||||||
def __apply_services_tab__(self):
|
def __apply_services_tab__(self):
|
||||||
msg = []
|
msg = []
|
||||||
|
|
||||||
@ -1083,16 +1063,6 @@ class VMSettingsWindow(ui_settingsdlg.Ui_SettingsDialog, QtGui.QDialog):
|
|||||||
self.new_srv_dict[str(item.text())] = \
|
self.new_srv_dict[str(item.text())] = \
|
||||||
(item.checkState() == ui_settingsdlg.QtCore.Qt.Checked)
|
(item.checkState() == ui_settingsdlg.QtCore.Qt.Checked)
|
||||||
|
|
||||||
balancing_was_checked = self.vm.features.get(
|
|
||||||
'service.meminfo-writer', True)
|
|
||||||
balancing_is_checked = self.include_in_balancing.isChecked()
|
|
||||||
meminfo_writer_checked = self.new_srv_dict.get(
|
|
||||||
'meminfo-writer', True)
|
|
||||||
|
|
||||||
if balancing_is_checked != meminfo_writer_checked:
|
|
||||||
if balancing_is_checked != balancing_was_checked:
|
|
||||||
self.new_srv_dict['meminfo-writer'] = balancing_is_checked
|
|
||||||
|
|
||||||
for service, v in self.new_srv_dict.items():
|
for service, v in self.new_srv_dict.items():
|
||||||
feature = 'service.' + service
|
feature = 'service.' + service
|
||||||
if v != self.vm.features.get(feature, object()):
|
if v != self.vm.features.get(feature, object()):
|
||||||
|
Loading…
Reference in New Issue
Block a user