func()

in processor/lsmintervalprocessor/internal/merger/value.go [501:544]


func (s *Value) addScopeMetrics(
	resID identity.Resource,
	rm pdataResourceMetrics,
	otherSm pmetric.ScopeMetrics,
) (identity.Scope, pdataScopeMetrics, error) {
	scopeID := identity.OfScope(resID, otherSm.Scope())
	if sm, ok := s.scopeLookup[scopeID]; ok {
		return scopeID, sm, nil
	}
	if rm.scopeTracker.CheckOverflow(scopeID.Hash) {
		// Overflow, get/prepare an overflow bucket
		overflowScopeID, err := s.getOverflowScopeIdentity(resID)
		if err != nil {
			return identity.Scope{}, pdataScopeMetrics{}, err
		}
		if sm, ok := s.scopeLookup[overflowScopeID]; ok {
			return overflowScopeID, sm, nil
		}
		overflowScope := rm.ScopeMetrics().AppendEmpty()
		overflowScope.SetSchemaUrl(otherSm.SchemaUrl())
		if err := decorate(
			overflowScope.Scope().Attributes(),
			s.scopeLimitCfg.Overflow.Attributes,
		); err != nil {
			return identity.Scope{}, pdataScopeMetrics{}, err
		}
		sm := pdataScopeMetrics{
			ScopeMetrics:  overflowScope,
			metricTracker: rm.scopeTracker.NewMetricTracker(),
		}
		s.scopeLookup[overflowScopeID] = sm
		return overflowScopeID, sm, nil
	}
	// Clone it *without* the MetricSlice data
	smOrig := rm.ScopeMetrics().AppendEmpty()
	otherSm.Scope().CopyTo(smOrig.Scope())
	smOrig.SetSchemaUrl(otherSm.SchemaUrl())
	sm := pdataScopeMetrics{
		ScopeMetrics:  smOrig,
		metricTracker: rm.scopeTracker.NewMetricTracker(),
	}
	s.scopeLookup[scopeID] = sm
	return scopeID, sm, nil
}