数据联邦&软件开发

Greenplum · 源码阅读 · gpstop命令

2019-08-18  本文已影响0人  sinwaj

一.背景

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的对应概念,也勉强可以看懂。代码优雅度和数据库的名气有差距。

四.相关链接

greenplum源码阅读(1):gpstart命令

上一篇 下一篇

猜你喜欢

热点阅读