已关闭
[Bug]: 列存表 ALTER COLUMN TYPE 时空指针解引用导致 gaussdb 崩溃(SetMinMaxVarStrTypeInternal) #1623
codefarrmer创建于  8月26日关闭于  16 天前
codefarrmer
codefarrmer成员
8月26日 创建

测试类型

SQL功能

测试版本

7.0.0LTS

问题描述

在 DEBUG_TYPE=memcheck(ASan + 断言)构建下,跑单机 fastcheck 回归 parallel_schedule0,用例 alter_table_000 / alter_table_003(列存表 ALTER TABLE 修改列类型)执行时,gaussdb 后端线程崩溃,ASan 报告空指针读(地址 0x1)。

操作系统和硬件信息

版本/commit:0943319e6b1562500a48ef9fb8da9c81e0763a96
平台:aarch64(Kunpeng),openEuler
构建:build.sh -m memcheck(-fsanitize=address -fsanitize=leak -fno-omit-frame-pointer -static-libasan -O0 -g,ENABLE_MEMORY_CHECK=ON,-DENABLE_HTAP)
回归:make fastcheck_single p=21000,schedule=parallel_schedule0
触发用例:alter_table_000、alter_table_003(dolphin B 库,contrib/dolphin)

测试环境

企业版单机

被测功能

预置条件

操作步骤

  1. 以 memcheck 模式编译 openGauss-server:sh build.sh -m memcheck --cmake -3rd ;
  2. cd tmp_build && make fastcheck_single p=21000;
  3. 跑到 alter_table_000 / alter_table_003 用例时稳定复现 gaussdb 崩溃。

最小用例:

CREATE DATABASE mysql_db DBCOMPATIBILITY 'B';
\c mysql_db;
drop table if exists t1 cascade;
create table t1(f1 int, f2 varchar(20), f3 timestamp, f4 bit(8), f5 bool) with (orientation = column);
insert into t1 values(1,'a','2022-11-08 19:56:10.158564',x'41',true),
                     (2,'b','2022-11-09 19:56:10.158564',x'42',false);
alter table t1 modify f1 int after f3;

预期输出

实际输出

image.png

日志信息

runlog如下

[miaoyuyang@openGauss62 openGauss-server]$ cat ~/memchk/asan/runlog.2280242
=================================================================
==2280242==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000001 (pc 0xaaae626cf248 bp 0xfffc62ed64d0 sp 0xfffc62ed64d0 T22)
==2280242==The signal is caused by a READ memory access.
==2280242==Hint: address points to the zero page.
    #0 0xaaae626cf248 in SetMinMaxVarStrTypeInternal /home/miaoyuyang/sda710/openGauss-server/src/gausskernel/storage/cstore/cstore_minmax_func.cpp:459
    #1 0xaaae626d030c in SetMinMaxVarStrType /home/miaoyuyang/sda710/openGauss-server/src/gausskernel/storage/cstore/cstore_minmax_func.cpp:508
    #2 0xaaae626eaf10 in CStoreRewriter::SetDataTypeHandleNormalCu(int, char const*, CUDesc*, CUDesc*) /home/miaoyuyang/sda710/openGauss-server/src/gausskernel/storage/cstore/cstore_rewrite.cpp:1262
    #3 0xaaae626e8bd8 in CStoreRewriter::SetDataType(unsigned int, HeapTupleData**, tupleDesc*, char const*, int, bool) /home/miaoyuyang/sda710/openGauss-server/src/gausskernel/storage/cstore/cstore_rewrite.cpp:1082
    #4 0xaaae626e0b34 in CStoreRewriter::RewriteColsData() /home/miaoyuyang/sda710/openGauss-server/src/gausskernel/storage/cstore/cstore_rewrite.cpp:534
    #5 0xfffaa0341464 in ATCStoreRewriteTable /home/miaoyuyang/sda710/openGauss-server/contrib/dolphin/tablecmds.cpp:34575
    #6 0xfffaa0341e90 in ExecRewriteCStoreTable /home/miaoyuyang/sda710/openGauss-server/contrib/dolphin/tablecmds.cpp:34755
    #7 0xfffaa02e8de8 in ATRewriteTables /home/miaoyuyang/sda710/openGauss-server/contrib/dolphin/tablecmds.cpp:10798
    #8 0xfffaa02e40c8 in ATController /home/miaoyuyang/sda710/openGauss-server/contrib/dolphin/tablecmds.cpp:9042
    #9 0xfffaa02e3254 in AlterTable(unsigned int, int, AlterTableStmt*) /home/miaoyuyang/sda710/openGauss-server/contrib/dolphin/tablecmds.cpp:8630
    #10 0xfffaa02b3c38 in ProcessUtilitySlow /home/miaoyuyang/sda710/openGauss-server/contrib/dolphin/plugin_utility.cpp:5427
    #11 0xfffaa02b3758 in standard_ProcessUtility(processutility_context*, _DestReceiver*, bool, char*, ProcessUtilityContext, bool) /home/miaoyuyang/sda710/openGauss-server/contrib/dolphin/plugin_utility.cpp:5179
    #12 0xaaae60eb1efc in standard_ProcessUtility(processutility_context*, _DestReceiver*, bool, char*, ProcessUtilityContext, bool) /home/miaoyuyang/sda710/openGauss-server/src/gausskernel/process/tcop/utility.cpp:2611
    #13 0xfffd649ca774 in gsaudit_ProcessUtility_hook /home/miaoyuyang/sda710/openGauss-server/contrib/security_plugin/gs_policy_plugin.cpp:819
    #14 0xaaae60e30f88 in pgaudit_ProcessUtility /home/miaoyuyang/sda710/openGauss-server/src/gausskernel/process/tcop/auditfuncs.cpp:1474
    #15 0xaaae5fce10ac in instr_trace_ProcessUtility(processutility_context*, _DestReceiver*, bool, char*, ProcessUtilityContext, bool) /home/miaoyuyang/sda710/openGauss-server/src/gausskernel/cbb/instruments/trace/instr_trace.cpp:934
    #16 0xaaae60fd7910 in hypo_utility_hook /home/miaoyuyang/sda710/openGauss-server/src/gausskernel/dbmind/kernel/hypopg_index.cpp:166
    #17 0xaaae60eae024 in ProcessUtility(processutility_context*, _DestReceiver*, bool, char*, ProcessUtilityContext, bool) /home/miaoyuyang/sda710/openGauss-server/src/gausskernel/process/tcop/utility.cpp:1600
    #18 0xaaae60e9c77c in PortalRunUtility /home/miaoyuyang/sda710/openGauss-server/src/gausskernel/process/tcop/pquery.cpp:1790
    #19 0xaaae60e9d2c0 in PortalRunMulti /home/miaoyuyang/sda710/openGauss-server/src/gausskernel/process/tcop/pquery.cpp:1966
    #20 0xaaae60e98cd8 in PortalRun(PortalData*, long, bool, _DestReceiver*, _DestReceiver*, char*) /home/miaoyuyang/sda710/openGauss-server/src/gausskernel/process/tcop/pquery.cpp:1229
    #21 0xaaae60e55c10 in exec_simple_query /home/miaoyuyang/sda710/openGauss-server/src/gausskernel/process/tcop/postgres.cpp:3377
    #22 0xaaae60e777e0 in ProcessCommandUpperQ /home/miaoyuyang/sda710/openGauss-server/src/gausskernel/process/tcop/postgres.cpp:10054
    #23 0xaaae60e766a0 in PostgresMain(int, char**, char const*, char const*) /home/miaoyuyang/sda710/openGauss-server/src/gausskernel/process/tcop/postgres.cpp:9816
    #24 0xaaae60d8b170 in BackendRun /home/miaoyuyang/sda710/openGauss-server/src/gausskernel/process/postmaster/postmaster.cpp:10320
    #25 0xaaae60db7d8c in int GaussDbThreadMain<(knl_thread_role)2>(knl_thread_arg*) /home/miaoyuyang/sda710/openGauss-server/src/gausskernel/process/postmaster/postmaster.cpp:15180
    #26 0xaaae60dad93c in InternalThreadFunc /home/miaoyuyang/sda710/openGauss-server/src/gausskernel/process/postmaster/postmaster.cpp:15912
    #27 0xaaae6364d488 in ThreadStarterFunc /home/miaoyuyang/sda710/openGauss-server/src/common/port/port_srv/gs_thread.cpp:383
    #28 0xfffd7e578788 in start_thread /usr/src/debug/glibc-2.28/nptl/pthread_create.c:486
    #29 0xfffd7e4851b8  (/usr/lib64/libc.so.6+0xd51b8)

AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV /home/miaoyuyang/sda710/openGauss-server/src/gausskernel/storage/cstore/cstore_minmax_func.cpp:459 in SetMinMaxVarStrTypeInternal
Thread T22 (TPLworker) created by T0 here:
    #0 0xaaae5e5d4ea4 in __interceptor_pthread_create ../../.././libsanitizer/asan/asan_interceptors.cpp:214
    #1 0xaaae6364e454 in gs_thread_create_ex(gs_thread_t*, void* (*)(void*), int, void*, cpu_set_t*) /home/miaoyuyang/sda710/openGauss-server/src/common/port/port_srv/gs_thread.cpp:829
    #2 0xaaae60dadb9c in initialize_thread(ThreadArg*) /home/miaoyuyang/sda710/openGauss-server/src/gausskernel/process/postmaster/postmaster.cpp:15928
    #3 0xaaae60dae568 in initialize_worker_thread(knl_thread_role, Port*, void*) /home/miaoyuyang/sda710/openGauss-server/src/gausskernel/process/postmaster/postmaster.cpp:16012
    #4 0xaaae60f4a75c in ThreadPoolWorker::StartUp() /home/miaoyuyang/sda710/openGauss-server/src/gausskernel/process/threadpool/threadpool_worker.cpp:137
    #5 0xaaae60f2eec8 in ThreadPoolGroup::AddWorker(int) /home/miaoyuyang/sda710/openGauss-server/src/gausskernel/process/threadpool/threadpool_group.cpp:162
    #6 0xaaae60f2ed40 in ThreadPoolGroup::InitWorkerSentry() /home/miaoyuyang/sda710/openGauss-server/src/gausskernel/process/threadpool/threadpool_group.cpp:154
    #7 0xaaae60f2e7d8 in ThreadPoolGroup::Init(bool) /home/miaoyuyang/sda710/openGauss-server/src/gausskernel/process/threadpool/threadpool_group.cpp:127
    #8 0xaaae60f240cc in ThreadPoolControler::Init(bool) /home/miaoyuyang/sda710/openGauss-server/src/gausskernel/process/threadpool/threadpool_controler.cpp:164
    #9 0xaaae60d557c0 in ServerLoop /home/miaoyuyang/sda710/openGauss-server/src/gausskernel/process/postmaster/postmaster.cpp:4153
    #10 0xaaae60d4f848 in PostmasterMain(int, char**) /home/miaoyuyang/sda710/openGauss-server/src/gausskernel/process/postmaster/postmaster.cpp:3409
    #11 0xaaae60b7a348 in main /home/miaoyuyang/sda710/openGauss-server/src/gausskernel/process/main/main.cpp:420
    #12 0xfffd7e3d3f7c in __libc_start_main ../csu/libc-start.c:308
    #13 0xaaae5e5a9070 in _start (/home/miaoyuyang/sda710/openGauss-server/src/test/regress/tmp_check/install/home/miaoyuyang/sda710/openGauss-server/mppdb_temp_install/bin/gaussdb+0x4da9070)

==2280242==ABORTING

提单组织

内部开发

测试代码

likedislike
codefarrmercodefarrmer成员
8月26日 添加了label:bug
opengauss_bot
opengauss_bot成员
8月26日 评论:

This issue requires an assignee. Since you haven't specified one, we've assigned TestManager as the default assignee for this issue.

likedislike
opengauss_botopengauss_bot成员
8月26日 将 TestManager 设为负责人
opengauss_botopengauss_bot成员
8月26日 添加了label:sig/Plugin
opengauss_bot
opengauss_bot成员
8月26日 评论:

Welcome To openGauss Community

Hey @codefarrmer , thanks for your contribution to the community.

Bot Usage Manual

I'm the Bot here serving you. You can find the instructions on how to interact with me at Here . That means you can comment below every pull request or issue to trigger Bot Commands. You can self-configure the PR merge rules for this repository. For more details, please refer to Here.

Contact Guide

If you have any questions, please contact the SIG: Plugin ,
and any of the maintainers: @CarrotGo, @chendong76, @chenxiaobin19, @congzhou2603, @dodders, @hwworkholic, @jemappellehc, @muyulinzhong, @quemingjian, @shenzheng4, @shirley_zhengx, @superlchf, @totaj, @wlff234, @wofanzheng, @ywzq1161327784 ,
and any of the committers: @dreamalloc, @huyinghao, @libiao2024, @wangfeihuo, @wmy_ld, @wuyuechuan, @xiong_xjun, @zhangxubo, @zhaojunv3z810 .

likedislike
sungang14sungang14成员
27 天前 issue优先级由 无优先级 改变为 次要
sungang14sungang14成员
27 天前 关联了看板:openGauss 7.0.0-LTS
ywzq1161327784ywzq1161327784成员
27 天前 移除了负责人 TestManager
opengauss_bot
opengauss_bot成员
27 天前 评论:

This issue requires an assignee. Since you haven't specified one, we've assigned TestManager as the default assignee for this issue.

likedislike
opengauss_botopengauss_bot成员
27 天前 将 TestManager 设为负责人
此处折叠了6条事件消息 查看更多
codefarrmercodefarrmer成员
20 天前 关联了pull request:fix: 列存表 ALTER COLUMN TYPE 时空指针解引用导致 gaussdb 崩溃
ywzq1161327784
ywzq1161327784成员
18 天前 评论:

20260912 B023自验ok
image.png

likedislike
ywzq1161327784ywzq1161327784成员
18 天前 issue状态由 待办的 改变为 待回归
liyangx成员
18 天前 评论:

20260912转测包自验结果无误:

-- 创建 UTF8 B库
CREATE DATABASE test_b
WITH
    DBCOMPATIBILITY = 'B'
    ENCODING = 'UTF8'
    LC_COLLATE = 'C.UTF-8'
    LC_CTYPE = 'C.UTF-8'
    TEMPLATE = template0;
    
\c test_b;
    
-- 最小用例
drop table if exists t1 cascade;
create table t1(f1 int, f2 varchar(20), f3 timestamp, f4 bit(8), f5 bool) with (orientation = column);
insert into t1 values(1,'a','2022-11-08 19:56:10.158564',x'41',true),
                     (2,'b','2022-11-09 19:56:10.158564',x'42',false);
alter table t1 modify f1 int after f3;

image.png

likedislike
sungang14
sungang14成员
16 天前 评论:

【回归人员】sungang14
【回归日期】2026.9.12
【回归版本】openGauss 7.0.0B023
【回归结论】通过
【回归步骤】

CREATE DATABASE test_b
WITH
DBCOMPATIBILITY = 'B'
ENCODING = 'UTF8'
LC_COLLATE = 'C.UTF-8'
LC_CTYPE = 'C.UTF-8'
TEMPLATE = template0;

\c test_b;

-- 最小用例
drop table if exists t1 cascade;
create table t1(f1 int, f2 varchar(20), f3 timestamp, f4 bit(8), f5 bool) with (orientation = column);
insert into t1 values(1,'a','2022-11-08 19:56:10.158564',x'41',true),
(2,'b','2022-11-09 19:56:10.158564',x'42',false);
alter table t1 modify f1 int after f3;

image.png
image.png

likedislike
sungang14sungang14成员
16 天前 issue状态由 待回归 改变为 已验收
sungang14sungang14成员
16 天前 关闭了 issue