本文介绍trove从镜像原生创建数据库实例的源码流程。这只是我个人记忆中的流程,可能存在偏差或错误遗漏的地方,仅供参考。
trove入口函数:
trove/taskmanager/api.py:
def create_instance(self, instance_id, name, flavor,
image_id, databases, users, datastore_manager,
packages, volume_size, backup_id=None,
availability_zone=None, root_password=None,
nics=None, overrides=None, slave_of_id=None,
cluster_config=None, volume_type=None,
modules=None):
LOG.debug("Making async call to create instance %s " % instance_id)
self._cast("create_instance", self.version_cap,
instance_id=instance_id, name=name,
flavor=self._transform_obj(flavor),
image_id=image_id, \\ trove实例所使用的镜像
databases=databases, \\实例创建时输入的数据库列表
users=users, \\数据库用户,拥有对上面的数据库列表的管理权限
datastore_manager=datastore_manager,
packages=packages,
volume_size=volume_size, \\trove实例的块磁盘,用于存储数据库数据
backup_id=backup_id, \\如果该数据库是由备份数据还原而来的,这是相应的备份ID
availability_zone=availability_zone,
root_password=root_password,
nics=nics,
overrides=overrides,
slave_of_id=slave_of_id,
cluster_config=cluster_config,
volume_type=volume_type,
modules=modules)
通过RPC转发到 trove/taskmanager/models.py: