20.调用Quita的方法创建reservations(应该是资源的预留).这块如果有异常,会分为volume size不足和volume个数不足抛异常。
21.获取availability_zone参数,如果为null,则取默认值。如果请求中没有volume_type和source_volume,则volume_type去默认值,如果请求中没有volume_type,但是有source_volume,则取source_volume的volume_type_id值。否则从volume_type取volume_type_id的值。
22.检查请求中的metadata
23.组装options,包括了各种校验后的参数,然后将创卷数据插入数据库,插入数据库时会生成卷ID(uuid),QUTAS也提交资源预留值。失败则都回归
24.组装request_spec,并调用私有方法_cast_create_volume,该方法做以下几个判断:
1. 如果请求request_spec中有snapshot_id(从快照创建卷)并且snapshot_same_host开关是true,则取该快照的源卷所在的主机作为新创建卷的主机,scheduled_at选取为now,并更新数据库,然后调用volume_rpcapi.create_volume开始创卷。
2. 如果请求中指定了源卷(从卷创建卷),则从数据库中取源卷的主机,scheduled_at选取为now,并更新数据库,然后调用volume_rpcapi.create_volume开始创卷
3. 其他情况则调用scheduler_rpcapi.create_volume方法开始创卷。