From c5410fb62d4e11dd9a45594fd50bb2805313ee39 Mon Sep 17 00:00:00 2001 From: dongning12 Date: Thu, 23 Nov 2023 14:53:08 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E3=80=90=E8=B5=84=E6=BA=90=E6=B1=A0?= =?UTF-8?q?=E5=8C=96=E3=80=91=E3=80=90bugfix=E3=80=91=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=EF=BC=9A=E6=97=A0=E6=B3=95=E5=86=99block=EF=BC=8Cdss=E8=BF=94?= =?UTF-8?q?=E5=9B=9E2181?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/gausskernel/storage/smgr/segment/data_file.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gausskernel/storage/smgr/segment/data_file.cpp b/src/gausskernel/storage/smgr/segment/data_file.cpp index a64f31a4c..4d88ed328 100644 --- a/src/gausskernel/storage/smgr/segment/data_file.cpp +++ b/src/gausskernel/storage/smgr/segment/data_file.cpp @@ -239,7 +239,7 @@ SegPhysicalFile df_get_physical_file(SegLogicFile *sf, int sliceno, BlockNumber SegmentCheck(sliceno < sf->file_num); if (ENABLE_DMS && sf->segfiles[sliceno].fd <= 0) { char *filename = slice_filename(sf->filename, sliceno); - sf->segfiles[sliceno].fd = dv_open_file(filename, O_RDONLY | PG_BINARY, SEGMENT_FILE_MODE); + sf->segfiles[sliceno].fd = dv_open_file(filename, O_RDWR | PG_BINARY, SEGMENT_FILE_MODE); pfree(filename); } From 243e16307c1b6e1cd19bf23d303af689a82f8676 Mon Sep 17 00:00:00 2001 From: dongning12 Date: Thu, 23 Nov 2023 15:32:52 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E3=80=90=E8=B5=84=E6=BA=90=E6=B1=A0?= =?UTF-8?q?=E5=8C=96=E3=80=91=E3=80=90bugfix=E3=80=91=E4=B8=8A=E4=B8=80?= =?UTF-8?q?=E8=BD=AEreform=E5=A4=B1=E8=B4=A5=EF=BC=8C=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E8=B5=B0rebuild=EF=BC=8C=E4=B8=BB=E6=9C=BA=E5=AF=B9=E4=BA=8E?= =?UTF-8?q?=E8=84=8F=E9=A1=B5=E4=B8=8D=E8=83=BD=E7=9B=B4=E6=8E=A5=E5=A4=B1?= =?UTF-8?q?=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/gausskernel/ddes/adapter/ss_dms_callback.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/gausskernel/ddes/adapter/ss_dms_callback.cpp b/src/gausskernel/ddes/adapter/ss_dms_callback.cpp index fe60634fd..7a4d39f9a 100644 --- a/src/gausskernel/ddes/adapter/ss_dms_callback.cpp +++ b/src/gausskernel/ddes/adapter/ss_dms_callback.cpp @@ -1226,15 +1226,19 @@ static int32 CBDrcBufRebuildInternal(int begin, int len, unsigned char thread_in Assert(begin >= 0 && len > 0 && (begin + len) <= TOTAL_BUFFER_NUM); for (int i = begin; i < begin + len; i++) { BufferDesc *buf_desc = GetBufferDescriptor(i); + bool need_rebuild = true; if (LWLockConditionalAcquire(buf_desc->content_lock, LW_EXCLUSIVE)) { buf_state = LockBufHdr(buf_desc); - if (buf_state & BM_VALID) { + if ((buf_state & BM_VALID) && !(buf_state & BM_DIRTY)) { dms_buf_ctrl_t *buf_ctrl = GetDmsBufCtrl(buf_desc->buf_id); buf_ctrl->lock_mode = DMS_LOCK_NULL; + need_rebuild = false; } UnlockBufHdr(buf_desc, buf_state); LWLockRelease(buf_desc->content_lock); - } else { + } + + if (need_rebuild) { buf_state = LockBufHdr(buf_desc); if (SSCheckBufferIfCanGoRebuild(buf_desc, buf_state)) { int ret = SSRebuildBuf(buf_desc, thread_index);