From 8856be4b3137fce011c4203f28bd3daeaf7db41f Mon Sep 17 00:00:00 2001 From: chenxiaobin19 <1025221611@qq.com> Date: Wed, 12 Jun 2024 17:14:54 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0hash=E8=A1=A8checklist?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...2\351\252\214\346\224\266checkin\346\250\241\346\235\277.md" | 2 +- ...\351\252\214\346\224\266check-in\346\250\241\346\235\277.md" | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git "a/check-in/template/openGauss SQL\345\205\274\345\256\271\346\200\247\351\234\200\346\261\202\351\252\214\346\224\266checkin\346\250\241\346\235\277.md" "b/check-in/template/openGauss SQL\345\205\274\345\256\271\346\200\247\351\234\200\346\261\202\351\252\214\346\224\266checkin\346\250\241\346\235\277.md" index 35e75e4..1fd6ca2 100644 --- "a/check-in/template/openGauss SQL\345\205\274\345\256\271\346\200\247\351\234\200\346\261\202\351\252\214\346\224\266checkin\346\250\241\346\235\277.md" +++ "b/check-in/template/openGauss SQL\345\205\274\345\256\271\346\200\247\351\234\200\346\261\202\351\252\214\346\224\266checkin\346\250\241\346\235\277.md" @@ -15,7 +15,7 @@ | 升级 | 兼容性 | 版本号变更 | src/common/backend/utils/init/globals.cpp :GRAND_VERSION_NUM | | | | 升级 | 兼容性 | 前向兼容性 | 1)涉及系统表修改的特性,必须提供系统表升级脚本和回滚脚本,修改版本号文件 2)对于涉及修改持久化数据(如日志)的特性,必须考虑新老版本共存时的兼容性场景,必要情况下,需要增加版本号以进行识别 3)对于涉及修改执行态数据格式(如syscache结构)的特性,必须考虑新老版本共存时的兼容性场景,必要情况下,需要增加版本号以进行识别 | | | | 升级 | 兼容性 | 验证升级正常 | 涉及到升级时需要验证如下场景: 1. 集群环境安装:该步骤会验证集群环境安装是否正常 2. 集群环境升级:从老的版本(1.1.0版本)升级到最新版本是否正常 | | | -| 公共数据结构 | 功能 | hashtable | hashtable使用注意事项 ①在使用hash表时,entry必须封装成一个结构体,第一个成员必须是hash key 否则会造成查找失败!! ②封装的结构体必须只有两个成员:key+value,即value需要封装起来 否则hash表在search的时候会core!! ③hash表在创建的时候,entry 的size一定要正确 否则在enter的时候会造成写越界,不会报错但是其它变量内存会被踩,不易发现!! | | | +| 公共数据结构 | 功能 | hashtable | hashtable使用注意事项 ①在使用hash表时,entry必须封装成一个结构体,第一个成员必须是hash key 否则会造成查找失败!! ②封装的结构体必须只有两个成员:key+value,即value需要封装起来 否则hash表在search的时候会core!! ③hash表在创建的时候,entry 的size一定要正确 否则在enter的时候会造成写越界,不会报错但是其它变量内存会被踩,不易发现!! ④在遍历hash表的循环过程中,使用hash_seq_init初始化游标时重点审视是否存在重复问题,是否符合预期。 | | | | 公共数据结构 | 功能 | 禁止使用commandTag 判断Query的类型 | 需要对SELECT\INSERT\UPDATE\DELETE\MERGE INTO等query类型进行识别判断时,应该使用CmdType进行判断或新增标识。 禁止使用commandTag作为判断标识,因为commandTag在带returning*语句执行中变化。 | | | | 系统函数 | 兼容性 | 系统表升级是否正确 | 通过对比initdb和升级后的db中pg_proc每一列的值,避免出现升级和非升级不一致的情况 | | | | 系统函数 | 兼容性 | 新增数据类型适配FENCED函数 | 新增数据类型如果是FENCED函数使用,需要修改UDFArgumentHandler函数,把数据类型添加到对应收发分支。 | | | diff --git "a/check-in/template/openGauss-server\344\273\223\351\234\200\346\261\202\351\252\214\346\224\266check-in\346\250\241\346\235\277.md" "b/check-in/template/openGauss-server\344\273\223\351\234\200\346\261\202\351\252\214\346\224\266check-in\346\250\241\346\235\277.md" index 92ab886..71d6a3b 100644 --- "a/check-in/template/openGauss-server\344\273\223\351\234\200\346\261\202\351\252\214\346\224\266check-in\346\250\241\346\235\277.md" +++ "b/check-in/template/openGauss-server\344\273\223\351\234\200\346\261\202\351\252\214\346\224\266check-in\346\250\241\346\235\277.md" @@ -22,7 +22,7 @@ | 内存 | 内存 | 内存大容量边界设计 | 对于内存使用要考虑大容量边界的设计:
1.缓存大量数据场景。
2.长事务/循环中分配大量小块内存需要显式调用pfree_ext释放。 | | | | 内存 | 内存 | 析构函数 | GAUSSDB在线程异常退出时,会释放线程上变量的内存并递归调用线程上所有类的析构函数,为避免double free的情况,需通过判断CurrentResourceOwner是否为空,如果为空,则表示线程退出中,此时仅需要将变量置为NULL即可 | | | | 公共数据结构 | 功能 | pg_try | PG_TRY使用注意事项
① PG_CATCH中不能使用return,否则会出现随机core;
② PG_CATCH中一定要记得清理eredata (FlushErrorState();),否则会出现暴栈; | | | -| 公共数据结构 | 功能 | hashtable | hashtable使用注意事项 ①在使用hash表时,entry必须封装成一个结构体,第一个成员必须是hash key 否则会造成查找失败!! ②封装的结构体必须只有两个成员:key+value,即value需要封装起来 否则hash表在search的时候会core!! ③hash表在创建的时候,entry 的size一定要正确 否则在enter的时候会造成写越界,不会报错但是其它变量内存会被踩,不易发现!! | | | +| 公共数据结构 | 功能 | hashtable | hashtable使用注意事项 ①在使用hash表时,entry必须封装成一个结构体,第一个成员必须是hash key 否则会造成查找失败!! ②封装的结构体必须只有两个成员:key+value,即value需要封装起来 否则hash表在search的时候会core!! ③hash表在创建的时候,entry 的size一定要正确 否则在enter的时候会造成写越界,不会报错但是其它变量内存会被踩,不易发现!!④在遍历hash表的循环过程中,使用hash_seq_init初始化游标时重点审视是否存在重复问题,是否符合预期。 | | | | 公共数据结构 | 功能 | 禁止使用commandTag 判断Query的类型 | 需要对SELECT\INSERT\UPDATE\DELETE\MERGE INTO等query类型进行识别判断时,应该使用CmdType进行判断或新增标识。 禁止使用commandTag作为判断标识,因为commandTag在带returning*语句执行中变化。 | | | | 系统函数 | 兼容性 | 系统表升级是否正确 | 通过对比initdb和升级后的db中pg_proc每一列的值,避免出现升级和非升级不一致的情况 | | | | 系统函数 | 兼容性 | 新增数据类型适配FENCED函数 | 新增数据类型如果是FENCED函数使用,需要修改UDFArgumentHandler函数,把数据类型添加到对应收发分支。 | | | -- Gitee