【资源池化】在线reform增强--解决release版本磁盘页面非0页面引入的问题
This commit is contained in:
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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))));
|
||||
}
|
||||
|
Reference in New Issue
Block a user