From 27589d2f1bde0e1113eb5f9cca77b29be9e6bb74 Mon Sep 17 00:00:00 2001 From: chendong76 <1209756284@qq.com> Date: Fri, 1 Nov 2024 17:37:28 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dhash=E7=B4=A2=E5=BC=95?= =?UTF-8?q?=E9=83=A8=E5=88=86=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../storage/access/redo/redo_hash.cpp | 2 ++ .../storage/access/redo/redo_xlogutils.cpp | 28 +++++++++---------- .../multi_standby_single/hash_index.sh | 20 ++++++------- 3 files changed, 26 insertions(+), 24 deletions(-) diff --git a/src/gausskernel/storage/access/redo/redo_hash.cpp b/src/gausskernel/storage/access/redo/redo_hash.cpp index 5a2156dda..27a6817de 100644 --- a/src/gausskernel/storage/access/redo/redo_hash.cpp +++ b/src/gausskernel/storage/access/redo/redo_hash.cpp @@ -1136,6 +1136,7 @@ static void HashXlogMovePageContentsBlock(XLogBlockHead *blockhead, XLogBlockDat if (block_id == HASH_MOVE_BUK_BLOCK_NUM) { PageSetLSN(bufferinfo->pageinfo.page, bufferinfo->lsn); + MakeRedoBufferDirty(bufferinfo); } if (block_id == HASH_MOVE_ADD_BLOCK_NUM) { @@ -1169,6 +1170,7 @@ static void HashXlogSqueezePageBlock(XLogBlockHead *blockhead, XLogBlockDataPars if (block_id == HASH_SQUEEZE_BUK_BLOCK_NUM) { PageSetLSN(bufferinfo->pageinfo.page, bufferinfo->lsn); + MakeRedoBufferDirty(bufferinfo); } if (block_id == HASH_SQUEEZE_ADD_BLOCK_NUM) { diff --git a/src/gausskernel/storage/access/redo/redo_xlogutils.cpp b/src/gausskernel/storage/access/redo/redo_xlogutils.cpp index 2e5567acc..2fbcd1a71 100644 --- a/src/gausskernel/storage/access/redo/redo_xlogutils.cpp +++ b/src/gausskernel/storage/access/redo/redo_xlogutils.cpp @@ -1737,22 +1737,22 @@ void ExtremeRtoFlushBuffer(RedoBufferInfo *bufferinfo, bool updateFsm) /* backends may mark buffer dirty already */ if (!(bufDesc->state & BM_DIRTY)) { MarkBufferDirty(bufferinfo->buf); - } - if (!bufferinfo->dirtyflag && bufferinfo->blockinfo.forknum == MAIN_FORKNUM) { - int mode = WARNING; + if (!bufferinfo->dirtyflag && bufferinfo->blockinfo.forknum == MAIN_FORKNUM) { + int mode = WARNING; #ifdef USE_ASSERT_CHECKING - mode = PANIC; + mode = PANIC; #endif - const uint32 shiftSz = 32; - ereport(mode, (errmsg("extreme_rto not mark dirty:lsn %X/%X, lsn_disk %X/%X, " - "lsn_page %X/%X, page %u/%u/%u %u", - (uint32)(bufferinfo->lsn >> shiftSz), (uint32)(bufferinfo->lsn), - (uint32)(bufDesc->extra->lsn_on_disk >> shiftSz), - (uint32)(bufDesc->extra->lsn_on_disk), - (uint32)(PageGetLSN(bufferinfo->pageinfo.page) >> shiftSz), - (uint32)(PageGetLSN(bufferinfo->pageinfo.page)), - bufferinfo->blockinfo.rnode.spcNode, bufferinfo->blockinfo.rnode.dbNode, - bufferinfo->blockinfo.rnode.relNode, bufferinfo->blockinfo.blkno))); + const uint32 shiftSz = 32; + ereport(mode, (errmsg("extreme_rto not mark dirty:lsn %X/%X, lsn_disk %X/%X, " + "lsn_page %X/%X, page %u/%u/%u %u", + (uint32)(bufferinfo->lsn >> shiftSz), (uint32)(bufferinfo->lsn), + (uint32)(bufDesc->extra->lsn_on_disk >> shiftSz), + (uint32)(bufDesc->extra->lsn_on_disk), + (uint32)(PageGetLSN(bufferinfo->pageinfo.page) >> shiftSz), + (uint32)(PageGetLSN(bufferinfo->pageinfo.page)), + bufferinfo->blockinfo.rnode.spcNode, bufferinfo->blockinfo.rnode.dbNode, + bufferinfo->blockinfo.rnode.relNode, bufferinfo->blockinfo.blkno))); + } } #ifdef USE_ASSERT_CHECKING bufDesc->lsn_dirty = PageGetLSN(bufferinfo->pageinfo.page); diff --git a/src/test/ha/testcase/multi_standby_single/hash_index.sh b/src/test/ha/testcase/multi_standby_single/hash_index.sh index 863ed7d20..af1e0373e 100644 --- a/src/test/ha/testcase/multi_standby_single/hash_index.sh +++ b/src/test/ha/testcase/multi_standby_single/hash_index.sh @@ -26,20 +26,20 @@ function hash_index_test() gsql -d $db_name -p $dn1_primary_port -c "create table hash_table_2(id int, name varchar, sex varchar default 'male');" gsql -d $db_name -p $dn1_primary_port -c "insert into hash_table_2 select random()*100, 'XXX', 'XXX' from generate_series(1,50000);" - gsql -d $db_name -p $dn1_primary_port -c "create or replace procedure hash_proc_9(sid in integer) + gsql -d $db_name -p $dn1_primary_port -c "create or replace procedure hash_proc_2(sid in integer) is begin set enable_indexscan = on; set enable_bitmapscan = off; -delete from hash_table_9 where id = sid; -perform * from hash_table_9 where id = sid; -insert into hash_table_9 select sid, random() * 10, 'xxx' from generate_series(1,5000); +delete from hash_table_2 where id = sid; +perform * from hash_table_2 where id = sid; +insert into hash_table_2 select sid, random() * 10, 'xxx' from generate_series(1,5000); end; /" - gsql -d $db_name -p $dn1_primary_port -c "call hash_proc_9(1);" - gsql -d $db_name -p $dn1_primary_port -c "call hash_proc_9(1);" - gsql -d $db_name -p $dn1_primary_port -c "call hash_proc_9(1);" - gsql -d $db_name -p $dn1_primary_port -c "call hash_proc_9(1);" + gsql -d $db_name -p $dn1_primary_port -c "call hash_proc_2(1);" + gsql -d $db_name -p $dn1_primary_port -c "call hash_proc_2(1);" + gsql -d $db_name -p $dn1_primary_port -c "call hash_proc_2(1);" + gsql -d $db_name -p $dn1_primary_port -c "call hash_proc_2(1);" sleep 3; @@ -56,8 +56,8 @@ function test_1() kill_cluster echo "begin to set parallel recovery param" gs_guc set -Z datanode -D $primary_data_dir -c "recovery_max_workers = 2" - gs_guc set -Z datanode -D $primary_data_dir -c "recovery_parse_workers = 0" - gs_guc set -Z datanode -D $primary_data_dir -c "recovery_redo_workers = 0" + gs_guc set -Z datanode -D $primary_data_dir -c "recovery_parse_workers = 1" + gs_guc set -Z datanode -D $primary_data_dir -c "recovery_redo_workers = 1" gs_guc set -Z datanode -D $primary_data_dir -c "hot_standby = on" start_cluster echo "start cluter success!"