فهرست منبع

修复创建虚拟机时,老进度覆盖新进度的问题

James Iter 8 سال پیش
والد
کامیت
123be9544c
4فایلهای تغییر یافته به همراه25 افزوده شده و 7 حذف شده
  1. 2 1
      api/guest.py
  2. 2 0
      docs/todo.md
  3. 3 0
      models/event_processor.py
  4. 18 6
      models/orm.py

+ 2 - 1
api/guest.py

@@ -147,8 +147,9 @@ def r_create():
             disk.size = 0
             disk.path = config.storage_path + '/' + disk.uuid + '.' + disk.format
             disk.guest_uuid = ''
-            disk.quota(config=config)
             # disk.node_id 由 guest 事件处理机更新。涉及迁移时,其所属 node_id 会变更。参见 models/event_processory.py:111 附近。
+            disk.node_id = 0
+            disk.quota(config=config)
             disk.create()
 
             guest_xml = GuestXML(guest=guest, disk=disk, config=config, os_type=os_template.os_type)

+ 2 - 0
docs/todo.md

@@ -78,5 +78,7 @@
 - [ ] 取消单独的初始化密码操作,合并入具体的操作系统初始化操作中
 - [ ] 替换 host 对象中的 node_id 为 hostname,统一主键。并消除 node_id
 - [ ] 考虑用管理接口的 IP 地址来区别计算节点,而不是用主机名
+- [ ] 迁移中的虚拟机,不允许做任何操作
+- [ ] 通过 QemuGuestAgent 实现 Guest 的内存使用率监控
 
 

+ 3 - 0
models/event_processor.py

@@ -102,6 +102,9 @@ class EventProcessor(object):
                     cls.guest_migrate_info.create()
 
         elif cls.guest.status == GuestState.creating.value:
+            if cls.message['message']['progress'] <= cls.guest.progress:
+                return
+
             cls.guest.progress = cls.message['message']['progress']
 
         cls.guest.update()

+ 18 - 6
models/orm.py

@@ -37,11 +37,17 @@ class ORM(object):
             cursor.execute(sql_stmt, self.__dict__)
             cnx.commit()
         except errors.IntegrityError, e:
+            ret = dict()
             if e.errno == errorcode.ER_DUP_ENTRY:
-                ret = dict()
                 ret['state'] = ji.Common.exchange_state(40901)
-                ret['state']['sub']['zh-cn'] = ''.join([ret['state']['sub']['zh-cn'], ': ', e.msg])
-                raise ji.PreviewingError(json.dumps(ret, ensure_ascii=False))
+            elif e.errno == errorcode.ER_BAD_NULL_ERROR:
+                ret['state'] = ji.Common.exchange_state(41202)
+            else:
+                ret['state'] = ji.Common.exchange_state(50002)
+
+            ret['state']['sub']['zh-cn'] = ''.join([ret['state']['sub']['zh-cn'], ': ', e.msg])
+            raise ji.PreviewingError(json.dumps(ret, ensure_ascii=False))
+
         finally:
             cursor.close()
             cnx.close()
@@ -65,11 +71,17 @@ class ORM(object):
             cursor.execute(sql_stmt, self.__dict__)
             cnx.commit()
         except errors.IntegrityError, e:
+            ret = dict()
             if e.errno == errorcode.ER_DUP_ENTRY:
-                ret = dict()
                 ret['state'] = ji.Common.exchange_state(40901)
-                ret['state']['sub']['zh-cn'] = ''.join([ret['state']['sub']['zh-cn'], ': ', e.msg])
-                raise ji.PreviewingError(json.dumps(ret, ensure_ascii=False))
+            elif e.errno == errorcode.ER_BAD_NULL_ERROR:
+                ret['state'] = ji.Common.exchange_state(41202)
+            else:
+                ret['state'] = ji.Common.exchange_state(50002)
+
+            ret['state']['sub']['zh-cn'] = ''.join([ret['state']['sub']['zh-cn'], ': ', e.msg])
+            raise ji.PreviewingError(json.dumps(ret, ensure_ascii=False))
+
         finally:
             cursor.close()
             cnx.close()