OpenStack快照分析:(三)从磁盘启动云主机离线(在线)快照分析 (10)

可以看到两个方法都是调用了“_create_snapshot”,只是在传递第5个参数force时不一样,同时forceFalse时,需要传递其他几个参数(实际上也为空)。下面具体分析_create_snapshot方法:

def _create_snapshot(self, context, volume, name, description, force=False, metadata=Nonecgsnapshot_id=None, group_snapshot_id=None):
    """
根据上文的分析:force = True

   
该方法完成如下功能:
    1.
执行卷状态条件判断,如果卷处于维护状态,迁移过程中,副本卷,
       force=False
且不是可用状态,则抛异常
    2.
执行用户快照配额管理,用户可以为不同的卷类型设置不同的配额信息,如:
       volumes, gigabytes,snapshots,
我这里使用的是ceph rbd,例如:
         {

           'gigabytes': 20,
           'snapshots_ceph': 1,
           'gigabytes_ceph': 20,
           'snapshots': 1
         }
     
用户默认配额如下:
         {
           'gigabytes': 1000,
           'snapshots_ceph': -1,
           'snapshots': 10,
           'gigabytes_ceph': -1
         }
      
如果配额不足则会抛异常
    3.
创建快照条目,例如(创建卷快照要先在cinder数据库创建snapshot数据库条目):
      {
           'status': u'creating',
           'volume_type_id': 'd494e240-17b3-4d35-a5a1-2923d8677d79',
           'display_name': u'snapshot for snapshot1',
           'user_id': 'b652f9bd65844f739684a20ed77e9a0f',
           'display_description': u'',
           'cgsnapshot_id': None,
           'volume_size': 20,
           'encryption_key_id': None,
           'volume_id': '60e16af2-0684-433c-a1b6-c1af1c2523fc',
           'progress': u'0%',
           'project_id': '25520b29dce346d38bc4b055c5ffbfcb',
           'metadata': {}
      }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpxggp.html