!4539 【资源池化】【5.0.0同步】修复:无法写block,dss返回2181;上一轮reform失败,默认走rebuild,主机对于脏页不能直接失效

Merge pull request !4539 from 董宁/bugfix10_11_5.0.0
This commit is contained in:
opengauss_bot
2023-12-01 06:49:41 +00:00
committed by Gitee
2 changed files with 7 additions and 3 deletions

View File

@ -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);

View File

@ -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);
}