Change in vdsm[master]: revert 484246d: Live Merge: Add new scanVolumeChain API
alitke at redhat.com
alitke at redhat.com
Wed Mar 19 21:35:30 UTC 2014
Adam Litke has uploaded a new change for review.
Change subject: revert 484246d: Live Merge: Add new scanVolumeChain API
......................................................................
revert 484246d: Live Merge: Add new scanVolumeChain API
Change-Id: Ie22a58d00e0b980df2a0193f160c919f0e8acf57
Signed-off-by: Adam Litke <alitke at redhat.com>
---
M client/vdsClient.py
M vdsm/API.py
M vdsm/BindingXMLRPC.py
M vdsm/vm.py
4 files changed, 0 insertions(+), 131 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/17/25917/1
diff --git a/client/vdsClient.py b/client/vdsClient.py
index 0c5af45..6344ed6 100644
--- a/client/vdsClient.py
+++ b/client/vdsClient.py
@@ -1385,19 +1385,6 @@
return image['status']['code'], image['status']['message']
return 0, image['uuid']
- def scanVolumeChain(self, args):
- sdUUID = args[0]
- spUUID = args[1]
- imgUUID = args[2]
-
- if len(args) > 3:
- chain = self.s.scanVolumeChain(sdUUID, spUUID, imgUUID, args[3])
- else:
- chain = self.s.scanVolumeChain(sdUUID, spUUID, imgUUID)
- if chain['status']['code']:
- return chain['status']['code'], chain['status']['message']
- return 0, '\n'.join(chain['volumeChain'])
-
def mergeSnapshots(self, args):
sdUUID = args[0]
spUUID = args[1]
@@ -2424,15 +2411,6 @@
'Do it by collapse and copy the whole chain '
'(baseVolUUID->srcVolUUID)'
)),
- 'scanVolumeChain': (serv.scanVolumeChain,
- ('<sdUUID> <spUUID> <imgUUID> [<vmUUID>]',
- 'Scan the image and return the actual volume '
- 'chain starting with the base image and ending '
- 'with the active layer.',
- 'If vmUUID is provided and the VM is runing, '
- 'the VM will be queried. Otherwise the storage '
- 'itself will be scanned.'
- )),
'mergeSnapshots': (serv.mergeSnapshots,
('<sdUUID> <spUUID> <vmUUID> <imgUUID> <Ancestor '
'Image uuid> <Successor Image uuid> [<postZero>]',
diff --git a/vdsm/API.py b/vdsm/API.py
index 7ca606d..ae959ef 100644
--- a/vdsm/API.py
+++ b/vdsm/API.py
@@ -866,18 +866,6 @@
methodArgs, callback, self._spUUID, self._sdUUID, self._UUID,
volUUID)
- def scanVolumeChain(self, vmUUID=None):
- # If vmUUID is provided, we try to use the running VM to get the
- # information which is faster. Otherwise fall back to the storage-only
- # implementation.
- if vmUUID:
- try:
- v = self._cif.vmContainer.get(vmUUID)
- return v.getImageVolumeChain(self._UUID)
- except KeyError:
- pass
- raise RuntimeError("Not implemented yet")
-
class LVMVolumeGroup(APIBase):
ctorArgs = ['lvmvolumegroupID']
diff --git a/vdsm/BindingXMLRPC.py b/vdsm/BindingXMLRPC.py
index c13c35a..259c262 100644
--- a/vdsm/BindingXMLRPC.py
+++ b/vdsm/BindingXMLRPC.py
@@ -601,10 +601,6 @@
image = API.Image(imgUUID, spUUID, sdUUID)
return image.download(methodArgs, volUUID)
- def imageScanVolumeChain(self, spUUID, sdUUID, imgUUID, vmUUID=None):
- image = API.Image(imgUUID, spUUID, sdUUID)
- return image.scanVolumeChain(vmUUID)
-
def poolConnect(self, spUUID, hostID, scsiKey, msdUUID, masterVersion,
domainsMap=None, options=None):
pool = API.StoragePool(spUUID)
@@ -953,7 +949,6 @@
(self.imageSyncData, 'syncImageData'),
(self.imageUpload, 'uploadImage'),
(self.imageDownload, 'downloadImage'),
- (self.imageScanVolumeChain, 'scanVolumeChain'),
(self.poolConnect, 'connectStoragePool'),
(self.poolConnectStorageServer, 'connectStorageServer'),
(self.poolCreate, 'createStoragePool'),
diff --git a/vdsm/vm.py b/vdsm/vm.py
index 4e64bad..6e3fbeb 100644
--- a/vdsm/vm.py
+++ b/vdsm/vm.py
@@ -31,11 +31,9 @@
import threading
import time
import xml.dom.minidom
-import json
# 3rd party libs imports
import libvirt
-import libvirt_qemu
# vdsm imports
from vdsm import constants
@@ -3826,14 +3824,6 @@
raise LookupError("No such drive: '%s'" % drive)
- def _findDriveByPath(self, path):
- for device in self._devices[DISK_DEVICES][:]:
- if not hasattr(device, 'path'):
- continue
- if (device.path == path):
- return device
- raise LookupError("No drive matches path: '%s'" % path)
-
def updateDriveVolume(self, vmDrive):
if not vmDrive.device == 'disk' or not isVdsmImage(vmDrive):
return
@@ -5284,88 +5274,6 @@
hooks.before_vm_migrate_destination(srcDomXML, self.conf)
return True
-
- def _internalQMPMonitorCommand(self, cmdDict):
- jsonCmd = json.dumps(cmdDict)
- ret = libvirt_qemu.qemuMonitorCommand(self._dom, jsonCmd, 0)
- return json.loads(ret)
-
- def _getActualVolumeChains(self):
- """
- Query qemu for the actual volume chains for VM Disks. We use
- this when a live merge operation completes and when recovering in order
- to synchronize our volume chain information with the actual state.
- """
- ret = {}
- cmd = {'execute': 'query-block'}
- info = self._internalQMPMonitorCommand(cmd)
- for dev in info['return']:
- try:
- image = dev['inserted']['image']
- except KeyError:
- continue
- try:
- drive = self._findDriveByPath(image['filename'])
- except LookupError:
- continue
- imageID = drive.imageID
- ret[imageID] = []
- while image:
- # Produce an absolute path so that this information is
- # comparable with the VM Disk paths. It's not safe to make
- # this information public since the paths cannot be guaranteed
- # across hosts. Use _pathListToVolumeList to convert it for
- # export.
- ret[imageID].insert(0, os.path.abspath(image['filename']))
- image = image.get('backing-image')
- return ret
-
- def _pathListToVolumeList(self, drive, pathList):
- """
- Convert a list of volume paths into a list of volume IDs using the
- existing Drives defined for this VM.
- """
- ret = []
- for path in pathList:
- volumeID = None
- for vol in drive.volumeChain:
- if vol['path'] == path:
- volumeID = vol['volumeID']
- break
- if volumeID is None:
- self.log.error("Unable to find matching drive for path: "
- "'%s'" % path)
- return None
- ret.append(volumeID)
- return ret
-
- def _postLiveMergeSyncVolumeChain(self, name, paths):
- """
- Synchronize the volumeChain info after a live merge operation has
- completed. One or more volumes might have been removed from the chain.
- """
- pass
-
- def getImageVolumeChain(self, imageID):
- targetDrive = None
- for drive in self._devices[DISK_DEVICES][:]:
- try:
- if drive.imageID == imageID:
- targetDrive = drive
- except AttributeError:
- continue
- if targetDrive is None:
- return {'status': errCode['imageErr']}
- try:
- paths = self._getActualVolumeChains()[imageID]
- except KeyError:
- self.log.error("No volume chain information available for "
- "image '%s'" % imageID)
- return {'status': errCode['imageErr']}
- volumeChain = self._pathListToVolumeList(targetDrive, paths)
- if volumeChain is None:
- return {'status': errCode['imageErr']}
- return {'status': doneCode, 'volumeChain': volumeChain}
# A little unrelated hack to make xml.dom.minidom.Document.toprettyxml()
--
To view, visit http://gerrit.ovirt.org/25917
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ie22a58d00e0b980df2a0193f160c919f0e8acf57
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Adam Litke <alitke at redhat.com>
Gerrit-Reviewer: automation at ovirt.org
More information about the vdsm-patches
mailing list