[Kimchi-devel] [PATCH] [Kimchi] Issue #626: Snapshot revert does not release storage volume
bianca at linux.vnet.ibm.com
bianca at linux.vnet.ibm.com
Mon Aug 29 19:44:45 UTC 2016
From: Bianca Carvalho <bianca at linux.vnet.ibm.com>
Edited diskutils.py file to remove used_by verification in
objstore, now this field will be only verified in the vm
when get_disk_used_by is used by StorageVolumeModel lookup.
Signed-off-by: Bianca Carvalho <bianca at linux.vnet.ibm.com>
---
model/diskutils.py | 50 ++++++++++++++++++++++----------------------------
1 file changed, 22 insertions(+), 28 deletions(-)
diff --git a/model/diskutils.py b/model/diskutils.py
index 6faab7c..3b8f441 100644
--- a/model/diskutils.py
+++ b/model/diskutils.py
@@ -17,7 +17,7 @@
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-from wok.exception import OperationFailed, NotFoundError
+from wok.exception import OperationFailed
from wok.utils import wok_log
from wok.plugins.kimchi.config import get_kimchi_version
@@ -34,34 +34,28 @@ from wok.plugins.kimchi.xmlutils.disk import get_vm_disk_info, get_vm_disks
def get_disk_used_by(objstore, conn, path):
try:
with objstore as session:
+ used_by = []
+ # try to find this volume in existing vm
+ vms_list = VMsModel.get_vms(conn)
+ for vm in vms_list:
+ dom = VMModel.get_vm(vm, conn)
+ storages = get_vm_disks(dom)
+ for disk in storages.keys():
+ d_info = get_vm_disk_info(dom, disk)
+ if path == d_info['path']:
+ used_by.append(vm)
try:
- used_by = session.get('storagevolume', path)['used_by']
- except (KeyError, NotFoundError):
- wok_log.info('Volume %s not found in obj store.' % path)
- used_by = []
- # try to find this volume in existing vm
- vms_list = VMsModel.get_vms(conn)
- for vm in vms_list:
- dom = VMModel.get_vm(vm, conn)
- storages = get_vm_disks(dom)
- for disk in storages.keys():
- d_info = get_vm_disk_info(dom, disk)
- if path == d_info['path']:
- used_by.append(vm)
- try:
- session.store('storagevolume', path,
- {'used_by': used_by},
- get_kimchi_version())
- except Exception as e:
- # Let the exception be raised. If we allow disks'
- # used_by to be out of sync, data corruption could
- # occour if a disk is added to two guests
- # unknowingly.
- wok_log.error('Unable to store storage volume id in'
- ' objectstore due error: %s',
- e.message)
- raise OperationFailed('KCHVOL0017E',
- {'err': e.message})
+ session.store('storagevolume', path, {'used_by': used_by},
+ get_kimchi_version())
+ except Exception as e:
+ # Let the exception be raised. If we allow disks'
+ # used_by to be out of sync, data corruption could
+ # occour if a disk is added to two guests
+ # unknowingly.
+ wok_log.error('Unable to store storage volume id in'
+ ' objectstore due error: %s',
+ e.message)
+ raise OperationFailed('KCHVOL0017E', {'err': e.message})
except Exception as e:
# This exception is going to catch errors returned by 'with',
# specially ones generated by 'session.store'. It is outside
--
2.7.4
More information about the Kimchi-devel
mailing list