当前位置: 首页 > postgresql > 正文

pgAgent 代码流程分析

使用类似python代码的方式,梳理一下pgagent运行流程,作为笔记

1. 解析命令行参数
2. 是否要进行后台 daemon
3. MainLoop

3.1 连库,尝试 MAXATTEMPTS 次
3.2 检查是否存在 pga_job表, 设置 backendPid 为 pg_backend_pid()
3.3 检查是否存在 pgagent_schema_version函数,检查版本信息
3.4 MainRestartLoop

3.4.1 Clearing zombies

查找 pgagent.pga_jobagent 中 jagpid 已经挂了的 pid
pgagent.pga_joblog 中 相关任务标记 aborted (原来为r)
pgagent.pga_jobsteplog 中 相关步骤标记 aborted (原来为r)
pgagent.pga_job 中 agent 和 nextrun 标记为空
pgagent.pga_jobagent 删除相关agent信息

3.4.2 将自己注册到 pgagent.pga_jobagent 中
3.4.3 进入死循环

查找 jobnextrun 已经到了执行时间的job
干活

新的 thread
连接数据库
将 pgagent.pga_job 中 agent 设置为 backendPid(不是自己的)
在 pgagent.pga_joblog 中将 job 设置为 运行
status 标记为 “r”, 即 runable = true

pgagent.pga_jobstep 中取出步骤
pgagent.pga_jobsteplog 中记录步骤状态为 “r”
根据 jstkind 来决定SQL还是命令

SQL直接连库干
批处理时,建一个临时文件,将code写进去,然后popen一把
设置pgagent.pga_jobsteplog中相关信息,jslduration jslresult jslstatus jsloutput

thread 退出时, jobagentid=NULL, jobnextrun=NULL

等一个interval

    分享到:

本文固定链接: http://klwang.info/pgagent-code-analyse/ | 数据库|Linux|软件开发

该日志由 klwang 于2014年07月29日发表在 postgresql 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: pgAgent 代码流程分析 | 数据库|Linux|软件开发
【上一篇】
【下一篇】

pgAgent 代码流程分析:等您坐沙发呢!

发表评论

*
快捷键:Ctrl+Enter