From 147d9d2c1c3ce67d00ab84dcb50d4d528f6f3114 Mon Sep 17 00:00:00 2001 From: "arcoalien@qq.com" Date: Tue, 12 Sep 2023 19:11:09 +0800 Subject: [PATCH] =?UTF-8?q?1.=E8=A7=A3=E5=86=B3=E4=B8=BB=E6=9C=BA=E6=96=B0?= =?UTF-8?q?=E5=8A=A0=E6=AE=B5=E9=A1=B5=E5=BC=8F=E6=96=87=E4=BB=B6=EF=BC=8C?= =?UTF-8?q?=E5=A4=87=E6=9C=BA=E6=9B=B4=E6=96=B0=E6=97=B6=E6=B2=A1=E6=9C=89?= =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E7=9A=84=E9=97=AE=E9=A2=98=202.?= =?UTF-8?q?=E8=A7=A3=E5=86=B3debug=E6=A8=A1=E5=BC=8F=E4=B8=8Bcm=5Fagent?= =?UTF-8?q?=E7=94=B1=E4=BA=8Eu=5Fsess=E4=B8=8A=E7=9A=84globalxmin=E6=98=AF?= =?UTF-8?q?=E6=97=A0=E6=95=88=E5=80=BC=EF=BC=8C=E5=AF=BC=E8=87=B4=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E7=9A=84=E9=97=AE=E9=A2=98=203.=E8=A7=A3=E5=86=B3?= =?UTF-8?q?=E4=B8=BB=E6=9C=BAdrop=20db/drop=20tablespace=EF=BC=8C=E5=B9=BF?= =?UTF-8?q?=E6=92=AD=E5=88=B0=E5=A4=87=E6=9C=BA=E5=90=8E=EF=BC=8C=E5=A4=87?= =?UTF-8?q?=E6=9C=BAmes=E5=A6=82=E6=9E=9C=E5=BC=82=E5=B8=B8=E9=80=80?= =?UTF-8?q?=E5=87=BA=EF=BC=8C=E4=B8=8D=E9=87=8A=E6=94=BE=E9=94=81=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ddes/adapter/ss_transaction.cpp | 4 +++ .../storage/smgr/segment/data_file.cpp | 5 ++++ .../storage/smgr/segment/space.cpp | 25 +++++++++++-------- 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/src/gausskernel/ddes/adapter/ss_transaction.cpp b/src/gausskernel/ddes/adapter/ss_transaction.cpp index a25033bb7..642ebbe0b 100644 --- a/src/gausskernel/ddes/adapter/ss_transaction.cpp +++ b/src/gausskernel/ddes/adapter/ss_transaction.cpp @@ -102,6 +102,10 @@ Snapshot SSGetSnapshotData(Snapshot snapshot) /* For cm agent, it only query the system status using the parameter in memory. So don't need MVCC */ if (u_sess->libpq_cxt.IsConnFromCmAgent) { snapshot = SnapshotNow; + if (!TransactionIdIsNormal(u_sess->utils_cxt.RecentGlobalXmin)) { + u_sess->utils_cxt.RecentGlobalXmin = FirstNormalTransactionId; + } + u_sess->utils_cxt.RecentGlobalDataXmin = u_sess->utils_cxt.RecentGlobalXmin; return snapshot; } diff --git a/src/gausskernel/storage/smgr/segment/data_file.cpp b/src/gausskernel/storage/smgr/segment/data_file.cpp index 523c83f3b..6ea800893 100644 --- a/src/gausskernel/storage/smgr/segment/data_file.cpp +++ b/src/gausskernel/storage/smgr/segment/data_file.cpp @@ -155,6 +155,11 @@ bool df_ss_update_segfile_size(SegLogicFile *sf, BlockNumber target_block) } uint32 flags = O_RDWR | PG_BINARY; + /* need palloc segfiles if file_num is 0 */ + if (sf->vector_capacity == 0) { + df_extend_file_vector(sf); + } + if (sf->file_num == 0) { char *filename = slice_filename(sf->filename, 0); int fd = dv_open_file(filename, flags, (int)SEGMENT_FILE_MODE); diff --git a/src/gausskernel/storage/smgr/segment/space.cpp b/src/gausskernel/storage/smgr/segment/space.cpp index 122ff7884..bb8fcc0c5 100644 --- a/src/gausskernel/storage/smgr/segment/space.cpp +++ b/src/gausskernel/storage/smgr/segment/space.cpp @@ -413,19 +413,22 @@ static void SSClose_seg_files(SegSpace *spc) void SSDrop_seg_space(Oid spcNode, Oid dbNode) { - SegSpace *spc = spc_init_space_node(spcNode, dbNode); - AutoMutexLock spc_lock(&spc->lock); + SegSpace *entry = NULL; + AutoMutexLock spc_lock(&segspace_lock); + SegSpcTag tag = {.spcNode = spcNode, .dbNode = dbNode}; + SegmentCheck(t_thrd.storage_cxt.SegSpcCache != NULL); spc_lock.lock(); - - SpaceDataFileStatus dataStatus = spc_status(spc); - if (dataStatus == SpaceDataFileStatus::EMPTY) { - spc_lock.unLock(); - return; - } - - SegDropSpaceMetaBuffers(spcNode, dbNode); - SSClose_seg_files(spc); + entry = (SegSpace *)hash_search(t_thrd.storage_cxt.SegSpcCache, (void *)&tag, HASH_FIND, NULL); spc_lock.unLock(); + + if (entry != NULL) { + if(entry->status == OPENED) { + SSClose_seg_files(entry); + SegDropSpaceMetaBuffers(spcNode, dbNode); + } + spc_lock.lock(); + (void)hash_search(t_thrd.storage_cxt.SegSpcCache, (void *)&tag, HASH_REMOVE, NULL); + } return; }