已关闭
[Bug]: 变长列短值变长值,原页空间不足走跨页迁移路径触发core #333
hcs创建于  8月13日关闭于  25 天前
hcs
hcs成员
8月13日 创建

测试类型

SQL功能,存储功能

测试版本

7.0.0LTS

问题描述

内核走temp_heap_update_migr()跨页迁移路径触发core

操作系统和硬件信息

在dcs上可以复现

测试环境

企业版单机

被测功能

预置条件

操作步骤


DROP TABLE IF EXISTS repro_hp_gtt PURGE;
DROP TABLE IF EXISTS repro_hp_src PURGE;

CREATE TABLE repro_hp_src (
    c_id INT,
    c_d_id INT NOT NULL,
    c_w_id INT NOT NULL,
    c_first VARCHAR(16) NOT NULL,
    c_middle CHAR(2),
    c_last VARCHAR(16) NOT NULL,
    c_street_1 VARCHAR(20) NOT NULL,
    c_street_2 VARCHAR(20),
    c_city VARCHAR(20) NOT NULL,
    c_state CHAR(2) NOT NULL,
    c_zip CHAR(9) NOT NULL,
    c_phone CHAR(16) NOT NULL,
    c_since TIMESTAMP,
    c_credit CHAR(2) NOT NULL,
    c_credit_lim NUMERIC(12,2),
    c_discount NUMERIC(4,4),
    c_balance NUMERIC(12,2),
    c_ytd_payment NUMERIC(12,2) NOT NULL,
    c_payment_cnt INT NOT NULL,
    c_delivery_cnt INT NOT NULL,
    c_data VARCHAR(500) NOT NULL
);

INSERT INTO repro_hp_src VALUES
(1, 1, 1, 'qwertyasdf', 'MN', 'GREENFIELD',
 'oakstreet12', 'unit-9', 'newtowncity', 'CA', '902101234',
 '1310555123456789', NULL, 'BC', 42000.0, 0.1250, -20.0, 20.0,
 2, 1, RPAD('x', 500, 'x'));

INSERT INTO repro_hp_src SELECT c_id+1, c_d_id, c_w_id, c_first, c_middle, c_last, c_street_1, c_street_2, c_city, c_state, c_zip, c_phone, c_since, c_credit, c_credit_lim, c_discount, c_balance, c_ytd_payment, c_payment_cnt, c_delivery_cnt, c_data FROM repro_hp_src;
INSERT INTO repro_hp_src SELECT c_id+2, c_d_id, c_w_id, c_first, c_middle, c_last, c_street_1, c_street_2, c_city, c_state, c_zip, c_phone, c_since, c_credit, c_credit_lim, c_discount, c_balance, c_ytd_payment, c_payment_cnt, c_delivery_cnt, c_data FROM repro_hp_src;
INSERT INTO repro_hp_src SELECT c_id+4, c_d_id, c_w_id, c_first, c_middle, c_last, c_street_1, c_street_2, c_city, c_state, c_zip, c_phone, c_since, c_credit, c_credit_lim, c_discount, c_balance, c_ytd_payment, c_payment_cnt, c_delivery_cnt, c_data FROM repro_hp_src;
INSERT INTO repro_hp_src SELECT c_id+8, c_d_id, c_w_id, c_first, c_middle, c_last, c_street_1, c_street_2, c_city, c_state, c_zip, c_phone, c_since, c_credit, c_credit_lim, c_discount, c_balance, c_ytd_payment, c_payment_cnt, c_delivery_cnt, c_data FROM repro_hp_src WHERE c_id <= 2;
INSERT INTO repro_hp_src SELECT c_id+16, c_d_id, c_w_id, c_first, c_middle, c_last, c_street_1, c_street_2, c_city, c_state, c_zip, c_phone, c_since, c_credit, c_credit_lim, c_discount, c_balance, c_ytd_payment, c_payment_cnt, c_delivery_cnt, c_data FROM repro_hp_src;
INSERT INTO repro_hp_src SELECT c_id+32, c_d_id, c_w_id, c_first, c_middle, c_last, c_street_1, c_street_2, c_city, c_state, c_zip, c_phone, c_since, c_credit, c_credit_lim, c_discount, c_balance, c_ytd_payment, c_payment_cnt, c_delivery_cnt, c_data FROM repro_hp_src;
INSERT INTO repro_hp_src SELECT c_id+64, c_d_id, c_w_id, c_first, c_middle, c_last, c_street_1, c_street_2, c_city, c_state, c_zip, c_phone, c_since, c_credit, c_credit_lim, c_discount, c_balance, c_ytd_payment, c_payment_cnt, c_delivery_cnt, c_data FROM repro_hp_src;
INSERT INTO repro_hp_src SELECT c_id+128, c_d_id, c_w_id, c_first, c_middle, c_last, c_street_1, c_street_2, c_city, c_state, c_zip, c_phone, c_since, c_credit, c_credit_lim, c_discount, c_balance, c_ytd_payment, c_payment_cnt, c_delivery_cnt, c_data FROM repro_hp_src;
INSERT INTO repro_hp_src SELECT c_id+256, c_d_id, c_w_id, c_first, c_middle, c_last, c_street_1, c_street_2, c_city, c_state, c_zip, c_phone, c_since, c_credit, c_credit_lim, c_discount, c_balance, c_ytd_payment, c_payment_cnt, c_delivery_cnt, c_data FROM repro_hp_src;
INSERT INTO repro_hp_src SELECT c_id+512, c_d_id, c_w_id, c_first, c_middle, c_last, c_street_1, c_street_2, c_city, c_state, c_zip, c_phone, c_since, c_credit, c_credit_lim, c_discount, c_balance, c_ytd_payment, c_payment_cnt, c_delivery_cnt, c_data FROM repro_hp_src;
INSERT INTO repro_hp_src SELECT c_id+1024, c_d_id, c_w_id, c_first, c_middle, c_last, c_street_1, c_street_2, c_city, c_state, c_zip, c_phone, c_since, c_credit, c_credit_lim, c_discount, c_balance, c_ytd_payment, c_payment_cnt, c_delivery_cnt, c_data FROM repro_hp_src;
INSERT INTO repro_hp_src SELECT c_id+2048, c_d_id, c_w_id, c_first, c_middle, c_last, c_street_1, c_street_2, c_city, c_state, c_zip, c_phone, c_since, c_credit, c_credit_lim, c_discount, c_balance, c_ytd_payment, c_payment_cnt, c_delivery_cnt, c_data FROM repro_hp_src;
INSERT INTO repro_hp_src SELECT c_id+4096, c_d_id, c_w_id, c_first, c_middle, c_last, c_street_1, c_street_2, c_city, c_state, c_zip, c_phone, c_since, c_credit, c_credit_lim, c_discount, c_balance, c_ytd_payment, c_payment_cnt, c_delivery_cnt, c_data FROM repro_hp_src;
INSERT INTO repro_hp_src SELECT c_id+8192, c_d_id, c_w_id, c_first, c_middle, c_last, c_street_1, c_street_2, c_city, c_state, c_zip, c_phone, c_since, c_credit, c_credit_lim, c_discount, c_balance, c_ytd_payment, c_payment_cnt, c_delivery_cnt, c_data FROM repro_hp_src;
DELETE FROM repro_hp_src WHERE c_id > 10000;

CREATE GLOBAL TEMPORARY TABLE repro_hp_gtt (
    c_id INT,
    c_d_id INT NOT NULL,
    c_w_id INT NOT NULL,
    c_first VARCHAR(16) NOT NULL,
    c_middle CHAR(2),
    c_last VARCHAR(16) NOT NULL,
    c_street_1 VARCHAR(20) NOT NULL,
    c_street_2 VARCHAR(20),
    c_city VARCHAR(20) NOT NULL,
    c_state CHAR(2) NOT NULL,
    c_zip CHAR(9) NOT NULL,
    c_phone CHAR(16) NOT NULL,
    c_since TIMESTAMP,
    c_credit CHAR(2) NOT NULL,
    c_credit_lim NUMERIC(12,2),
    c_discount NUMERIC(4,4),
    c_balance NUMERIC(12,2),
    c_ytd_payment NUMERIC(12,2) NOT NULL,
    c_payment_cnt INT NOT NULL,
    c_delivery_cnt INT NOT NULL,
    c_data VARCHAR(500) NOT NULL
);

INSERT INTO repro_hp_gtt
SELECT c_id, c_d_id, c_w_id, c_first, c_middle, c_last,
       c_street_1, c_street_2, c_city, c_state, c_zip, c_phone,
       c_since, c_credit, c_credit_lim, c_discount, c_balance,
       c_ytd_payment, c_payment_cnt, c_delivery_cnt, c_data
FROM repro_hp_src;

UPDATE repro_hp_gtt SET c_first = 'zzzzzzzzzzzzzzz';

预期输出

实际输出

image.png

日志信息

image.png

提单组织

内部开发

测试代码

likedislike
hcshcs成员
8月13日 添加了label:bug
opengauss_bot
opengauss_bot成员
8月13日 评论:

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月13日 将 TestManager 设为负责人
opengauss_botopengauss_bot成员
8月13日 添加了label:sig/StorageEngine
opengauss_bot
opengauss_bot成员
8月13日 评论:

Welcome To openGauss Community

Hey @Nerifish , 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.

Contact Guide

If you have any questions, please contact the SIG: StorageEngine ,
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: @CityYard, @libiao2024, @lijieac, @theothersideofsea, @wang_bowen, @weithu, @xiong_xjun, @yuanyazhi, @zhangzq131 .

likedislike
sungang14sungang14成员
9月3日 issue优先级由 不重要 改变为 主要
sungang14sungang14成员
9月3日 关联了看板:openGauss 7.0.0-LTS
muyulinzhongmuyulinzhong成员
9月4日 将 congzhou2603 设为负责人
muyulinzhongmuyulinzhong成员
9月4日 移除了负责人 TestManager
zhoucong<Okidoki>zhoucong<Okidoki>成员
9月10日 关联了pull request:修复temp_heap_insert_into_page_migr core问题
zhoucong<Okidoki>
zhoucong<Okidoki>成员
29 天前 评论:

image.png

DROP TABLE IF EXISTS repro_hp_gtt_p0 PURGE;
DROP TABLE IF EXISTS repro_hp_src PURGE;

CREATE TABLE repro_hp_src (
    c_id             INT,
    c_d_id           INT NOT NULL,
    c_w_id           INT NOT NULL,
    c_first          VARCHAR(16) NOT NULL,
    c_middle         CHAR(2),
    c_last           VARCHAR(16) NOT NULL,
    c_street_1       VARCHAR(20) NOT NULL,
    c_street_2       VARCHAR(20),
    c_city           VARCHAR(20) NOT NULL,
    c_state          CHAR(2) NOT NULL,
    c_zip            CHAR(9) NOT NULL,
    c_phone          CHAR(16) NOT NULL,
    c_since          TIMESTAMP,
    c_credit         CHAR(2) NOT NULL,
    c_credit_lim     NUMERIC(12,2),
    c_discount       NUMERIC(4,4),
    c_balance        NUMERIC(12,2),
    c_ytd_payment    NUMERIC(12,2) NOT NULL,
    c_payment_cnt    INT NOT NULL,
    c_delivery_cnt   INT NOT NULL,
    c_data           VARCHAR(500) NOT NULL
);

INSERT INTO repro_hp_src VALUES (
    1, 1, 1,
    'qwertyasdf', 'MN', 'GREENFIELD',
    'oakstreet12', 'unit-9', 'newtowncity',
    'CA', '902101234', '1310555123456789',
    NULL, 'BC', 42000.0, 0.1250, -20.0, 20.0,
    2, 1, RPAD('x', 500, 'x')
);

INSERT INTO repro_hp_src
SELECT c_id + 1, c_d_id, c_w_id, c_first, c_middle, c_last,
       c_street_1, c_street_2, c_city, c_state, c_zip, c_phone,
       c_since, c_credit, c_credit_lim, c_discount, c_balance,
       c_ytd_payment, c_payment_cnt, c_delivery_cnt, c_data
FROM repro_hp_src;

INSERT INTO repro_hp_src
SELECT c_id + 2, c_d_id, c_w_id, c_first, c_middle, c_last,
       c_street_1, c_street_2, c_city, c_state, c_zip, c_phone,
       c_since, c_credit, c_credit_lim, c_discount, c_balance,
       c_ytd_payment, c_payment_cnt, c_delivery_cnt, c_data
FROM repro_hp_src;

INSERT INTO repro_hp_src
SELECT c_id + 4, c_d_id, c_w_id, c_first, c_middle, c_last,
       c_street_1, c_street_2, c_city, c_state, c_zip, c_phone,
       c_since, c_credit, c_credit_lim, c_discount, c_balance,
       c_ytd_payment, c_payment_cnt, c_delivery_cnt, c_data
FROM repro_hp_src;

INSERT INTO repro_hp_src
SELECT c_id + 8, c_d_id, c_w_id, c_first, c_middle, c_last,
       c_street_1, c_street_2, c_city, c_state, c_zip, c_phone,
       c_since, c_credit, c_credit_lim, c_discount, c_balance,
       c_ytd_payment, c_payment_cnt, c_delivery_cnt, c_data
FROM repro_hp_src
WHERE c_id <= 2;

INSERT INTO repro_hp_src
SELECT c_id + 16, c_d_id, c_w_id, c_first, c_middle, c_last,
       c_street_1, c_street_2, c_city, c_state, c_zip, c_phone,
       c_since, c_credit, c_credit_lim, c_discount, c_balance,
       c_ytd_payment, c_payment_cnt, c_delivery_cnt, c_data
FROM repro_hp_src;

INSERT INTO repro_hp_src
SELECT c_id + 32, c_d_id, c_w_id, c_first, c_middle, c_last,
       c_street_1, c_street_2, c_city, c_state, c_zip, c_phone,
       c_since, c_credit, c_credit_lim, c_discount, c_balance,
       c_ytd_payment, c_payment_cnt, c_delivery_cnt, c_data
FROM repro_hp_src;

INSERT INTO repro_hp_src
SELECT c_id + 64, c_d_id, c_w_id, c_first, c_middle, c_last,
       c_street_1, c_street_2, c_city, c_state, c_zip, c_phone,
       c_since, c_credit, c_credit_lim, c_discount, c_balance,
       c_ytd_payment, c_payment_cnt, c_delivery_cnt, c_data
FROM repro_hp_src;

INSERT INTO repro_hp_src
SELECT c_id + 128, c_d_id, c_w_id, c_first, c_middle, c_last,
       c_street_1, c_street_2, c_city, c_state, c_zip, c_phone,
       c_since, c_credit, c_credit_lim, c_discount, c_balance,
       c_ytd_payment, c_payment_cnt, c_delivery_cnt, c_data
FROM repro_hp_src;

INSERT INTO repro_hp_src
SELECT c_id + 256, c_d_id, c_w_id, c_first, c_middle, c_last,
       c_street_1, c_street_2, c_city, c_state, c_zip, c_phone,
       c_since, c_credit, c_credit_lim, c_discount, c_balance,
       c_ytd_payment, c_payment_cnt, c_delivery_cnt, c_data
FROM repro_hp_src;

INSERT INTO repro_hp_src
SELECT c_id + 512, c_d_id, c_w_id, c_first, c_middle, c_last,
       c_street_1, c_street_2, c_city, c_state, c_zip, c_phone,
       c_since, c_credit, c_credit_lim, c_discount, c_balance,
       c_ytd_payment, c_payment_cnt, c_delivery_cnt, c_data
FROM repro_hp_src;

INSERT INTO repro_hp_src
SELECT c_id + 1024, c_d_id, c_w_id, c_first, c_middle, c_last,
       c_street_1, c_street_2, c_city, c_state, c_zip, c_phone,
       c_since, c_credit, c_credit_lim, c_discount, c_balance,
       c_ytd_payment, c_payment_cnt, c_delivery_cnt, c_data
FROM repro_hp_src;

INSERT INTO repro_hp_src
SELECT c_id + 2048, c_d_id, c_w_id, c_first, c_middle, c_last,
       c_street_1, c_street_2, c_city, c_state, c_zip, c_phone,
       c_since, c_credit, c_credit_lim, c_discount, c_balance,
       c_ytd_payment, c_payment_cnt, c_delivery_cnt, c_data
FROM repro_hp_src;

INSERT INTO repro_hp_src
SELECT c_id + 4096, c_d_id, c_w_id, c_first, c_middle, c_last,
       c_street_1, c_street_2, c_city, c_state, c_zip, c_phone,
       c_since, c_credit, c_credit_lim, c_discount, c_balance,
       c_ytd_payment, c_payment_cnt, c_delivery_cnt, c_data
FROM repro_hp_src;

INSERT INTO repro_hp_src
SELECT c_id + 8192, c_d_id, c_w_id, c_first, c_middle, c_last,
       c_street_1, c_street_2, c_city, c_state, c_zip, c_phone,
       c_since, c_credit, c_credit_lim, c_discount, c_balance,
       c_ytd_payment, c_payment_cnt, c_delivery_cnt, c_data
FROM repro_hp_src;

DELETE FROM repro_hp_src WHERE c_id > 10000;

CREATE GLOBAL TEMPORARY TABLE repro_hp_gtt_p0 (
    c_id             INT,
    c_d_id           INT NOT NULL,
    c_w_id           INT NOT NULL,
    c_first          VARCHAR(16) NOT NULL,
    c_middle         CHAR(2),
    c_last           VARCHAR(16) NOT NULL,
    c_street_1       VARCHAR(20) NOT NULL,
    c_street_2       VARCHAR(20),
    c_city           VARCHAR(20) NOT NULL,
    c_state          CHAR(2) NOT NULL,
    c_zip            CHAR(9) NOT NULL,
    c_phone          CHAR(16) NOT NULL,
    c_since          TIMESTAMP,
    c_credit         CHAR(2) NOT NULL,
    c_credit_lim     NUMERIC(12,2),
    c_discount       NUMERIC(4,4),
    c_balance        NUMERIC(12,2),
    c_ytd_payment    NUMERIC(12,2) NOT NULL,
    c_payment_cnt    INT NOT NULL,
    c_delivery_cnt   INT NOT NULL,
    c_data           VARCHAR(500) NOT NULL
) PCTFREE 0;

INSERT INTO repro_hp_gtt_p0
SELECT c_id, c_d_id, c_w_id, c_first, c_middle, c_last,
       c_street_1, c_street_2, c_city, c_state, c_zip, c_phone,
       c_since, c_credit, c_credit_lim, c_discount, c_balance,
       c_ytd_payment, c_payment_cnt, c_delivery_cnt, c_data
FROM repro_hp_src;

SELECT COUNT(*) FROM repro_hp_gtt_p0;

-- 当前缺陷版本执行到这里会触发 core。
UPDATE repro_hp_gtt_p0
SET c_first = 'zzzzzzzzzzzzzzz';
likedislike
zhoucong<Okidoki>zhoucong<Okidoki>成员
29 天前 issue状态由 待办的 改变为 待回归
lvlintao666
lvlintao666成员
25 天前 评论:

回归时间:2026..11
回归版本:7.0.0 B023
回归结论:通过
回归步骤:按上述步骤执行SQL语句
image.png

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