hi.
I am confused with bt_recheck_sibling_links.
>
> ereport(ERROR,
> (errcode(ERRCODE_INDEX_CORRUPTED),
> errmsg("left link/right link pair in index \"%s\" not in agreement",
> RelationGetRelationName(state->rel)),
> errdetail_internal("Block=%u left block=%u left link from block=%u.",
> state->targetblock, leftcurrent,
> btpo_prev_from_target)));
should we put the above code into the branch {if (!state->readonly)} ?
I can understand it if put inside.
now the whole function be like:
if (!state->readonly)
{}
erreport{}.
---------------------------------------------------------------------------------
if (btpo_prev_from_target == leftcurrent)
{
/* Report split in left sibling, not target (or new target) */
ereport(DEBUG1,
(errcode(ERRCODE_INTERNAL_ERROR),
errmsg_internal("harmless concurrent page split detected in index \"%s\"",
RelationGetRelationName(state->rel)),
errdetail_internal("Block=%u new right sibling=%u original right sibling=%u.",
leftcurrent, newtargetblock,
state->targetblock)));
return;
}
only concurrency read case, (btpo_prev_from_target == leftcurrent)
will be true? If so, then I am confused with the ereport content.