lightdb/pg reload guc 参数机制
lightdb/pg reload guc 参数机制
本文主要讲述调用pg_reload_conf 后,到guc被真正修改之间发送的故事。(基于pg13)
pg_reload_conf 函数实现如下:
Datum
pg_reload_conf(PG_FUNCTION_ARGS)
{if (kill(PostmasterPid, SIGHUP)){ereport(WARNING,(errmsg("failed to send signal to postmaster: %m")));PG_RETURN_BOOL(false);}PG_RETURN_BOOL(true);
}
pg_reload_conf 会发送SIGHUP到postmaster 进程。而postmaster 进程中 SIGHUP 信号的处理函数为 SIGHUP_handler( pqsignal_pm(SIGHUP, SIGHUP_handler); ),其实现主要如下:
ProcessConfigFile(PGC_SIGHUP); //reload confSignalChildren(SIGHUP); // 给其他子进程发送 SIGHUP 信号// 给其他后台进程发送SIGHUPif (StartupPID != 0)signal_child(StartupPID, SIGHUP);if (BgWriterPID != 0)signal_child(BgWriterPID, SIGHUP);if (CheckpointerPID != 0)signal_child(CheckpointerPID, SIGHUP);if (WalWriterPID != 0)signal_child(WalWriterPID, SIGHUP);if (WalReceiverPID != 0)signal_child(WalReceiverPID, SIGHUP);if (AutoVacPID != 0)signal_child(AutoVacPID, SIGHUP);if (PgArchPID != 0)signal_child(PgArchPID, SIGHUP);if (SysLoggerPID != 0)signal_child(SysLoggerPID, SIGHUP);if (PgStatPID != 0)signal_child(PgStatPID, SIGHUP);/* Reload authentication config files too */if (!load_hba())ereport(LOG,/* translator: %s is a configuration file */(errmsg("%s was not reloaded", "lt_hba.conf")));if (!load_ident())ereport(LOG,(errmsg("%s was not reloaded", "lt_ident.conf")));
主要流程是先在本进程reload conf(ProcessConfigFile), 然后给其他子进程发送 SIGHUP 信号。
下面讲一下 postgres (客户端连接进程)收到 SIGHUP 的处理
PostgresMain postgres main loop – all backends, interactive or otherwise start here
postgres 为 SIGHUP 注册的处理函数为 SignalHandlerForConfigReload (pqsignal(SIGHUP, SignalHandlerForConfigReload);)。其实现如下:
void
SignalHandlerForConfigReload(SIGNAL_ARGS)
{int save_errno = errno;ConfigReloadPending = true;SetLatch(MyLatch);errno = save_errno;
}
主要为设置 ConfigReloadPending = tue, 然后通过 SetLatch(MyLatch) 来唤醒当前进程。当前进程被唤醒后处理如下(如果当前正在执行SQL, 则会被中断来处理信号,处理完信号,继续执行SQL,执行完SQL,在需要等待下一条SQL时 会不等待而直接处理latch的唤醒):
/* Handle interrupt. */if (event.events & WL_LATCH_SET){ResetLatch(MyLatch);ProcessClientReadInterrupt(true);/** We'll retry the read. Most likely it will return immediately* because there's still no data available, and we'll wait for the* socket to become ready again.*/}goto retry;
唤醒后会进行ResetLatch等操作,然后会尝试读取数据流, 若没有,则继续等待下一个query 的到来才会去真正的reload conf(执行query前, 先reload).,若有直接返回。
在进程被 query 唤醒后,会执行如下代码:
if (ConfigReloadPending)
{ConfigReloadPending = false;ProcessConfigFile(PGC_SIGHUP);
}
最终调用ProcessConfigFile执行配置文件的reload。 reload 结束后,会执行接受到的query。
这个机制可以保证,在 reload 的时候,不会执行其他命令, 可以保证执行命令过程中 guc 不会被修改。
但也会出现在执行 pg_reload_conf 函数后, guc 参数没有被及时修改的情况(从postmaster收到信号,处理reload, 发送信号给postgres 进程, 到postgres 进程被唤醒这段时间内,如果执行了SQL,GUC 参数还是原先的值。 一般情况下,时间极短)。
ProcessConfigFile 实现
ProcessConfigFile 最终调用 ProcessConfigFileInternal, 对于postmaster 进程会记录修改后的值。通过如下判断来使只有postmaster可以获取到prev_guc, 有prev_guc 才会记录日志。
if (context == PGC_SIGHUP && applySettings && !IsUnderPostmaster)
相关文章:
lightdb/pg reload guc 参数机制
lightdb/pg reload guc 参数机制 本文主要讲述调用pg_reload_conf 后,到guc被真正修改之间发送的故事。(基于pg13) pg_reload_conf 函数实现如下: Datum pg_reload_conf(PG_FUNCTION_ARGS) {if (kill(PostmasterPid, SIGHUP)){ereport(WARNING,(errms…...
E. Archaeology(纯思维)
Problem - E - Codeforces 爱丽丝买了一个刚果总理视频的订阅,正在看一部关于苏格兰卡特林湖的因子岛的考古发现的纪录片。考古学家发现了一本书,其年代和来源都不明。也许爱丽丝可以对它进行一些解释? 这本书包含一串字符 "a"、&…...
FISCO BCOS(三十四)———商品溯源(智能合约+后端)
FISCO BCOS(三十四)———商品溯源(智能合约+后端) 一、智能合约函数调用流程 注:智能合约来源(官网的合约仓库中) 但是TraceabilityFactory合约有问题,我已经做了修改,可以看原版与我的,只有一个函数不同。 官网上这套合约在TraceabilityFactory这个合约上缺少getGo…...
ts体操训练
1 实现pick type MyPick<T, K extends keyof T> {[P in K]: T[P] }2 实现readonly 让interface中所有属性变为可读 type MyReadonly<T> {readonly [K in keyof T]: T[K] }3 TupleToObject 将元组类型转换为对象类型 type tupleToObject<T extends any[]&…...
int指令
格式: int n,n为中断类型码,它的功能是引发中断过程 CPU执行过程 取中断类型码n;标志寄存器入栈,IF0,TF0;CS,IP入栈;(IP)(n4)&…...
Cycling 74 Max for Mac:音乐可视化编程软件
Cycling 74 Max是一款音乐、视觉、互动艺术等领域中广泛使用的编程语言和应用软件,它允许用户创作和控制实时音频和视频效果、交互式应用程序和媒体艺术品等。 Max将程序设计和可视化编程相结合,通过简单的拖拽和连接方式,用户可以将各种功能…...
ROS学习第十二节——话题通信控制小乌龟
1.基操一下 首先打开小乌龟程序和键盘控制程序 rosrun turtlesim turtlesim_node rosrun turtlesim turtle_teleop_key 查看话题列表 rostopic list 打开计算图查看具体是那个话题在起作用 rqt_graph 从上图可以看到两个节点之间的话题是 /turtle1/cmd_vel 使用以下命令获…...
matlab点云的可视化-源码复制粘贴即可(一)
一、导入并可视化一个无属性的点云 clc; clear; close; % clear everything% Import a point cloud from a plain text file (run type(Lion.xyz) to see the contents of the file) pc pointCloud(Lion.xyz);% Generate a z-colored view of the point cloud pc.plot;% Set …...
反射-Class类分析
反射相关的主要类 java.lang.Class:代表一个类,Class对象表示某个类加载后在堆中的对象java.lang.reflect.Method:代表类的方法,Method对象表示某个类的方法java.lang.reflect.Field:代表类的成员变量,Fie…...
Let’s Make C++ Great Again——string与常用字符处理函数
文章目录 string使用string类的例子,统计一个字符串中单词的个数:在算法模拟题中翻转字符串:判断回文字符串:字符串查找:字符串替换: 常用字符处理函数strlen()strcpy()strcat()strcmp()toupper() 和 tolow…...
〖Python网络爬虫实战⑰〗- 网页解析利器parsel实战
订阅:新手可以订阅我的其他专栏。免费阶段订阅量1000 python项目实战 Python编程基础教程系列(零基础小白搬砖逆袭) 说明:本专栏持续更新中,目前专栏免费订阅,在转为付费专栏前订阅本专栏的,可以免费订阅付…...
中电金信:生成式AI热潮下,文本智能走向何方?
突破通用人工智能场景,生成式AI正在向全行业应用进攻。 一个脑筋急转弯,几个月前ChatGPT是这样回答的: 然而,仅仅几个月的迭代,它的回答却让人出乎意料。 看似调侃的对比背后实则是无数次模型训练的支撑。基于数据的激…...
探索Linux设备树:硬件描述与驱动程序的桥梁
目录标题 引言:Linux设备树简介 | Introduction: Linux Device Tree Overviewa. 设备树的背景与发展 | Background and Development of Device Treeb. 设备树的作用与意义 | The Role and Significance of Device Tree 设备树语法与结构 | Device Tree Syntax and S…...
UNION ALL用法 以及 UNION ALL和UNION的区别
部分参考自文章: https://blog.csdn.net/a200822146085/article/details/119545374(CC 4.0 BY-SA版权协议)CSDN「我心依依旧」 https://www.1keydata.com/cn/sql/sql-unionall.php SQL Union All SQL指令 UNION ALL用法 UNION ALL 这个指令的目的也是要将两个 SQL 语…...
Ubuntu Linux操作
引言 晚上上课发现桌子上遗留了这本书,水课就看了看学习下,以下内容直接总结知识点 磁盘内存解析 (1)硬盘有数个盘片,每个盘片两个面,每个面一个磁头。 (2)盘片被划分为多个扇形区域即扇区。 (3)同一盘片不同半径的同心圆为磁道。 (4)不同盘片相同半径…...
MongoDB常用语句(CURD)
文章目录 一、数据库操作二、集合操作三、文档操作3.1 插入文档3.2 查询文档3.3 更新文档3.4 删除文档 四、安全认证4.1 创建管理员账号4.2 创建应用数据库用户4.3 启动和连接 (校验方式) 提示:以下是本篇文章正文内容,MongoDB 系列学习将会持续更新 一…...
一篇文章让你彻底学会--节流(并且自己可以手写)
Hi,有的小伙伴们在面试的时候会被要求手写节流函数,很多都被难着了吧,宝贝,那你你没有理解节流函数。 今天,就让我带你攻克它! 1.节流 单位时间内,事件触发,最多只执行一次事件回调。 人话:说…...
C++ 形参是类的指针 class * 通过new的方式创建对象
当你在C中使用类指针(class *)作为函数的形参,并通过 new 关键字创建对象时,这种用法确实会改变类对象的值。原因是你通过指针传递了对象的内存地址,而不是传递对象本身。这意味着在函数内部对对象的任何修改都会直接影…...
手把手教你将项目部署到服务器!
一、导入centos7虚拟机: 打开VMWare,点击“打开虚拟机”,选择centos7.ova之后,选择存储路径: 点击导入: 选择“不再显示此消息”,点击“重试”按钮: 点击“编辑虚拟机设置”&#x…...
OpenHarmony应用开发-ArkUI方舟开发框架简析
方舟开发框架(简称ArkUI)为OpenHarmony应用的UI开发提供了完整的基础设施,包括简洁的UI语法、丰富的UI功能(组件、布局、动画以及交互事件),以及实时界面预览工具等,可以支持开发者进行可视化界…...
图案生成自动化:从基础操作到专业应用的完整指南
图案生成自动化:从基础操作到专业应用的完整指南 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 在现代设计工作流中,图案生成往往是最耗时的环节之一。设计…...
xarray 实战指南 - 从数据操作到科学计算
1. 为什么你需要xarray? 第一次接触科学计算时,我用的是NumPy和Pandas。那时候处理气象数据,经常要手动管理维度、坐标和属性,一个简单的时空平均操作要写好几行代码。直到发现了xarray,才明白原来数据处理可以这么优雅…...
用树莓派Zero 2W和Qt5打造你的第一个工业控制面板(附完整源码)
用树莓派Zero 2W和Qt5打造工业级控制面板实战指南 在嵌入式开发领域,树莓派Zero 2W以其紧凑的尺寸和出色的能效比,正成为工业控制应用的理想选择。这款信用卡大小的计算机搭载四核64位处理器和512MB内存,足以运行复杂的Qt图形界面,…...
5分钟搞定高精度人脸检测:MogFace工具零基础部署与使用教程
5分钟搞定高精度人脸检测:MogFace工具零基础部署与使用教程 1. 前言:为什么选择MogFace? 人脸检测技术已经广泛应用于我们的日常生活中,从手机相册的人脸分类到社交媒体的美颜滤镜,都离不开这项基础技术。然而在实际…...
如何在Ozon产品测款?用CaptainAI精准锁定爆款潜力款
做Ozon运营,测款是店铺长期盈利的关键——选对款能事半功倍,测错款则会积压库存、浪费成本,中小卖家资金精力有限,盲目铺货测款易陷入“高投入、低回报”困境。很多卖家测款常踩坑:凭感觉跟风选热门款,竞争…...
对于对话中的用户长期兴趣建模,OpenClaw 的序列推荐方法?
关于对话系统中如何捕捉用户长期兴趣这件事,业内琢磨了挺长时间。传统的序列推荐模型,比如那些基于循环神经网络或者注意力机制的,往往更擅长处理短期的、密集的交互序列。它们像是一个敏锐的现场观察者,能立刻抓住你刚才点击了什…...
收藏 | 阿里字节开源Agent框架大比拼:小白程序员必看,三种思路助你入门大模型!
本文对比了阿里和字节开源的HiClaw、CoPaw和DeerFlow三个Agent框架,分析了它们在架构设计、安全模型和适用场景上的差异。HiClaw侧重多Agent协作,CoPaw聚焦个人AI助手,DeerFlow强调单Agent深度任务处理。文章还探讨了阿里组合拳与字节单点突破…...
Windows环境下Jaeger全链路监控系统搭建指南
1. 为什么需要全链路监控系统 在微服务架构中,一个用户请求可能会经过多个服务的处理。想象一下,你在电商网站下单时,这个操作会触发订单服务、支付服务、库存服务等多个系统的协同工作。当出现问题时,传统的日志排查就像在迷宫里…...
太原理工大学Web开发历年真题解析:期末复习必备指南(附最新试卷)
太原理工大学Web开发核心考点深度剖析与高效复习方法论 Web开发课程期末备考的战略视角 又到了期末季,作为太原理工大学计算机相关专业的学生,面对Web开发这门实践性极强的课程,你是否还在为如何高效复习而焦虑?不同于传统理论课…...
nuScenes数据集深度解析:从传感器融合到3D目标检测的完整数据流
nuScenes数据集工程化实战:多传感器时空对齐与3D检测数据流优化 在自动驾驶研发领域,数据是算法迭代的基石。当我们谈论nuScenes数据集时,多数讨论停留在基础功能介绍层面,却鲜有从工程实现角度剖析其数据流设计的精妙之处。本文将…...
