Re: Align memory context level numbering in pg_log_backend_memory_contexts() - Mailing list pgsql-hackers

From torikoshia
Subject Re: Align memory context level numbering in pg_log_backend_memory_contexts()
Date
Msg-id ae5664776e05b64b23e6096b7aeea22c@oss.nttdata.com
Whole thread Raw
In response to Re: Align memory context level numbering in pg_log_backend_memory_contexts()  (David Rowley <dgrowleyml@gmail.com>)
Responses Re: Align memory context level numbering in pg_log_backend_memory_contexts()
List pgsql-hackers
On 2025-04-17 07:31, David Rowley wrote:
> On Thu, 17 Apr 2025 at 02:20, torikoshia <torikoshia@oss.nttdata.com> 
> wrote:
>> Regarding the implementation:
>> In the initial patch attached, I naïvely incremented the level just
>> before emitting the log line.
>> However, it might be cleaner to simply initialize the level variable 
>> to
>> 1 from the start. This could help avoid unnecessary confusion when
>> debugging that part of the code.
> 
> I didn't look at your patch before, but have now and agree that's not
> the best way.
> 
>> Similarly, I noticed that in pg_get_process_memory_contexts(), the 
>> level
>> is initialized to 0 in ProcessGetMemoryContextInterrupt(void):
>> 
>>      int level = 0;
>>      ..
>>      MemoryContextStatsInternal(c, level, 100, 100, &grand_totals, ..
>> 
>> If we want to be consistent, perhaps it would make sense to start from 
>> 1
>> there as well.
> 
> Yes.
> 
>> BTW level variable has existed since before pg_backend_memory_contexts
>> was introduced — it was originally used for functions that help 
>> inspect
>> memory contexts via the debugger. Because of that, I think changing 
>> this
>> would affect not only these functions codes but some older ones.
> 
> I get the impression that it wasn't well thought through prior to
> this. If you asked for max_level of 10 it would stop at 9. Changing
> these to 1-based levels means we'll now stop at level 10 without
> printing any more levels than we did before.
> 
> The attached patch is how I think we should do it.

Thanks for writing the patch!

I noticed that, although it's a minor detail, applying the patch changes 
the indentation of the output when printing MemoryContextStats() from 
the debugger. For example:

With the patch:

   TopMemoryContext: 99488 total in 5 blocks; 7800 free (12 chunks); 
91688 used
     RowDescriptionContext: 8192 total in 1 blocks; 6912 free (0 chunks); 
1280 used
     MessageContext: 8192 total in 1 blocks; 6912 free (3 chunks); 1280 
used
     Operator class cache: 8192 total in 1 blocks; 576 free (0 chunks); 
7616 used
   105 more child contexts containing 1615984 total in 212 blocks; 614936 
free (204 chunks); 1001048 used
Grand total: 1740048 bytes in 220 blocks; 637136 free (219 chunks); 
1102912 used


original:

TopMemoryContext: 99488 total in 5 blocks; 7368 free (9 chunks); 92120 
used
   RowDescriptionContext: 8192 total in 1 blocks; 6912 free (0 chunks); 
1280 used
   MessageContext: 8192 total in 1 blocks; 6912 free (3 chunks); 1280 
used
   Operator class cache: 8192 total in 1 blocks; 576 free (0 chunks); 
7616 used
   105 more child contexts containing 1092136 total in 211 blocks; 303016 
free (226 chunks); 789120 used
Grand total: 1216200 bytes in 219 blocks; 324784 free (238 chunks); 
891416 use

I guess few people would notice this difference, but I think it's better 
to avoid changing it unless there's a good reason to do so.
Personally, I also feel the original formatting better -- especially 
because the "xx more child contexts..." line is aligned with the other 
child contexts at the same level.

Attached a v2 patch to restore the original indentation.
What do you think?


-- 
Regards,

--
Atsushi Torikoshi
Seconded from NTT DATA GROUP CORPORATION to SRA OSS K.K.
Attachment

pgsql-hackers by date:

Previous
From: Peter Smith
Date:
Subject: Re: Logical Replication of sequences
Next
From: Yura Sokolov
Date:
Subject: Re: Built-in Raft replication