fallintoplace opened a new pull request, #1932: URL: https://github.com/apache/iceberg-go/pull/1932
## What changed - Added a small internal fast path for Iceberg's built-in metadata types. - The builder now copies schemas, partition specs, snapshots, sort orders, properties, refs, statistics, partition statistics, and encryption keys directly from the internal representation. - Custom `Metadata` implementations keep the existing getter path. - Added ownership tests for nested mutable values. - Added a benchmark for different metadata collection sizes. ## Why The built-in metadata getters already clone their values. `MetadataBuilderFromBase` then cloned those results again. This removes that extra copy while keeping the builder's collections independent from the base metadata. ## Benchmark Apple M1 Pro. Before is `upstream/main`. After is this branch. Values are the median of the runs. | snapshots | before ns/op | after ns/op | before B/op | after B/op | before allocs/op | after allocs/op | | --- | ---: | ---: | ---: | ---: | ---: | ---: | | 1,000 | 85,891 | 54,680 | 305,097 | 162,704 | 86 | 37 | | 10,000 | 754,786 | 471,937 | 3,066,366 | 1,502,658 | 121 | 65 | Command: ```text go test ./table -run ^ -bench ^BenchmarkMetadataBuilderFromBase -benchmem -count=5 ``` The new `BenchmarkMetadataBuilderFromBaseCollections` also covers 1, 16, 128, and 1,024 schemas; 1, 16, and 128 partition specs; 1,000 snapshots; 32 sort orders; and properties. ## Checks - `go test ./...` - `go vet ./table` -- 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]
