!4539 【资源池化】【5.0.0同步】修复:无法写block,dss返回2181;上一轮reform失败,默认走rebuild,主机对于脏页不能直接失效
Merge pull request !4539 from 董宁/bugfix10_11_5.0.0
This commit is contained in:
@ -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);
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user