mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	Code review for multixact bugfix
Reword messages, rename a confusingly named function. Per Robert Haas.
This commit is contained in:
		@@ -345,7 +345,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);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1079,12 +1079,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,
 | 
				
			||||||
@@ -1094,7 +1094,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);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -2506,7 +2506,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;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -2562,20 +2562,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;
 | 
				
			||||||
@@ -2728,7 +2724,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
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user