def _resize(self, dbg, sr, key, new_size): log.debug("%s: xcpng.volume.QCOW2Volume._resize: SR: %s Key: %s New_size: %s" % (dbg, sr, key, new_size)) uri = "%s/%s" % (sr, key) datapath = get_vdi_datapath_by_uri(dbg, uri) try: super(QCOW2Volume, self)._resize(dbg, sr, key, new_size) self.Datapathes[datapath].DatapathOpsHandler.map_vol(dbg, uri) call(dbg, ["/usr/lib64/qemu-dp/bin/qemu-img", "resize", self.Datapathes[datapath].DatapathOpsHandler.gen_vol_path(dbg, uri), str(new_size)]) self.Datapathes[datapath].DatapathOpsHandler.unmap_vol(dbg, uri) except Exception as e: log.error("%s: xcpng.volume.QCOW2Volume._resize: Failed to resize volume: key %s: SR: %s" % (dbg, key, sr)) try: self.Datapathes[datapath].DatapathOpsHandler.unmap_vol(dbg, uri) except: pass raise Exception(e)
def deactivate(self, dbg, uri, domain): log.debug( "%s: xcpng.datapath.Implementation.deactivate: uri: %s domain: %s" % (dbg, uri, domain)) self.Datapathes[get_vdi_datapath_by_uri(dbg, uri)]().deactivate( dbg, uri, domain)
def _create(self, dbg, sr, name, description, size, sharable, image_meta): log.debug("%s: xcpng.volume.QCOW2Volume._create: SR: %s Name: %s Description: %s Size: %s" % (dbg, sr, name, description, size)) uri = image_meta[URI_TAG][0] datapath = get_vdi_datapath_by_uri(dbg, uri) try: super(QCOW2Volume, self)._create(dbg, sr, name, description, size, sharable, image_meta) self.Datapathes[datapath].DatapathOpsHandler.map_vol(dbg, uri) call(dbg, ["/usr/lib64/qemu-dp/bin/qemu-img", "create", "-f", image_meta[TYPE_TAG], self.Datapathes[datapath].DatapathOpsHandler.gen_vol_path(dbg, uri), str(size)]) self.Datapathes[datapath].DatapathOpsHandler.unmap_vol(dbg, uri) return image_meta except Exception as e: log.error("%s: xcpng.volume.QCOW2Volume._create: Failed to create volume: key %s: SR: %s" % (dbg, image_meta[VDI_UUID_TAG], sr)) try: self.Datapathes[datapath].DatapathOpsHandler.unmap_vol(dbg, uri) except: pass raise Exception(e)
def attach(self, dbg, uri, domain): log.debug( "%s: xcpng.datapath.Implementation.attach: uri: %s domain: %s" % (dbg, uri, domain)) return self.Datapathes[get_vdi_datapath_by_uri(dbg, uri)]().attach( dbg, uri, domain)
def open(self, dbg, uri, persistent): log.debug( "%s: xcpng.datapath.Implementation.open: uri: %s persistent: %s" % (dbg, uri, persistent)) self.Datapathes[get_vdi_datapath_by_uri(dbg, uri)]().open( dbg, uri, persistent)
def _commit_offline(self, dbg, sr, child, parent): datapath = get_vdi_datapath_by_uri(dbg, sr) self.Datapathes[datapath].DatapathOpsHandler.map_vol(dbg, child, chained=None) self.Datapathes[datapath].DatapathOpsHandler.map_vol(dbg, parent, chained=None) call(dbg, ['/usr/lib64/qemu-dp/bin/qemu-img', 'commit', '-t', 'none' '-b', self.Datapathes[datapath].DatapathOpsHandler.gen_vol_uri(dbg, parent), '-d', self.Datapathes[datapath].DatapathOpsHandler.gen_vol_uri(dbg, child)]) self.Datapathes[datapath].DatapathOpsHandler.unmap_vol(dbg, child, chained=None) self.Datapathes[datapath].DatapathOpsHandler.unmap_vol(dbg, parent, chained=None)
def _clone(self, dbg, sr, key, mode, base_meta): log.debug("%s: xcpng.volume.QCOW2Volume._clone: SR: %s Key: %s Mode: %s" % (dbg, sr, key, mode)) swapped = False clone_uri_for_exception = None new_base_uri_for_exception = None datapath = get_vdi_datapath_by_uri(dbg, sr) try: if base_meta[KEY_TAG] == key: # create clone clone_meta = self.create(dbg, sr, base_meta[NAME_TAG], base_meta[DESCRIPTION_TAG], base_meta[VIRTUAL_SIZE_TAG], base_meta[SHARABLE_TAG]) clone_uri_for_exception = clone_meta[URI_TAG][0] # create new base new_base_meta = self.create(dbg, sr, base_meta[NAME_TAG], base_meta[DESCRIPTION_TAG], base_meta[VIRTUAL_SIZE_TAG], base_meta[SHARABLE_TAG]) new_base_uri_for_exception = new_base_meta[URI_TAG][0] self.Datapathes[datapath].DatapathOpsHandler.map_vol(dbg, clone_meta[URI_TAG][0], chained=None) self.Datapathes[datapath].DatapathOpsHandler.map_vol(dbg, new_base_meta[URI_TAG][0], chained=None) call(dbg, ["/usr/lib64/qemu-dp/bin/qemu-img", "rebase", "-u", "-f", base_meta[TYPE_TAG], "-b", self.Datapathes[datapath].DatapathOpsHandler.gen_vol_uri(dbg, base_meta[URI_TAG][0]), self.Datapathes[datapath].DatapathOpsHandler.gen_vol_uri(dbg, new_base_meta[URI_TAG][0])]) call(dbg, ["/usr/lib64/qemu-dp/bin/qemu-img", "rebase", "-u", "-f", clone_meta[TYPE_TAG], "-b", self.Datapathes[datapath].DatapathOpsHandler.gen_vol_uri(dbg, base_meta[URI_TAG][0]), self.Datapathes[datapath].DatapathOpsHandler.gen_vol_uri(dbg, clone_meta[URI_TAG][0])]) self.Datapathes[datapath].DatapathOpsHandler.unmap_vol(dbg, clone_meta[URI_TAG][0], chained=None) # swap backing images uuids for base vdi and new base vdi in metadata self.VolOpsHendler.swap(dbg, base_meta[URI_TAG][0], new_base_meta[URI_TAG][0]) swapped = True base_meta = self.MetadataHandler.get_vdi_meta(dbg, base_meta[URI_TAG][0]) new_base_meta = self.MetadataHandler.get_vdi_meta(dbg, new_base_meta[URI_TAG][0]) clone_meta = self.MetadataHandler.get_vdi_meta(dbg, clone_meta[URI_TAG][0]) merge(base_meta, new_base_meta, snap_merge_pattern) new_base_meta[NAME_TAG] = "(base) %s" % new_base_meta[NAME_TAG] new_base_meta[READ_WRITE_TAG] = False base_meta[PARENT_URI_TAG] = new_base_meta[URI_TAG] base_meta[REF_COUNT_TAG] = 1 clone_parent = new_base_meta[URI_TAG] self.MetadataHandler.update_vdi_meta(dbg, new_base_meta[URI_TAG][0], new_base_meta) self.MetadataHandler.update_vdi_meta(dbg, base_meta[URI_TAG][0], base_meta) if ACTIVE_ON_TAG in base_meta: base_meta[QEMU_IMAGE_URI_TAG] = self.Datapathes[datapath].DatapathOpsHandler.gen_vol_uri(dbg, base_meta[URI_TAG][0]) self.MetadataHandler.update_vdi_meta(dbg, base_meta[URI_TAG][0], base_meta) self.Datapathes[datapath].snapshot(dbg, base_meta[URI_TAG][0], base_meta[URI_TAG][0], 0) else: self.Datapathes[datapath].DatapathOpsHandler.unmap_vol(dbg, base_meta[URI_TAG][0], chained=None) else: # create clone clone_meta = self.create(dbg, sr, base_meta[NAME_TAG], base_meta[DESCRIPTION_TAG], base_meta[VIRTUAL_SIZE_TAG], base_meta[SHARABLE_TAG]) clone_uri_for_exception = clone_meta[URI_TAG][0] self.Datapathes[datapath].DatapathOpsHandler.map_vol(dbg, clone_meta[URI_TAG][0], chained=None) call(dbg, ["/usr/lib64/qemu-dp/bin/qemu-img", "rebase", "-u", "-f", base_meta[TYPE_TAG], "-b", self.Datapathes[datapath].DatapathOpsHandler.gen_vol_uri(dbg, base_meta[URI_TAG][0]), self.Datapathes[datapath].DatapathOpsHandler.gen_vol_uri(dbg, clone_meta[URI_TAG][0])]) self.Datapathes[datapath].DatapathOpsHandler.unmap_vol(dbg, clone_meta[URI_TAG][0], chained=None) clone_parent = base_meta[URI_TAG] merge(base_meta, clone_meta, clone_merge_pattern) clone_meta[PARENT_URI_TAG] = clone_parent if mode is 'snapshot': clone_meta[READ_WRITE_TAG] = False elif mode is 'clone': clone_meta[READ_WRITE_TAG] = True self.MetadataHandler.update_vdi_meta(dbg, clone_meta[URI_TAG][0], clone_meta) return clone_meta except Exception as e: log.error("%s: xcpng.volume.QCOW2Volume._clone: Failed to clone/snapshot volume: key %s: SR: %s" % (dbg, key, sr)) try: if clone_uri_for_exception is not None: self.Datapathes[datapath].DatapathOpsHandler.unmap_vol(dbg, clone_uri_for_exception) except: pass if clone_uri_for_exception is not None: self.destroy(dbg, sr, get_vdi_uuid_by_uri(dbg, clone_uri_for_exception)) if swapped is True: self.VolOpsHendler.swap(dbg, new_base_uri_for_exception, base_meta[URI_TAG][0]) try: if new_base_uri_for_exception is not None: self.Datapathes[datapath].DatapathOpsHandler.unmap_vol(dbg, new_base_uri_for_exception) except: pass if new_base_uri_for_exception is not None: self.destroy(dbg, sr, get_vdi_uuid_by_uri(dbg, new_base_uri_for_exception)) raise Exception(e)
def _commit_online(self, dbg, uri, child, parent): datapath = get_vdi_datapath_by_uri(dbg, uri) self.Datapathes[datapath].commit(dbg, uri, child, parent, 0)
def close(self, dbg, uri): log.debug("%s: xcpng.datapath.Implementation.close: uri: %s" % (dbg, uri)) self.Datapathes[get_vdi_datapath_by_uri(dbg, uri)]().close(dbg, uri)
def _commit_online(self, dbg, sr, child, parent): datapath = get_vdi_datapath_by_uri(dbg, sr)