def detach(dbg, uri, domain, cb): sr,name = parse_datapath_uri(uri) opq = cb.volumeStartOperations(sr, 'r') # deactivate LVs chain here vol_path = cb.volumeGetPath(opq, name) tap = tapdisk.load_tapdisk_metadata(dbg, vol_path) tap.destroy(dbg) tapdisk.forget_tapdisk_metadata(dbg, vol_path)
def detach(dbg, uri, domain, cb): sr, key = _parse_uri(uri) opq = cb.volumeStartOperations(sr, 'r') meta_path = cb.volumeMetadataGetPath(opq) db = VHDMetabase(meta_path) with db.write_context(): vdi = db.get_vdi_by_id(key) # deactivate LVs chain here db.close() vol_path = cb.volumeGetPath(opq, str(vdi.vhd.id)) if vdi.vhd.parent_id is not None and vdi_enable_intellicache: parent_vhd_path = cb.volumeGetPath(opq, str(vdi.vhd.parent_id)) IntelliCache.detach(dbg, vol_path, parent_vhd_path) else: tap = tapdisk.load_tapdisk_metadata(dbg, vol_path) tap.destroy(dbg) tapdisk.forget_tapdisk_metadata(dbg, vol_path) cb.volumeStopOperations(opq)
def detach(dbg, vhd_path, parent_vhd_path): leaf_vhd_cache_path = os.path.join( IntelliCache.ROOT_PATH, vhd_path[20:] ) tap = tapdisk.load_tapdisk_metadata(dbg, leaf_vhd_cache_path) with RefCounter('tapdisk', tap.uuid) as rc: if rc.get_count() == 0: tap.destroy(dbg) tapdisk.forget_tapdisk_metadata(dbg, leaf_vhd_cache_path) parent_vhd_cache_path = os.path.join( IntelliCache.ROOT_PATH, parent_vhd_path[20:] ) tap = tapdisk.load_tapdisk_metadata(dbg, parent_vhd_cache_path) with RefCounter('tapdisk', tap.uuid) as rc: if rc.get_count() == 0: tap.destroy(dbg) tapdisk.forget_tapdisk_metadata(dbg, parent_vhd_cache_path)
def detach(self, dbg, uri, domain): u = urlparse.urlparse(uri) tap = tapdisk.load_tapdisk_metadata(dbg, u.path) tap.destroy(dbg) tapdisk.forget_tapdisk_metadata(dbg, u.path)