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

   ## Change
   
   Move metadata column names and custom default-value literals out of the JVM 
string pool into separate weak interners. This addresses both follow-up 
comments on #19473:
   
   - [Column-name 
utility](https://github.com/apache/pinot/pull/19473#discussion_r4031856726): 
use `ColumnNameInterner` consistently for physical column keys, FieldSpec 
names, parent/child names and the time-column name.
   - [Default-value 
interner](https://github.com/apache/pinot/pull/19473#discussion_r4031892015): 
use a separate weak string interner for custom default literals, including the 
fallback for types without a built-in default.
   
   Both interners are thread-safe and allow unused values to be reclaimed. 
Existing type-default canonicalization, FieldSpec interning and datetime 
format/granularity handling remain unchanged. This targets master and is 
independent of #19571's table-schema reuse.
   
   ## Validation
   
   106 focused tests passed: ColumnMetadataImplTest (32), 
SegmentMetadataImplTest (6), FieldSpecTest and SchemaTest (68 combined). 
Existing tests now check sharing across parses instead of identity with Java 
literals; two additional cases check separate pools and concurrent parsing of 
distinct FieldSpecs. Spotless, Checkstyle, license checks and focused strict 
compilation pass.
   
   ## Measurements
   
   Candidate `8b12bd36cc22e9fe5d7cbdb649906245ad161e68` versus master 
`3764aea534e9b2cc0dffe0ecd0c50f31d5d35b7e`:
   
   | Measurement | Master | This PR |
   |---|---:|---:|
   | Metadata parse, 1 worker(s) | 1.226 ± 0.085 ms/op | 1.220 ± 0.035 ms/op |
   | Metadata parse, 8 worker(s) | 1.274 ± 0.026 ms/op | 1.245 ± 0.020 ms/op |
   | Live heap, 500 metadata graphs | 7.463 MiB | 7.459 MiB |
   
   No clear parsing-time or live-heap change in this fixture. Timing is JMH 
mean ± reported 99.9% error: 3 forks, 2 × 1s warmups, 4 × 1s measurements, GC 
profiler. Heap is the median of 3 fresh-JVM full-GC histogram deltas above a 
warmed empty baseline. Each graph has 64 alternating INT/STRING columns; INT 
columns use type defaults and STRING columns share four custom default 
literals. Both paths deserialize identical metadata bytes using 
SegmentMetadataImpl's stream constructor. Releasing the graphs returns within 8 
KiB of the warmed baseline in all samples.
   
   OpenJDK 25.0.4, Apple M4 Pro, 14 CPUs, 24 GiB RAM, 2 GiB JVM heap. Baseline 
uses the exact two metadata source files from master, compiled over identical 
dependencies. These measurements exclude indexes, disk/network I/O, query 
traffic and the JVM string table's native memory. They are a regression check, 
not a server-startup or query-performance claim. Benchmark sources and raw 
artifacts are outside the PR.
   


-- 
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