Greenplum · 源码阅读 · gpstop命令
一.背景
greenplum数据库的停止,经常是通过gpstop 命令停止,通过对该命令源文件的阅读加深理解。
二 .文件位置
gpstop是python代码实现。
三.流程说明
1.主要函数
1.1代码入口
if __name__ =='__main__':
simple_main(GpStop.createParser, GpStop.createProgram)
包含如下2个静态函数:
GpStop.createParser:解析命令中的参数
GpStop.createProgram:实例化GpStop类
1.2 GpStop 的构造函数
__init__方法,在实例化GpStop类时会赋值停止参数,具体说明以后再研究。 因为一般启动都是gpstop ,然后输入就可以停止数据库。
1.3 GpStop的run方法
该函数包含了整个停止过程。
2.主要流程
2.1准备动作 self._prepare()
def _prepare(self):
logger.info("Gathering information and validating the environment...")
//从环境变量获取GPHOME
self.gphome = gp.get_gphome()
if self.master_datadiris None:
self.master_datadir = gp.get_masterdatadir()
self.user = unix.getUserName()
//检查用户是否有操作权限
gp.check_permissions(self.user)
//读取postgresql.conf信息到内存
self._read_postgresqlconf()
//检查数据库是否在运行
self._check_db_running()
//构建节点信息
self._build_gparray()
if self.onlyThisHost:
self._is_hostname_valid()
//检查软件版本和master_datadir的目录版本是否兼容
self._check_version()
2.2 停止master节点
i)只有master节点
if self.masteronly
self._stop_master()
ii)协调节点和计算节点都在
//获取计算节点信息
segs =self.gparray.getSegDbList()
//停止主协调节点
self._stop_master()
//停止备协调节点
self._stop_standby()
//停止计算节点
self._stop_segments(segs)
//停止监控采集
self._stop_gpmmon()
self._stop_gpsmon()
三.总结
代码900多行,有点乱,但如果有greenplum的对应概念,也勉强可以看懂。代码优雅度和数据库的名气有差距。
四.相关链接