Arik Hadas has uploaded a new change for review.
Change subject: keep pauseCode when migrating paused VM
......................................................................
keep pauseCode when migrating paused VM
This patch fix a bug where the pauseCode is cleared on the destination
host when migrating paused VM.
Change-Id: Iead0697bbebba3f261040221b04cd3745d8ef036
Signed-off-by: Arik Hadas <ahadas(a)redhat.com>
---
M vdsm/virt/vm.py
1 file changed, 4 insertions(+), 3 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/01/27801/1
diff --git a/vdsm/virt/vm.py b/vdsm/virt/vm.py
index 1bd9fed..8127402 100644
--- a/vdsm/virt/vm.py
+++ b/vdsm/virt/vm.py
@@ -1952,8 +1952,9 @@
self._ongoingCreations.release()
self.log.debug("_ongoingCreations released")
- if ('migrationDest' in self.conf or 'restoreState' in self.conf) \
- and self.lastStatus != vmstatus.DOWN:
+ migrating = 'migrationDest' in self.conf or \
+ 'restoreState' in self.conf
+ if migrating and self.lastStatus != vmstatus.DOWN:
self._waitForIncomingMigrationFinish()
self.lastStatus = vmstatus.UP
@@ -1961,7 +1962,7 @@
self.conf['pauseCode'] = self._initTimePauseCode
if self._initTimePauseCode == 'ENOSPC':
self.cont()
- else:
+ elif not migrating:
try:
with self._confLock:
del self.conf['pauseCode']
--
To view, visit http://gerrit.ovirt.org/27801
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Iead0697bbebba3f261040221b04cd3745d8ef036
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Arik Hadas <ahadas(a)redhat.com>
Ido Barkan has uploaded a new change for review.
Change subject: Network: Flush all configurators before restoring networks
......................................................................
Network: Flush all configurators before restoring networks
Right now, when there are many networks network service takes time to start
up (think DHCP). After it is up, VDSM removes all networks and configures
it's own persistent networks, which can also take quite some time.
This patch teaches 'vdsm-restore-net-config' to conditionally flush the
network configuration and splits this behaviour to a unit that systemd will
start before the network service.
systemd will now manage the following chain of tasks:
1. vdsm-network-cleanup.service will cleanup system files that configurators may
have written on boot before network configuration daemons run, so no time is
lost by them configuring vdsm networks (and conflict avoidance).
2. after libvirt is up, reconfigure the persistent network configuration of vdsm
using the configured net_configurator.
3. start vdsm and super-vdsm
Note that it would be possible with this change to remove from vdsmd.service
the after vdsm-network.service so that vdsm would start in parallel to the
networks being set up. This could be quite useful so that the engine could
communicate with vdsm as soon as the management network is restored. However,
for now, the engine would see the host unsynched and we have to think carefully
if that is okay and how long that would take.
Change-Id: I9e3d0fb35d608a8b019ad80f7e40f4399e7db479
Signed-off-by: Ido Barkan <ibarkan(a)redhat.com>
---
M .gitignore
M init/systemd/Makefile.am
A init/systemd/vdsm-network-cleanup.service.in.py
M init/systemd/vdsm-network.service.in
M init/sysvinit/vdsmd.init.in
M lib/vdsm/tool/restore_nets.py
M vdsm.spec.in
M vdsm/network/configurators/__init__.py
M vdsm/vdsm-restore-net-config
9 files changed, 56 insertions(+), 12 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/67/38767/1
diff --git a/.gitignore b/.gitignore
index 54cbc46..4245b44 100644
--- a/.gitignore
+++ b/.gitignore
@@ -26,6 +26,7 @@
init/systemd/systemd-vdsmd
init/systemd/vdsm-tmpfiles.d.conf
init/systemd/vdsmd.service
+init/systemd/vdsm-network-cleanup.service
init/systemd/vdsm-network.service
init/sysvinit/supervdsmd.init
init/sysvinit/vdsmd.init
diff --git a/init/systemd/Makefile.am b/init/systemd/Makefile.am
index 07c4ae8..000e267 100644
--- a/init/systemd/Makefile.am
+++ b/init/systemd/Makefile.am
@@ -37,6 +37,7 @@
supervdsmd.service.in \
systemd-vdsmd.in \
vdsmd.service.in \
+ vdsm-network-cleanup.service.in \
vdsm-network.service.in \
vdsm-tmpfiles.d.conf.in \
$(NULL)
diff --git a/init/systemd/vdsm-network-cleanup.service.in.py b/init/systemd/vdsm-network-cleanup.service.in.py
new file mode 100644
index 0000000..b2c8dab
--- /dev/null
+++ b/init/systemd/vdsm-network-cleanup.service.in.py
@@ -0,0 +1,13 @@
+[Unit]
+Description=Virtual Desktop Server Manager network system files cleanup
+Wants=network.target
+Before=network.target network.service NetworkManager.service systemd-networkd.service
+
+[Service]
+Type=oneshot
+EnvironmentFile=-/etc/sysconfig/vdsm
+ExecStart=@VDSMDIR@/vdsm-restore-net-config flush
+RemainAfterExit=yes
+
+[Install]
+WantedBy=multi-user.target
\ No newline at end of file
diff --git a/init/systemd/vdsm-network.service.in b/init/systemd/vdsm-network.service.in
index 9eb3e5e..9570ef5 100644
--- a/init/systemd/vdsm-network.service.in
+++ b/init/systemd/vdsm-network.service.in
@@ -1,7 +1,7 @@
[Unit]
Description=Virtual Desktop Server Manager network restoration
Wants=network.target
-Requires=libvirtd.service
+Requires=vdsm-network-cleanup.service libvirtd.service
After=libvirtd.service
[Service]
@@ -9,7 +9,7 @@
EnvironmentFile=-/etc/sysconfig/vdsm
ExecStartPre=@BINDIR@/vdsm-tool --vvverbose --append --logfile=@VDSMLOGDIR@/upgrade.log upgrade-unified-persistence
ExecStartPre=@BINDIR@/vdsm-tool --vvverbose --append --logfile=@VDSMLOGDIR@/upgrade.log upgrade-3.0.0-networks
-ExecStart=@VDSMDIR@/vdsm-restore-net-config
+ExecStart=@VDSMDIR@/vdsm-restore-net-config restore --no-flush
RemainAfterExit=yes
[Install]
diff --git a/init/sysvinit/vdsmd.init.in b/init/sysvinit/vdsmd.init.in
index 1f8dc64..409ee48 100755
--- a/init/sysvinit/vdsmd.init.in
+++ b/init/sysvinit/vdsmd.init.in
@@ -142,7 +142,7 @@
}
restore_nets(){
- "@PYTHON@" "@VDSMDIR@/vdsm-restore-net-config" || return 1
+ "@PYTHON@" "@VDSMDIR@/vdsm-restore-net-config" restore || return 1
return 0
}
diff --git a/lib/vdsm/tool/restore_nets.py b/lib/vdsm/tool/restore_nets.py
index 99ea9f2..861bf01 100644
--- a/lib/vdsm/tool/restore_nets.py
+++ b/lib/vdsm/tool/restore_nets.py
@@ -38,7 +38,7 @@
def restore():
rc, out, err = utils.execCmd(
- [os.path.join(P_VDSM, 'vdsm-restore-net-config')], raw=True)
+ [os.path.join(P_VDSM, 'vdsm-restore-net-config'), 'restore'], raw=True)
sys.stdout.write(out)
sys.stderr.write(err)
if rc != 0:
diff --git a/vdsm.spec.in b/vdsm.spec.in
index 819178c..e369b33 100644
--- a/vdsm.spec.in
+++ b/vdsm.spec.in
@@ -762,6 +762,7 @@
%if 0%{?with_systemd}
install -Dm 0755 init/systemd/systemd-vdsmd %{buildroot}/usr/lib/systemd/systemd-vdsmd
install -Dm 0644 init/systemd/vdsmd.service %{buildroot}%{_unitdir}/vdsmd.service
+install -Dm 0644 init/systemd/vdsm-network-cleanup.service %{buildroot}%{_unitdir}/vdsm-network-cleanup.service
install -Dm 0644 init/systemd/vdsm-network.service %{buildroot}%{_unitdir}/vdsm-network.service
install -Dm 0644 init/systemd/supervdsmd.service %{buildroot}%{_unitdir}/supervdsmd.service
@@ -868,6 +869,7 @@
/bin/systemctl restart systemd-modules-load.service >/dev/null 2>&1 || :
if [ "$1" -eq 1 ] ; then
/bin/systemctl enable vdsmd.service >/dev/null 2>&1 || :
+ /bin/systemctl enable vdsm-network-cleanup.service >/dev/null 2>&1 || :
/bin/systemctl enable vdsm-network.service >/dev/null 2>&1 || :
/bin/systemctl enable supervdsmd.service >/dev/null 2>&1 || :
fi
@@ -905,6 +907,7 @@
%if 0%{?with_systemd}
%systemd_preun vdsmd.service
%systemd_preun vdsm-network.service
+%systemd_preun vdsm-network-cleanup.service
%systemd_preun supervdsmd.service
%else
if [ "$1" -eq 0 ]; then
@@ -912,6 +915,7 @@
/bin/systemctl --no-reload disable supervdsmd.service > /dev/null 2>&1 || :
/bin/systemctl stop vdsmd.service > /dev/null 2>&1 || :
/bin/systemctl stop vdsm-network.service > /dev/null 2>&1 || :
+ /bin/systemctl stop vdsm-network-cleanup.service > /dev/null 2>&1 || :
/bin/systemctl stop supervdsmd.service > /dev/null 2>&1 || :
fi
exit 0
@@ -1015,6 +1019,7 @@
%if 0%{?with_systemd}
/usr/lib/systemd/systemd-vdsmd
%{_unitdir}/vdsmd.service
+%{_unitdir}/vdsm-network-cleanup.service
%{_unitdir}/vdsm-network.service
%{_unitdir}/supervdsmd.service
%else
diff --git a/vdsm/network/configurators/__init__.py b/vdsm/network/configurators/__init__.py
index 39ad9a6..ce6ce05 100644
--- a/vdsm/network/configurators/__init__.py
+++ b/vdsm/network/configurators/__init__.py
@@ -70,7 +70,7 @@
return RunningConfig().diffFrom(self.runningConfig)
def flush(self):
- libvirt.flush()
+ pass
def configureBridge(self, bridge, **opts):
raise NotImplementedError
diff --git a/vdsm/vdsm-restore-net-config b/vdsm/vdsm-restore-net-config
index 8ffb880..bcd3924 100755
--- a/vdsm/vdsm-restore-net-config
+++ b/vdsm/vdsm-restore-net-config
@@ -28,6 +28,7 @@
from vdsm.config import config
from vdsm import netinfo
from vdsm.constants import P_VDSM_RUN
+from vdsm.tool import unified_persistence, upgrade
# Ifcfg persistence restoration
from network.configurators import ifcfg
@@ -35,6 +36,7 @@
# Unified persistence restoration
from network.api import setupNetworks
from network import configurators
+from network.configurators import libvirt
from vdsm.netconfpersistence import RunningConfig, PersistentConfig
import pkgutil
@@ -46,7 +48,7 @@
configWriter.restorePersistentBackup()
-def unified_restoration():
+def unified_restoration(flush_configurators):
"""
Builds a setupNetworks command from the persistent configuration to set it
as running configuration.
@@ -65,8 +67,9 @@
# Flush vdsm configurations left-overs from any configurator on the system
# so that changes of configurator and persistence system are smooth.
- for configurator_cls in _get_all_configurators():
- configurator_cls().flush()
+ if flush_configurators:
+ _configurator_flush()
+ libvirt.flush()
# Restore non-VDSM network devices (BZ#1188251)
configWriter = ifcfg.ConfigWriter()
@@ -143,17 +146,27 @@
os.utime(file_path, None)
-def restore(force_restore=False):
+def restore(force_restore=False, flush_configurators=True):
if not force_restore and _nets_already_restored(_NETS_RESTORED_MARK):
logging.info('networks already restored. doing nothing.')
return
if config.get('vars', 'net_persistence') == 'unified':
- unified_restoration()
+ unified_restoration(flush_configurators)
else:
ifcfg_restoration()
touch_file(_NETS_RESTORED_MARK)
+
+
+def _configurator_flush():
+ """Flush vdsm configurations left-overs from any configurator on the system
+ so that changes of configurator and persistence system are smooth. Only
+ done if upgrade to unified persistence is not pending"""
+ if (not upgrade._upgrade_needed(
+ unified_persistence.UpgradeUnifiedPersistence)):
+ for configurator_cls in _get_all_configurators():
+ configurator_cls().flush()
if __name__ == '__main__':
@@ -166,14 +179,25 @@
level=logging.DEBUG)
logging.error('Could not init proper logging', exc_info=True)
- parser = optparse.OptionParser("usage: %prog [options] nets_restored_mark")
+ parser = optparse.OptionParser("usage: %prog restore|flush [options]")
force_option_help = "the restore action first tests for an existence of " \
"a mark that is made after the last successful " \
"restore action. Unless this option is used, " \
"restore will be a no-op if this mark exists."
parser.add_option('--force', action='store_true', default=False,
help=force_option_help)
+ parser.add_option('--no-flush', dest='flush_configurators', default=True,
+ action='store_false')
options, args = parser.parse_args()
- restore(options.force)
+ if len(args) != 1 or args[0] not in ['restore', 'flush']:
+ parser.error("Wrong number of arguments. only restore or flush are "
+ "allowed")
+ arg, = args
+ if arg == 'restore':
+ restore(options.force, options.flush_configurators)
+ elif arg == 'flush':
+ if not options.flush_configurators:
+ parser.error('flush cannot be used with --no-flush')
+ _configurator_flush()
--
To view, visit https://gerrit.ovirt.org/38767
To unsubscribe, visit https://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I9e3d0fb35d608a8b019ad80f7e40f4399e7db479
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Ido Barkan <ibarkan(a)redhat.com>
Francesco Romani has uploaded a new change for review.
Change subject: virt: do not use status after getStat()
......................................................................
virt: do not use status after getStat()
the getStat() method already provide an up to date status of the
migration.SourceThread.
It was used because of its side effect to update the internal status,
but its return value provides the very same information of a direct
access to the status field, and also reduces the coupling.
Change-Id: I2f1d330376590d0c4060baa9b13e5496c8b7f9ee
Signed-off-by: Francesco Romani <fromani(a)redhat.com>
---
M vdsm/virt/vm.py
1 file changed, 1 insertion(+), 2 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/22/40522/1
diff --git a/vdsm/virt/vm.py b/vdsm/virt/vm.py
index d0d116c..36a6853 100644
--- a/vdsm/virt/vm.py
+++ b/vdsm/virt/vm.py
@@ -1460,8 +1460,7 @@
self._migrationSourceThread = migration.SourceThread(
self, **params)
self._migrationSourceThread.start()
- self._migrationSourceThread.getStat()
- return self._migrationSourceThread.status
+ return self._migrationSourceThread.getStat()
finally:
self._guestCpuLock.release()
--
To view, visit https://gerrit.ovirt.org/40522
To unsubscribe, visit https://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I2f1d330376590d0c4060baa9b13e5496c8b7f9ee
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Francesco Romani <fromani(a)redhat.com>