mirror of
https://github.com/postgres/postgres.git
synced 2025-07-27 12:41:57 +03:00
Standardize LSN formatting by zero padding
This commit standardizes the output format for LSNs to ensure consistent representation across various tools and messages. Previously, LSNs were inconsistently printed as `%X/%X` in some contexts, while others used zero-padding. This often led to confusion when comparing. To address this, the LSN format is now uniformly set to `%X/%08X`, ensuring the lower 32-bit part is always zero-padded to eight hexadecimal digits. Author: Japin Li <japinli@hotmail.com> Reviewed-by: Masahiko Sawada <sawada.mshk@gmail.com> Reviewed-by: Álvaro Herrera <alvherre@kurilemu.de> Discussion: https://postgr.es/m/ME0P300MB0445CA53CA0E4B8C1879AF84B641A@ME0P300MB0445.AUSP300.PROD.OUTLOOK.COM
This commit is contained in:
@ -913,7 +913,7 @@ bt_report_duplicate(BtreeCheckState *state,
|
||||
(errcode(ERRCODE_INDEX_CORRUPTED),
|
||||
errmsg("index uniqueness is violated for index \"%s\"",
|
||||
RelationGetRelationName(state->rel)),
|
||||
errdetail("Index %s%s and%s%s (point to heap %s and %s) page lsn=%X/%X.",
|
||||
errdetail("Index %s%s and%s%s (point to heap %s and %s) page lsn=%X/%08X.",
|
||||
itid, pposting, nitid, pnposting, htid, nhtid,
|
||||
LSN_FORMAT_ARGS(state->targetlsn))));
|
||||
}
|
||||
@ -1058,7 +1058,7 @@ bt_leftmost_ignoring_half_dead(BtreeCheckState *state,
|
||||
(errcode(ERRCODE_NO_DATA),
|
||||
errmsg_internal("harmless interrupted page deletion detected in index \"%s\"",
|
||||
RelationGetRelationName(state->rel)),
|
||||
errdetail_internal("Block=%u right block=%u page lsn=%X/%X.",
|
||||
errdetail_internal("Block=%u right block=%u page lsn=%X/%08X.",
|
||||
reached, reached_from,
|
||||
LSN_FORMAT_ARGS(pagelsn))));
|
||||
|
||||
@ -1283,7 +1283,7 @@ bt_target_page_check(BtreeCheckState *state)
|
||||
(errcode(ERRCODE_INDEX_CORRUPTED),
|
||||
errmsg("wrong number of high key index tuple attributes in index \"%s\"",
|
||||
RelationGetRelationName(state->rel)),
|
||||
errdetail_internal("Index block=%u natts=%u block type=%s page lsn=%X/%X.",
|
||||
errdetail_internal("Index block=%u natts=%u block type=%s page lsn=%X/%08X.",
|
||||
state->targetblock,
|
||||
BTreeTupleGetNAtts(itup, state->rel),
|
||||
P_ISLEAF(topaque) ? "heap" : "index",
|
||||
@ -1332,7 +1332,7 @@ bt_target_page_check(BtreeCheckState *state)
|
||||
(errcode(ERRCODE_INDEX_CORRUPTED),
|
||||
errmsg("index tuple size does not equal lp_len in index \"%s\"",
|
||||
RelationGetRelationName(state->rel)),
|
||||
errdetail_internal("Index tid=(%u,%u) tuple size=%zu lp_len=%u page lsn=%X/%X.",
|
||||
errdetail_internal("Index tid=(%u,%u) tuple size=%zu lp_len=%u page lsn=%X/%08X.",
|
||||
state->targetblock, offset,
|
||||
tupsize, ItemIdGetLength(itemid),
|
||||
LSN_FORMAT_ARGS(state->targetlsn)),
|
||||
@ -1356,7 +1356,7 @@ bt_target_page_check(BtreeCheckState *state)
|
||||
(errcode(ERRCODE_INDEX_CORRUPTED),
|
||||
errmsg("wrong number of index tuple attributes in index \"%s\"",
|
||||
RelationGetRelationName(state->rel)),
|
||||
errdetail_internal("Index tid=%s natts=%u points to %s tid=%s page lsn=%X/%X.",
|
||||
errdetail_internal("Index tid=%s natts=%u points to %s tid=%s page lsn=%X/%08X.",
|
||||
itid,
|
||||
BTreeTupleGetNAtts(itup, state->rel),
|
||||
P_ISLEAF(topaque) ? "heap" : "index",
|
||||
@ -1406,7 +1406,7 @@ bt_target_page_check(BtreeCheckState *state)
|
||||
(errcode(ERRCODE_INDEX_CORRUPTED),
|
||||
errmsg("could not find tuple using search from root page in index \"%s\"",
|
||||
RelationGetRelationName(state->rel)),
|
||||
errdetail_internal("Index tid=%s points to heap tid=%s page lsn=%X/%X.",
|
||||
errdetail_internal("Index tid=%s points to heap tid=%s page lsn=%X/%08X.",
|
||||
itid, htid,
|
||||
LSN_FORMAT_ARGS(state->targetlsn))));
|
||||
}
|
||||
@ -1435,7 +1435,7 @@ bt_target_page_check(BtreeCheckState *state)
|
||||
(errcode(ERRCODE_INDEX_CORRUPTED),
|
||||
errmsg_internal("posting list contains misplaced TID in index \"%s\"",
|
||||
RelationGetRelationName(state->rel)),
|
||||
errdetail_internal("Index tid=%s posting list offset=%d page lsn=%X/%X.",
|
||||
errdetail_internal("Index tid=%s posting list offset=%d page lsn=%X/%08X.",
|
||||
itid, i,
|
||||
LSN_FORMAT_ARGS(state->targetlsn))));
|
||||
}
|
||||
@ -1488,7 +1488,7 @@ bt_target_page_check(BtreeCheckState *state)
|
||||
(errcode(ERRCODE_INDEX_CORRUPTED),
|
||||
errmsg("index row size %zu exceeds maximum for index \"%s\"",
|
||||
tupsize, RelationGetRelationName(state->rel)),
|
||||
errdetail_internal("Index tid=%s points to %s tid=%s page lsn=%X/%X.",
|
||||
errdetail_internal("Index tid=%s points to %s tid=%s page lsn=%X/%08X.",
|
||||
itid,
|
||||
P_ISLEAF(topaque) ? "heap" : "index",
|
||||
htid,
|
||||
@ -1595,7 +1595,7 @@ bt_target_page_check(BtreeCheckState *state)
|
||||
(errcode(ERRCODE_INDEX_CORRUPTED),
|
||||
errmsg("high key invariant violated for index \"%s\"",
|
||||
RelationGetRelationName(state->rel)),
|
||||
errdetail_internal("Index tid=%s points to %s tid=%s page lsn=%X/%X.",
|
||||
errdetail_internal("Index tid=%s points to %s tid=%s page lsn=%X/%08X.",
|
||||
itid,
|
||||
P_ISLEAF(topaque) ? "heap" : "index",
|
||||
htid,
|
||||
@ -1641,9 +1641,7 @@ bt_target_page_check(BtreeCheckState *state)
|
||||
(errcode(ERRCODE_INDEX_CORRUPTED),
|
||||
errmsg("item order invariant violated for index \"%s\"",
|
||||
RelationGetRelationName(state->rel)),
|
||||
errdetail_internal("Lower index tid=%s (points to %s tid=%s) "
|
||||
"higher index tid=%s (points to %s tid=%s) "
|
||||
"page lsn=%X/%X.",
|
||||
errdetail_internal("Lower index tid=%s (points to %s tid=%s) higher index tid=%s (points to %s tid=%s) page lsn=%X/%08X.",
|
||||
itid,
|
||||
P_ISLEAF(topaque) ? "heap" : "index",
|
||||
htid,
|
||||
@ -1760,7 +1758,7 @@ bt_target_page_check(BtreeCheckState *state)
|
||||
(errcode(ERRCODE_INDEX_CORRUPTED),
|
||||
errmsg("cross page item order invariant violated for index \"%s\"",
|
||||
RelationGetRelationName(state->rel)),
|
||||
errdetail_internal("Last item on page tid=(%u,%u) page lsn=%X/%X.",
|
||||
errdetail_internal("Last item on page tid=(%u,%u) page lsn=%X/%08X.",
|
||||
state->targetblock, offset,
|
||||
LSN_FORMAT_ARGS(state->targetlsn))));
|
||||
}
|
||||
@ -1813,7 +1811,7 @@ bt_target_page_check(BtreeCheckState *state)
|
||||
(errcode(ERRCODE_INDEX_CORRUPTED),
|
||||
errmsg("right block of leaf block is non-leaf for index \"%s\"",
|
||||
RelationGetRelationName(state->rel)),
|
||||
errdetail_internal("Block=%u page lsn=%X/%X.",
|
||||
errdetail_internal("Block=%u page lsn=%X/%08X.",
|
||||
state->targetblock,
|
||||
LSN_FORMAT_ARGS(state->targetlsn))));
|
||||
|
||||
@ -2237,7 +2235,7 @@ bt_child_highkey_check(BtreeCheckState *state,
|
||||
(errcode(ERRCODE_INDEX_CORRUPTED),
|
||||
errmsg("the first child of leftmost target page is not leftmost of its level in index \"%s\"",
|
||||
RelationGetRelationName(state->rel)),
|
||||
errdetail_internal("Target block=%u child block=%u target page lsn=%X/%X.",
|
||||
errdetail_internal("Target block=%u child block=%u target page lsn=%X/%08X.",
|
||||
state->targetblock, blkno,
|
||||
LSN_FORMAT_ARGS(state->targetlsn))));
|
||||
|
||||
@ -2323,7 +2321,7 @@ bt_child_highkey_check(BtreeCheckState *state,
|
||||
(errcode(ERRCODE_INDEX_CORRUPTED),
|
||||
errmsg("child high key is greater than rightmost pivot key on target level in index \"%s\"",
|
||||
RelationGetRelationName(state->rel)),
|
||||
errdetail_internal("Target block=%u child block=%u target page lsn=%X/%X.",
|
||||
errdetail_internal("Target block=%u child block=%u target page lsn=%X/%08X.",
|
||||
state->targetblock, blkno,
|
||||
LSN_FORMAT_ARGS(state->targetlsn))));
|
||||
pivotkey_offset = P_HIKEY;
|
||||
@ -2353,7 +2351,7 @@ bt_child_highkey_check(BtreeCheckState *state,
|
||||
(errcode(ERRCODE_INDEX_CORRUPTED),
|
||||
errmsg("can't find left sibling high key in index \"%s\"",
|
||||
RelationGetRelationName(state->rel)),
|
||||
errdetail_internal("Target block=%u child block=%u target page lsn=%X/%X.",
|
||||
errdetail_internal("Target block=%u child block=%u target page lsn=%X/%08X.",
|
||||
state->targetblock, blkno,
|
||||
LSN_FORMAT_ARGS(state->targetlsn))));
|
||||
itup = state->lowkey;
|
||||
@ -2365,7 +2363,7 @@ bt_child_highkey_check(BtreeCheckState *state,
|
||||
(errcode(ERRCODE_INDEX_CORRUPTED),
|
||||
errmsg("mismatch between parent key and child high key in index \"%s\"",
|
||||
RelationGetRelationName(state->rel)),
|
||||
errdetail_internal("Target block=%u child block=%u target page lsn=%X/%X.",
|
||||
errdetail_internal("Target block=%u child block=%u target page lsn=%X/%08X.",
|
||||
state->targetblock, blkno,
|
||||
LSN_FORMAT_ARGS(state->targetlsn))));
|
||||
}
|
||||
@ -2505,7 +2503,7 @@ bt_child_check(BtreeCheckState *state, BTScanInsert targetkey,
|
||||
(errcode(ERRCODE_INDEX_CORRUPTED),
|
||||
errmsg("downlink to deleted page found in index \"%s\"",
|
||||
RelationGetRelationName(state->rel)),
|
||||
errdetail_internal("Parent block=%u child block=%u parent page lsn=%X/%X.",
|
||||
errdetail_internal("Parent block=%u child block=%u parent page lsn=%X/%08X.",
|
||||
state->targetblock, childblock,
|
||||
LSN_FORMAT_ARGS(state->targetlsn))));
|
||||
|
||||
@ -2546,7 +2544,7 @@ bt_child_check(BtreeCheckState *state, BTScanInsert targetkey,
|
||||
(errcode(ERRCODE_INDEX_CORRUPTED),
|
||||
errmsg("down-link lower bound invariant violated for index \"%s\"",
|
||||
RelationGetRelationName(state->rel)),
|
||||
errdetail_internal("Parent block=%u child index tid=(%u,%u) parent page lsn=%X/%X.",
|
||||
errdetail_internal("Parent block=%u child index tid=(%u,%u) parent page lsn=%X/%08X.",
|
||||
state->targetblock, childblock, offset,
|
||||
LSN_FORMAT_ARGS(state->targetlsn))));
|
||||
}
|
||||
@ -2616,7 +2614,7 @@ bt_downlink_missing_check(BtreeCheckState *state, bool rightsplit,
|
||||
(errcode(ERRCODE_NO_DATA),
|
||||
errmsg_internal("harmless interrupted page split detected in index \"%s\"",
|
||||
RelationGetRelationName(state->rel)),
|
||||
errdetail_internal("Block=%u level=%u left sibling=%u page lsn=%X/%X.",
|
||||
errdetail_internal("Block=%u level=%u left sibling=%u page lsn=%X/%08X.",
|
||||
blkno, opaque->btpo_level,
|
||||
opaque->btpo_prev,
|
||||
LSN_FORMAT_ARGS(pagelsn))));
|
||||
@ -2638,7 +2636,7 @@ bt_downlink_missing_check(BtreeCheckState *state, bool rightsplit,
|
||||
(errcode(ERRCODE_INDEX_CORRUPTED),
|
||||
errmsg("leaf index block lacks downlink in index \"%s\"",
|
||||
RelationGetRelationName(state->rel)),
|
||||
errdetail_internal("Block=%u page lsn=%X/%X.",
|
||||
errdetail_internal("Block=%u page lsn=%X/%08X.",
|
||||
blkno,
|
||||
LSN_FORMAT_ARGS(pagelsn))));
|
||||
|
||||
@ -2704,7 +2702,7 @@ bt_downlink_missing_check(BtreeCheckState *state, bool rightsplit,
|
||||
(errcode(ERRCODE_INDEX_CORRUPTED),
|
||||
errmsg_internal("downlink to deleted leaf page found in index \"%s\"",
|
||||
RelationGetRelationName(state->rel)),
|
||||
errdetail_internal("Top parent/target block=%u leaf block=%u top parent/under check lsn=%X/%X.",
|
||||
errdetail_internal("Top parent/target block=%u leaf block=%u top parent/under check lsn=%X/%08X.",
|
||||
blkno, childblk,
|
||||
LSN_FORMAT_ARGS(pagelsn))));
|
||||
|
||||
@ -2730,7 +2728,7 @@ bt_downlink_missing_check(BtreeCheckState *state, bool rightsplit,
|
||||
(errcode(ERRCODE_INDEX_CORRUPTED),
|
||||
errmsg("internal index block lacks downlink in index \"%s\"",
|
||||
RelationGetRelationName(state->rel)),
|
||||
errdetail_internal("Block=%u level=%u page lsn=%X/%X.",
|
||||
errdetail_internal("Block=%u level=%u page lsn=%X/%08X.",
|
||||
blkno, opaque->btpo_level,
|
||||
LSN_FORMAT_ARGS(pagelsn))));
|
||||
}
|
||||
|
Reference in New Issue
Block a user