xiangfu0 opened a new pull request, #19481: URL: https://github.com/apache/pinot/pull/19481
## What `SegmentMetadataImpl` kept its columns in a `TreeMap`, about 40 bytes of red-black-tree node per column. They now live in sorted parallel arrays with binary-search lookup, published as one immutable holder behind a single volatile reference so a reader can never pair new names with old metadata, and replaced copy-on-write. `getColumnMetadataMap()` still works: the map view is derived on demand and cached, and the load and query paths use the array accessors instead, so a normal segment load never materializes it. A test-visible counter plus a loader assertion keep it that way. Additive accessors were added for the callers that only need a count, a lookup or an iteration, and virtual columns are added through an explicit `addColumnMetadata` rather than by mutating the returned map. Column order, `getAllColumns()`, `getPhysicalColumnNames()` and `toJson` are unchanged. ## Tests `SegmentMetadataImplTest`: the derived map equals the previous one and stays unbuilt after `ImmutableSegmentLoader.load`; adding and removing columns keeps the arrays sorted and consistent; consuming segments behave consistently across all accessors. New `SortedStringArraySetTest` covers the sorted-set view including range bounds. -- 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]
