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]
