Commit d3821e70 authored by Alvaro Herrera's avatar Alvaro Herrera

Code review for multixact bugfix

Reword messages, rename a confusingly named function.

Per Robert Haas.
parent cbf9f0ec
...@@ -347,7 +347,7 @@ static void ExtendMultiXactMember(MultiXactOffset offset, int nmembers); ...@@ -347,7 +347,7 @@ static void ExtendMultiXactMember(MultiXactOffset offset, int nmembers);
static void DetermineSafeOldestOffset(MultiXactId oldestMXact); static void DetermineSafeOldestOffset(MultiXactId oldestMXact);
static bool MultiXactOffsetWouldWrap(MultiXactOffset boundary, static bool MultiXactOffsetWouldWrap(MultiXactOffset boundary,
MultiXactOffset start, uint32 distance); MultiXactOffset start, uint32 distance);
static MultiXactOffset read_offset_for_multi(MultiXactId multi); static MultiXactOffset find_multixact_start(MultiXactId multi);
static void WriteMZeroPageXlogRec(int pageno, uint8 info); static void WriteMZeroPageXlogRec(int pageno, uint8 info);
...@@ -1074,12 +1074,12 @@ GetNewMultiXactId(int nmembers, MultiXactOffset *offset) ...@@ -1074,12 +1074,12 @@ GetNewMultiXactId(int nmembers, MultiXactOffset *offset)
ereport(ERROR, ereport(ERROR,
(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
errmsg("multixact \"members\" limit exceeded"), errmsg("multixact \"members\" limit exceeded"),
errdetail_plural("This command would create a multixact with %u members, which exceeds remaining space (%u member.)", errdetail_plural("This command would create a multixact with %u members, but the remaining space is only enough for %u member.",
"This command would create a multixact with %u members, which exceeds remaining space (%u members.)", "This command would create a multixact with %u members, but the remaining space is only enough for %u members.",
MultiXactState->offsetStopLimit - nextOffset - 1, MultiXactState->offsetStopLimit - nextOffset - 1,
nmembers, nmembers,
MultiXactState->offsetStopLimit - nextOffset - 1), MultiXactState->offsetStopLimit - nextOffset - 1),
errhint("Execute a database-wide VACUUM in database with OID %u, with reduced vacuum_multixact_freeze_min_age and vacuum_multixact_freeze_table_age settings.", errhint("Execute a database-wide VACUUM in database with OID %u with reduced vacuum_multixact_freeze_min_age and vacuum_multixact_freeze_table_age settings.",
MultiXactState->oldestMultiXactDB))); MultiXactState->oldestMultiXactDB)));
else if (MultiXactOffsetWouldWrap(MultiXactState->offsetStopLimit, else if (MultiXactOffsetWouldWrap(MultiXactState->offsetStopLimit,
nextOffset, nextOffset,
...@@ -1089,7 +1089,7 @@ GetNewMultiXactId(int nmembers, MultiXactOffset *offset) ...@@ -1089,7 +1089,7 @@ GetNewMultiXactId(int nmembers, MultiXactOffset *offset)
errmsg("database with OID %u must be vacuumed before %d more multixact members are used", errmsg("database with OID %u must be vacuumed before %d more multixact members are used",
MultiXactState->oldestMultiXactDB, MultiXactState->oldestMultiXactDB,
MultiXactState->offsetStopLimit - nextOffset + nmembers), MultiXactState->offsetStopLimit - nextOffset + nmembers),
errhint("Execute a database-wide VACUUM in that database, with reduced vacuum_multixact_freeze_min_age and vacuum_multixact_freeze_table_age settings."))); errhint("Execute a database-wide VACUUM in that database with reduced vacuum_multixact_freeze_min_age and vacuum_multixact_freeze_table_age settings.")));
ExtendMultiXactMember(nextOffset, nmembers); ExtendMultiXactMember(nextOffset, nmembers);
...@@ -2487,7 +2487,7 @@ DetermineSafeOldestOffset(MultiXactId oldestMXact) ...@@ -2487,7 +2487,7 @@ DetermineSafeOldestOffset(MultiXactId oldestMXact)
* one-segment hole at a minimum. We start spewing warnings a few * one-segment hole at a minimum. We start spewing warnings a few
* complete segments before that. * complete segments before that.
*/ */
oldestOffset = read_offset_for_multi(oldestMXact); oldestOffset = find_multixact_start(oldestMXact);
/* move back to start of the corresponding segment */ /* move back to start of the corresponding segment */
oldestOffset -= oldestOffset / MULTIXACT_MEMBERS_PER_PAGE * SLRU_PAGES_PER_SEGMENT; oldestOffset -= oldestOffset / MULTIXACT_MEMBERS_PER_PAGE * SLRU_PAGES_PER_SEGMENT;
...@@ -2543,20 +2543,16 @@ MultiXactOffsetWouldWrap(MultiXactOffset boundary, MultiXactOffset start, ...@@ -2543,20 +2543,16 @@ MultiXactOffsetWouldWrap(MultiXactOffset boundary, MultiXactOffset start,
*----------------------------------------------------------------------- *-----------------------------------------------------------------------
*/ */
if (start < boundary) if (start < boundary)
{
return finish >= boundary || finish < start; return finish >= boundary || finish < start;
}
else else
{
return finish >= boundary && finish < start; return finish >= boundary && finish < start;
}
} }
/* /*
* Read the offset of the first member of the given multixact. * Find the starting offset of the given MultiXactId.
*/ */
static MultiXactOffset static MultiXactOffset
read_offset_for_multi(MultiXactId multi) find_multixact_start(MultiXactId multi)
{ {
MultiXactOffset offset; MultiXactOffset offset;
int pageno; int pageno;
...@@ -2709,7 +2705,7 @@ TruncateMultiXact(void) ...@@ -2709,7 +2705,7 @@ TruncateMultiXact(void)
* First, compute the safe truncation point for MultiXactMember. This is * First, compute the safe truncation point for MultiXactMember. This is
* the starting offset of the oldest multixact. * the starting offset of the oldest multixact.
*/ */
oldestOffset = read_offset_for_multi(oldestMXact); oldestOffset = find_multixact_start(oldestMXact);
/* /*
* To truncate MultiXactMembers, we need to figure out the active page * To truncate MultiXactMembers, we need to figure out the active page
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment