!4884 调整按需回放未升主备机请求主机加载页面的日志打印

Merge pull request !4884 from 陈栋/bugfix
This commit is contained in:
opengauss_bot
2024-02-27 07:10:52 +00:00
committed by Gitee
3 changed files with 42 additions and 25 deletions

View File

@ -589,30 +589,43 @@ bool SSOndemandRequestPrimaryRedo(BufferTag tag)
}
ereport(DEBUG1,
(errmodule(MOD_DMS),
errmsg("[On-demand] start request primary node redo page, spc/db/rel/bucket fork-block: %u/%u/%u/%d %d-%u",
tag.rnode.spcNode, tag.rnode.dbNode, tag.rnode.relNode, tag.rnode.bucketNode, tag.forkNum,
tag.blockNum)));
(errmsg("[On-demand] Start request primary node redo page, spc/db/rel/bucket "
"fork-block: %u/%u/%u/%d %d-%u", tag.rnode.spcNode, tag.rnode.dbNode,
tag.rnode.relNode, tag.rnode.bucketNode, tag.forkNum, tag.blockNum)));
InitDmsContext(&dms_ctx);
dms_ctx.xmap_ctx.dest_id = (unsigned int)SS_PRIMARY_ID;
if (dms_reform_req_opengauss_ondemand_redo_buffer(&dms_ctx, &tag,
(unsigned int)sizeof(BufferTag), &redo_status) != DMS_SUCCESS) {
SSReadControlFile(REFORM_CTRL_PAGE);
ereport(LOG,
(errmodule(MOD_DMS),
errmsg("[On-demand] request primary node redo page failed, page id [%d/%d/%d/%d/%d %d-%d], "
"redo status %d", tag.rnode.spcNode, tag.rnode.dbNode, tag.rnode.relNode, (int)tag.rnode.bucketNode,
(int)tag.rnode.opt, tag.forkNum, tag.blockNum, redo_status)));
(errmsg("[On-demand] Request primary node redo page timeout, spc/db/rel/bucket "
"fork-block: %u/%u/%u/%d %d-%u", tag.rnode.spcNode, tag.rnode.dbNode,
tag.rnode.relNode, tag.rnode.bucketNode, tag.forkNum, tag.blockNum)));
return false;
}
ereport(DEBUG1,
(errmodule(MOD_DMS),
errmsg("[On-demand] end request primary node redo page, spc/db/rel/bucket fork-block: %u/%u/%u/%d %d-%u, "
"redo status %d", tag.rnode.spcNode, tag.rnode.dbNode, tag.rnode.relNode, tag.rnode.bucketNode,
tag.forkNum, tag.blockNum, redo_status)));
if (redo_status != ONDEMAND_REDO_DONE) {
if (redo_status == ONDEMAND_REDO_DONE) {
ereport(DEBUG1,
(errmsg("[On-demand] Request primary node redo page done, spc/db/rel/bucket "
"fork-block: %u/%u/%u/%d %d-%u", tag.rnode.spcNode, tag.rnode.dbNode,
tag.rnode.relNode, tag.rnode.bucketNode, tag.forkNum, tag.blockNum)));
} else if (redo_status == ONDEMAND_REDO_SKIP) {
ereport(DEBUG1,
(errmsg("[On-demand] Primary node is not in ondemand recovery now and "
"ignore this redo request, so refresh reform control file")));
SSReadControlFile(REFORM_CTRL_PAGE);
} else if (redo_status == ONDEMAND_REDO_ERROR) {
ereport(PANIC,
(errmsg("[On-demand] Error happend in request primary node redo page, read buffer crash, "
"spc/db/rel/bucket fork-block: %u/%u/%u/%d %d-%u", tag.rnode.spcNode, tag.rnode.dbNode,
tag.rnode.relNode, tag.rnode.bucketNode, tag.forkNum, tag.blockNum)));
return false;
} else if (redo_status == ONDEMAND_REDO_FAIL) {
ereport(WARNING,
(errmsg("[On-demand] Error happend in request primary node redo page, buffer is invalid, "
"spc/db/rel/bucket fork-block: %u/%u/%u/%d %d-%u", tag.rnode.spcNode, tag.rnode.dbNode,
tag.rnode.relNode, tag.rnode.bucketNode, tag.forkNum, tag.blockNum)));
return false;
}
return true;
}

View File

@ -2129,40 +2129,43 @@ int CBOndemandRedoPageForStandby(void *block_key, int32 *redo_status)
Assert(SS_PRIMARY_MODE);
// do nothing if not in ondemand recovery
if (!SS_IN_ONDEMAND_RECOVERY) {
ereport(DEBUG1, (errmsg("[On-demand] ignore redo page request, spc/db/rel/bucket "
ereport(DEBUG1, (errmsg("[On-demand] Ignore standby redo page request, spc/db/rel/bucket "
"fork-block: %u/%u/%u/%d %d-%u", tag->rnode.spcNode, tag->rnode.dbNode,
tag->rnode.relNode, tag->rnode.bucketNode, tag->forkNum, tag->blockNum)));
*redo_status = ONDEMAND_REDO_SKIP;
return GS_SUCCESS;;
}
Buffer buffer;
Buffer buffer = InvalidBuffer;
uint32 saveInterruptHoldoffCount = t_thrd.int_cxt.InterruptHoldoffCount;
*redo_status = ONDEMAND_REDO_DONE;
smgrcloseall();
PG_TRY();
{
buffer = SSReadBuffer(tag, RBM_NORMAL);
ReleaseBuffer(buffer);
if (BufferIsInvalid(buffer)) {
*redo_status = ONDEMAND_REDO_FAIL;
} else {
ReleaseBuffer(buffer);
}
}
PG_CATCH();
{
t_thrd.int_cxt.InterruptHoldoffCount = saveInterruptHoldoffCount;
/* Save error info */
ErrorData* edata = CopyErrorData();
ereport(WARNING,
(errmsg("[On-demand] Error happend when primary redo page for standby, spc/db/rel/bucket "
"fork-block: %u/%u/%u/%d %d-%u", tag->rnode.spcNode, tag->rnode.dbNode,
tag->rnode.relNode, tag->rnode.bucketNode, tag->forkNum, tag->blockNum),
errdetail("%s", edata->detail)));
FlushErrorState();
FreeErrorData(edata);
ereport(PANIC, (errmsg("[On-demand] Error happend when primary redo page for standby, spc/db/rel/bucket "
"fork-block: %u/%u/%u/%d %d-%u", tag->rnode.spcNode, tag->rnode.dbNode, tag->rnode.relNode,
tag->rnode.bucketNode, tag->forkNum, tag->blockNum)));
*redo_status = ONDEMAND_REDO_ERROR;
}
PG_END_TRY();
if (BufferIsInvalid(buffer)) {
*redo_status = ONDEMAND_REDO_FAIL;
}
ereport(DEBUG1, (errmsg("[On-demand] redo page for standby done, spc/db/rel/bucket fork-block: %u/%u/%u/%d %d-%u, "
ereport(DEBUG1, (errmsg("[On-demand] Redo page for standby done, spc/db/rel/bucket fork-block: %u/%u/%u/%d %d-%u, "
"redo status: %d", tag->rnode.spcNode, tag->rnode.dbNode, tag->rnode.relNode,
tag->rnode.bucketNode, tag->forkNum, tag->blockNum, *redo_status)));
return GS_SUCCESS;;

View File

@ -195,6 +195,7 @@ typedef enum SSOndemandRequestRedoStatus {
ONDEMAND_REDO_DONE = 0,
ONDEMAND_REDO_SKIP,
ONDEMAND_REDO_FAIL,
ONDEMAND_REDO_ERROR,
ONDEMAND_REDO_TIMEOUT
} SSOndemandRequestRedoStatus;