Răsfoiți Sursa

磁盘在线扩容,实现磁盘性能配额功能

James Iter 8 ani în urmă
părinte
comite
82188d4fcb
3 a modificat fișierele cu 34 adăugiri și 35 ștergeri
  1. 9 18
      api/disk.py
  2. 3 1
      models/event_processor.py
  3. 22 16
      templates/disks_show.html

+ 9 - 18
api/disk.py

@@ -135,7 +135,7 @@ def r_resize(uuid, size):
         ret = dict()
         ret['state'] = ji.Common.exchange_state(20000)
 
-        if disk.size >= size:
+        if disk.size >= int(size):
             ret['state'] = ji.Common.exchange_state(41257)
             return ret
 
@@ -143,17 +143,22 @@ def r_resize(uuid, size):
         config.id = 1
         config.get()
 
+        disk.size = int(size)
+        disk.quota(config=config)
+        # 将在事件返回层(models/event_processor.py:224 附近),更新数据库中 disk 对象
+
         message = {
             '_object': 'disk',
             'action': 'resize',
             'uuid': disk.uuid,
             'guest_uuid': disk.guest_uuid,
             'storage_mode': config.storage_mode,
-            'size': int(size),
+            'size': disk.size,
             'dfs_volume': config.dfs_volume,
             'hostname': disk.on_host,
             'image_path': disk.path,
-            'passback_parameters': {'size': size}
+            'disks': [disk.__dict__],
+            'passback_parameters': {'size': disk.size}
         }
 
         if disk.on_host == 'shared_storage':
@@ -376,21 +381,7 @@ def r_update(uuids):
                     'uuid': disk.uuid,
                     'guest_uuid': disk.guest_uuid,
                     'hostname': disk.on_host,
-                    'disks': [
-                        {
-                            'sequence': disk.sequence,
-                            'iops': disk.iops,
-                            'iops_rd': disk.iops_rd,
-                            'iops_wr': disk.iops_wr,
-                            'iops_max': disk.iops_max,
-                            'iops_max_length': disk.iops_max_length,
-                            'bps': disk.bps,
-                            'bps_rd': disk.bps_rd,
-                            'bps_wr': disk.bps_wr,
-                            'bps_max': disk.bps_max,
-                            'bps_max_length': disk.bps_max_length
-                        }
-                    ]
+                    'disks': [disk.__dict__]
                 }
 
                 Guest.emit_instruction(message=json.dumps(message))

+ 3 - 1
models/event_processor.py

@@ -34,6 +34,7 @@ class EventProcessor(object):
     guest_migrate_info = GuestMigrateInfo()
     disk = Disk()
     config = Config()
+    config.id = 1
     cpu_memory = CPUMemory()
     traffic = Traffic()
     disk_io = DiskIO()
@@ -158,7 +159,6 @@ class EventProcessor(object):
 
             elif action == 'delete':
                 if state == ResponseState.success.value:
-                    cls.config.id = 1
                     cls.config.get()
                     cls.guest.uuid = uuid
                     cls.guest.get_by('uuid')
@@ -223,9 +223,11 @@ class EventProcessor(object):
 
             elif action == 'resize':
                 if state == ResponseState.success.value:
+                    cls.config.get()
                     cls.disk.uuid = uuid
                     cls.disk.get_by('uuid')
                     cls.disk.size = cls.message['message']['passback_parameters']['size']
+                    cls.disk.quota(config=cls.config)
                     cls.disk.update()
 
             elif action == 'delete':

+ 22 - 16
templates/disks_show.html

@@ -312,6 +312,9 @@
             },
             success : function() {
                 alter_success('实例扩容指令发送成功!');
+                setTimeout(function() {
+                    refresh();
+                }, 1000);
             }
         });
     }
@@ -338,7 +341,7 @@
     }
 
     function unmount_at(me) {
-        var disk_uuid = $($(me).parent().parent().parent().parent().parent().children()[1]).find('div a')[0].text;
+        var disk_uuid = $($(me).parent().parent().parent().parent().parent().children()[0]).text();
         unmount(disk_uuid);
     }
 
@@ -350,16 +353,8 @@
     }
 
     function reset_resize_value(me) {
-        var min = $(me).parent().parent().parent().parent().parent().children()[3].textContent.split(' ')[0];
-        $(function() { "use strict";
-            $("#size").TouchSpin({
-                max: 10240,
-                min: min,
-                verticalbuttons: true,
-                verticalupclass: 'glyph-icon icon-plus',
-                verticaldownclass: 'glyph-icon icon-minus'
-            });
-        });
+        var min = $(me).parent().parent().parent().parent().parent().children()[5].textContent.split(' ')[0];
+        $("#size").trigger("touchspin.updatesettings", {min: min});
     }
 
     function delete_at(me) {
@@ -449,7 +444,17 @@
         $('#batch_change_disk_quota_modal').modal('hide');
     }
 
-   $(function() { "use strict";
+    $(function() { "use strict";
+        $("#size").TouchSpin({
+            max: 10240,
+            min: 1,
+            verticalbuttons: true,
+            verticalupclass: 'glyph-icon icon-plus',
+            verticaldownclass: 'glyph-icon icon-minus'
+        });
+    });
+
+    $(function() { "use strict";
         $("#iops").TouchSpin({
             max: {{ config_ret.data.iops_cap }},
             min: 0,
@@ -576,6 +581,7 @@
             $("#bps_rd").trigger("touchspin.updatesettings", {max: $('#bps').val() - $('#bps_wr').val()});
         });
     }
+
 </script>
 <div class="panel">
     <div class="panel-body">
@@ -660,7 +666,7 @@
                             <ul class="dropdown-menu">
                                 <li class="{% if item.state not in [1] %} disabled {% endif %}" style="{% if item.sequence == 0 %} display: none; {% endif %}">
                                     <a href="javascript:;" data-toggle="modal" data-target="#mount_modal"
-                                       onclick="$('#instance_uuid').val($($(this).parent().parent().parent().parent().parent().children()[1]).find('div a')[0].text);">
+                                       onclick="$('#instance_uuid').val($($(this).parent().parent().parent().parent().parent().children()[0]).text());">
                                         挂载
                                     </a>
                                 </li>
@@ -670,15 +676,15 @@
                                 <li class="divider" style="{% if item.sequence == 0 %} display: none; {% endif %}"></li>
                                 <li class="{% if item.state not in [1, 2] %} disabled {% endif %}">
                                     <a href="javascript:;" data-toggle="modal" data-target="#resize_modal"
-                                       onclick="$('#instance_uuid').val($($(this).parent().parent().parent().parent().parent().children()[1]).find('div a')[0].text);reset_resize_value(this);">
+                                       onclick="$('#instance_uuid').val($($(this).parent().parent().parent().parent().parent().children()[0]).text());reset_resize_value(this);">
                                         磁盘扩容
                                     </a>
                                 </li>
                                 <li class="divider" style="{% if item.sequence == 0 %} display: none; {% endif %}"></li>
                                 <li class="{% if item.state not in [1, 255] %} disabled {% endif %}" style="{% if item.sequence == 0 %} display: none; {% endif %}">
                                     <a href="javascript:;" data-toggle="modal" data-target="#delete_modal"
-                                       onclick="$('#instance_uuid').val($($(this).parent().parent().parent().parent().parent().children()[1]).find('div a')[0].text);
-                                       $('#delete_instance_desc').text($('#instance_uuid').val().split('-')[0] + '/' + $($(this).parent().parent().parent().parent().parent().children()[1]).find('div p')[0].textContent)">
+                                       onclick="$('#instance_uuid').val($($(this).parent().parent().parent().parent().parent().children()[0]).text());
+                                       $('#delete_instance_desc').text($('#instance_uuid').val().split('-')[0] + '/' + $($(this).parent().parent().parent().parent().parent().children()[2]).find('div p')[0].textContent)">
                                         删除
                                     </a>
                                 </li>