#1790·perkeep

pkg/schema: optimize parsing of superset

Author: bradfitzCreated Jan 1, 2026Updated Jan 1, 2026
Labelsoptimization

This unmarshaling allocates new strings when JSON parsing, rather than using common interned string values for CamliType, ClaimType, etc.

go
func parseSuperset(r io.Reader) (*superset, error) {
	buf := pools.BytesBuffer()
	defer pools.PutBuffer(buf)

	n, err := io.CopyN(buf, r, MaxSchemaBlobSize+1)
	if err != nil && err != io.EOF {
		return nil, err
	}
	if n > MaxSchemaBlobSize {
		return nil, errSchemaBlobTooLarge
	}

	ss := new(superset)
	if err := json.Unmarshal(buf.Bytes(), ss); err != nil {
		return nil, err
	}
	return ss, nil
}

If we used json/v2, we could hook into the []byte decoding at various levels and re-use common string values to allocate less garbage. (useful during reindexes)