Nir Soffer has posted comments on this change. Change subject: Live Merge: work around racy libvirt pivot ......................................................................
Patch Set 1: (6 comments) https://gerrit.ovirt.org/#/c/39303/1/vdsm/virt/vm.py File vdsm/virt/vm.py: Line 5090 Line 5091 Line 5092 Line 5093 Line 5094 Here we know that the pivot was successful - can we update our meta data at this point without waiting for libvirt? Line 5060: self.drive = drive Line 5061: self.doPivot = doPivot Line 5062: self.success = False Line 5063: Line 5064: def _waitForBuggyLibvirt(self): How about _waitForUpdatedXML() of waitUntilXMLIsUpdated() Also, can you move this private helper to the end of the class? Line 5065: # Libvirt version 1.2.8-16.el7_1.2 introduced a bug where the Line 5066: # synchronous call to blockJobAbort will return before the domain XML Line 5067: # has been updated. This makes it look like the pivot failed when it Line 5068: # actually succeeded. This means that vdsm state will not be properly Line 5072: # Line 5073: # TODO: Remove once we depend on a libvirt with this bug fixed. Line 5074: origVols = [x['volumeID'] for x in self.drive.volumeChain] Line 5075: alias = self.drive['alias'] Line 5076: while True: Are we going to wait for this forever? Maybe we need timeout or retry count? Line 5077: chains = self.vm._driveGetActualVolumeChain([self.drive]) Line 5078: try: Line 5079: curVols = chains[alias] Line 5080: except KeyError: Line 5073: # TODO: Remove once we depend on a libvirt with this bug fixed. Line 5074: origVols = [x['volumeID'] for x in self.drive.volumeChain] Line 5075: alias = self.drive['alias'] Line 5076: while True: Line 5077: chains = self.vm._driveGetActualVolumeChain([self.drive]) Does it return many chains or one? Line 5078: try: Line 5079: curVols = chains[alias] Line 5080: except KeyError: Line 5081: raise RuntimeError("Failed to retrieve volume chain for " Line 5080: except KeyError: Line 5081: raise RuntimeError("Failed to retrieve volume chain for " Line 5082: "drive:%s. Pivot failed.") Line 5083: if len(curVols) < len(origVols): Line 5084: # The merged volume has now been removed from the chain Lets log here that xml was updated? Line 5085: break Line 5086: Line 5087: self.vm.log.debug("Waiting for libvirt to update the XML after " Line 5088: "pivot of drive %s completed", alias) Line 5084: # The merged volume has now been removed from the chain Line 5085: break Line 5086: Line 5087: self.vm.log.debug("Waiting for libvirt to update the XML after " Line 5088: "pivot of drive %s completed", alias) Lets log this once at the start Line 5089: time.sleep(1) Line 5090: Line 5091: def tryPivot(self): Line 5092: # We call imageSyncVolumeChain which will mark the current leaf -- To view, visit https://gerrit.ovirt.org/39303 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: I1e794622baf66c75cbe583be03a7b9a4a7e4883d Gerrit-PatchSet: 1 Gerrit-Project: vdsm Gerrit-Branch: master Gerrit-Owner: Adam Litke <[email protected]> Gerrit-Reviewer: Adam Litke <[email protected]> Gerrit-Reviewer: Allon Mureinik <[email protected]> Gerrit-Reviewer: Dan Kenigsberg <[email protected]> Gerrit-Reviewer: Federico Simoncelli <[email protected]> Gerrit-Reviewer: Francesco Romani <[email protected]> Gerrit-Reviewer: Greg Padgett <[email protected]> Gerrit-Reviewer: Nir Soffer <[email protected]> Gerrit-Reviewer: [email protected] Gerrit-Reviewer: oVirt Jenkins CI Server Gerrit-HasComments: Yes _______________________________________________ vdsm-patches mailing list [email protected] https://lists.fedorahosted.org/mailman/listinfo/vdsm-patches
