func()

in processor/lsmintervalprocessor/internal/merger/value.go [158:198]


func (s *Value) Unmarshal(data []byte) error {
	if len(data) == 0 {
		return errors.New("failed to unmarshal value, invalid length")
	}
	if data[0] != version {
		return fmt.Errorf("unsupported version: %d", data[0])
	}
	data = data[1:]

	if len(data) == 0 {
		return nil
	}
	if len(data) < 4 {
		// For non-nil value, tracker must be marshaled
		return errors.New("failed to unmarshal value, invalid length")
	}
	trackersLen := int(binary.BigEndian.Uint32(data[:4]))
	data = data[4:]
	if trackersLen > 0 {
		// Unmarshal trackers
		s.trackers = limits.NewTrackers(
			uint64(s.resourceLimitCfg.MaxCardinality),
			uint64(s.scopeLimitCfg.MaxCardinality),
			uint64(s.metricLimitCfg.MaxCardinality),
			uint64(s.datapointLimitCfg.MaxCardinality),
		)
		err := s.trackers.Unmarshal(data[:trackersLen])
		if err != nil {
			return fmt.Errorf("failed to unmarshal limits: %w", err)
		}
		data = data[trackersLen:]
	}
	// Unmarshal pmetric.Metrics
	var unmarshaler pmetric.ProtoUnmarshaler
	var err error
	s.source, err = unmarshaler.UnmarshalMetrics(data)
	if err != nil {
		return fmt.Errorf("failed to unmarshal data: %w", err)
	}
	return nil
}