【资源池化】在线reform增强--解决release版本磁盘页面非0页面引入的问题

This commit is contained in:
dongning12
2024-02-08 16:06:34 +08:00
parent b8fc227823
commit 1c3f0eae0a
3 changed files with 4 additions and 22 deletions

View File

@ -393,7 +393,7 @@ XLogRedoAction SSCheckInitPageXLog(XLogReaderState *record, uint8 block_id, Redo
tde = InsertTdeInfoToCache(blockinfo.rnode, record->blocks[block_id].tdeinfo);
}
Buffer buf = XLogReadBufferExtended(blockinfo.rnode, blockinfo.forknum, blockinfo.blkno,
RBM_NORMAL, pblk, tde);
RBM_NORMAL_NO_LOG, pblk, tde);
if (BufferIsInvalid(buf)) {
ereport(PANIC, (errmsg("[SS redo][%u/%u/%u/%d %d-%u] buffer should be found",
blockinfo.rnode.spcNode, blockinfo.rnode.dbNode, blockinfo.rnode.relNode,
@ -426,7 +426,7 @@ bool SSPageReplayNeedSkip(RedoBufferInfo *bufferinfo, XLogRecPtr xlogLsn)
RedoBufferTag *blockinfo = &bufferinfo->blockinfo;
XLogPhyBlock *pblk = (blockinfo->pblk.relNode != InvalidOid) ? &blockinfo->pblk : NULL;
Buffer buf = XLogReadBufferExtended(blockinfo->rnode, blockinfo->forknum, blockinfo->blkno,
RBM_NORMAL, pblk, false);
RBM_NORMAL_NO_LOG, pblk, false);
if (BufferIsValid(buf)) {
Page page = BufferGetPage(buf);
LockBuffer(buf, BUFFER_LOCK_SHARE);

View File

@ -1162,17 +1162,6 @@ Buffer XLogReadBufferExtendedForHeapDisk(const RelFileNode &rnode, ForkNumber fo
LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
}
ReleaseBuffer(buffer);
if (ENABLE_DMS && IsExtremeRedo() && SSPrimaryRestartScenario()) {
/* page is empty on disk, but has xlog
* in extreme recovery we read buffer with RBM_NORMAL(S) instead of RBM_ZERO_AND_LOCK(X) or other.
* we will load empty page from disk with RBM_NORMAL, it is fine.
* later we will use RBM_ZERO_AND_LOCK. so no need to log_invalid_page.
*/
if ((IsDefaultExtremeRtoMode() && SS_IN_REFORM) ||
(IsOndemandExtremeRtoMode() && SS_IN_ONDEMAND_RECOVERY)) {
return InvalidBuffer;
}
}
RepairFileKey key;
key.relfilenode = rnode;
key.forknum = forknum;
@ -1255,13 +1244,6 @@ Buffer XLogReadBufferExtendedForSegpage(const RelFileNode &rnode, ForkNumber for
LockBuffer(buffer, BUFFER_LOCK_UNLOCK);
}
SegReleaseBuffer(buffer);
if (ENABLE_DMS && IsExtremeRedo() && SSPrimaryRestartScenario()) {
// reason same as simliar location in XLogReadBufferExtendedForHeapDisk
if ((IsDefaultExtremeRtoMode() && SS_IN_REFORM) ||
(IsOndemandExtremeRtoMode() && SS_IN_ONDEMAND_RECOVERY)) {
return InvalidBuffer;
}
}
RepairFileKey key;
key.relfilenode = rnode;
key.forknum = forknum;

View File

@ -506,7 +506,7 @@ void df_extend_internal(SegLogicFile *sf)
ereport(ERROR, (errcode_for_file_access(), errmsg("[segpage] could not create file \"%s\": %m", filename)));
}
if (ftruncate(new_fd, DF_FILE_EXTEND_STEP_SIZE) != 0) {
if (fallocate(new_fd, 0, 0, DF_FILE_EXTEND_STEP_SIZE) != 0) {
dv_close_file(new_fd);
ereport(ERROR,
(errmodule(MOD_SEGMENT_PAGE),
@ -535,7 +535,7 @@ void df_extend_internal(SegLogicFile *sf)
pfree(filename);
}
if (ftruncate(fd, new_size) != 0) {
if (fallocate(fd, 0, last_file_size, new_size - last_file_size) != 0) {
char *filename = slice_filename(sf->filename, sf->file_num - 1);
ereport(ERROR, (errmsg("ftuncate file %s failed during df_extend due to %s", filename, strerror(errno))));
}