xiangfu0 opened a new pull request, #19475:
URL: https://github.com/apache/pinot/pull/19475

   ## What
   
   Every segment of a table parses its own `FieldSpec` per column, and after 
part 2 those specs are value-identical across segments. `ColumnMetadataImpl` 
now interns them through a weak interner keyed by 
`FieldSpec.equals`/`hashCode`, so all segments of a table share one instance 
per distinct column definition and schema evolution still yields a distinct 
instance per version. They are held weakly, so unloading the last segment 
releases them.
   
   `ComplexFieldSpec` parents are not interned (no value equality); their 
children are.
   
   Segment-derived specs must therefore be treated as immutable, which is 
documented on `ColumnMetadata#getFieldSpec()` and 
`SegmentMetadata#getSchema()`. An audit of all main sources found no caller 
that mutates one: the virtual-column provider mutates only specs it builds 
itself.
   
   ## Tests
   
   `ColumnMetadataImplTest`: equal configurations parsed twice share one 
instance; differing default value, max length, data type, single-value or 
format do not alias; COMPLEX parents are not interned while children are; an 
unreferenced spec is released after GC.
   ## Why
   
   A server keeps one metadata object graph per (segment, column) for as long 
as the segment is loaded, so on wide tables the per-column footprint decides 
how many segments a server can hold. Measured end to end on a 1000-column 
segment, this series takes the heap retained at load from **4.08 MB to 0.175 MB 
per segment** (4,080 to 174 bytes per column), with a fully compacting 
collector on both sides. No on-disk format change, the 
`/tables/{table}/segments/{segment}/metadata` JSON stays byte-identical, and 
every public and SPI signature keeps working.
   
   ## Stack
   
   Part 5 of 9, based on `xiangfu0/data-3221-3-datasource-adapter`. Review only 
this part's own commits; the rest of the diff belongs to the parts below it.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to