Skip to content

Commit

Permalink
refactor: Removes the delta reserved labels from storage. (#2920)
Browse files Browse the repository at this point in the history
* refactor: Removes the delta reserved labels from storage.

* make lint
  • Loading branch information
cyriltovena authored Jan 15, 2024
1 parent ec3deff commit 7007d52
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 41 deletions.
17 changes: 3 additions & 14 deletions pkg/phlaredb/delta.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,13 +39,7 @@ func newSampleDict(samples schemav1.Samples) map[uint32]uint64 {
return dict
}

func (d *deltaProfiles) computeDelta(ps schemav1.InMemoryProfile, lbs phlaremodel.Labels) schemav1.Samples {
// there's no delta to compute for those profile.
if !isDelta(lbs) {
// Trim zero and negative values.
return ps.Samples.Compact(false)
}

func (d *deltaProfiles) computeDelta(ps schemav1.InMemoryProfile) schemav1.Samples {
d.mtx.Lock()
defer d.mtx.Unlock()

Expand Down Expand Up @@ -77,13 +71,8 @@ func (d *deltaProfiles) computeDelta(ps schemav1.InMemoryProfile, lbs phlaremode
return ps.Samples.Compact(false).Clone()
}

func isDelta(lbs phlaremodel.Labels) bool {
switch lbs.Get(phlaremodel.LabelNameDelta) {
case "false":
return false
case "true":
return true
}
func isDeltaSupported(lbs phlaremodel.Labels) bool {
// only compute delta for allocs memory profile.
if lbs.Get(model.MetricNameLabel) == memoryProfileName {
ty := lbs.Get(phlaremodel.LabelNameType)
if ty == allocObjectTypeName || ty == allocSpaceTypeName {
Expand Down
36 changes: 10 additions & 26 deletions pkg/phlaredb/delta_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,38 +16,22 @@ func TestComputeDelta(t *testing.T) {
builder.ForStacktraceString("a", "b", "c").AddSamples(1, 2, 3, 4)
builder.ForStacktraceString("a", "b", "c", "d").AddSamples(1, 2, 3, 4)

profiles, labels := schemav1testhelper.NewProfileSchema(builder.Profile, "memory")
profiles, _ := schemav1testhelper.NewProfileSchema(builder.Profile, "memory")

samples := delta.computeDelta(profiles[0], labels[0])
samples := delta.computeDelta(profiles[0])
require.Empty(t, samples.StacktraceIDs)
samples = delta.computeDelta(profiles[1], labels[1])
samples = delta.computeDelta(profiles[1])
require.Empty(t, samples.StacktraceIDs)
samples = delta.computeDelta(profiles[2], labels[2])
require.NotEmpty(t, samples.StacktraceIDs)
require.Equal(t, 2, len(samples.StacktraceIDs))
require.Equal(t, uint64(3), samples.Values[0])
require.Equal(t, uint64(3), samples.Values[1])
samples = delta.computeDelta(profiles[3], labels[3])
require.NotEmpty(t, samples.StacktraceIDs)
require.Equal(t, 2, len(samples.StacktraceIDs))
require.Equal(t, uint64(4), samples.Values[0])
require.Equal(t, uint64(4), samples.Values[1])

profiles, labels = schemav1testhelper.NewProfileSchema(builder.Profile, "memory")
samples = delta.computeDelta(profiles[0], labels[0])
require.Empty(t, samples.StacktraceIDs)
samples = delta.computeDelta(profiles[1], labels[1])
require.Empty(t, samples.StacktraceIDs)
samples = delta.computeDelta(profiles[2], labels[2])
builder = testhelper.NewProfileBuilder(1).MemoryProfile()
builder.ForStacktraceString("a", "b", "c").AddSamples(2, 4, 3, 4)
builder.ForStacktraceString("a", "b", "c", "d").AddSamples(2, 4, 3, 4)

profiles, _ = schemav1testhelper.NewProfileSchema(builder.Profile, "memory")
samples = delta.computeDelta(profiles[0])
require.NotEmpty(t, samples.StacktraceIDs)
require.Equal(t, 2, len(samples.StacktraceIDs))
require.Equal(t, uint64(3), samples.Values[0])
require.Equal(t, uint64(3), samples.Values[1])
samples = delta.computeDelta(profiles[3], labels[3])
samples = delta.computeDelta(profiles[1])
require.NotEmpty(t, samples.StacktraceIDs)
require.Equal(t, 2, len(samples.StacktraceIDs))
require.Equal(t, uint64(4), samples.Values[0])
require.Equal(t, uint64(4), samples.Values[1])
}

func TestDeltaSample(t *testing.T) {
Expand Down
10 changes: 9 additions & 1 deletion pkg/phlaredb/head.go
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,9 @@ func (h *Head) Ingest(ctx context.Context, p *profilev1.Profile, id uuid.UUID, e
return nil
}

delta := phlaremodel.Labels(externalLabels).Get(phlaremodel.LabelNameDelta) != "false"
externalLabels = phlaremodel.Labels(externalLabels).Delete(phlaremodel.LabelNameDelta)

lbls, seriesFingerprints := phlarelabels.CreateProfileLabels(p, externalLabels...)

for i, fp := range seriesFingerprints {
Expand All @@ -201,7 +204,12 @@ func (h *Head) Ingest(ctx context.Context, p *profilev1.Profile, id uuid.UUID, e
for idxType, profile := range h.symdb.WriteProfileSymbols(partition, p) {
profile.ID = id
profile.SeriesFingerprint = seriesFingerprints[idxType]
profile.Samples = h.delta.computeDelta(profile, lbls[idxType])
if delta && isDeltaSupported(lbls[idxType]) {
profile.Samples = h.delta.computeDelta(profile)
} else {
profile.Samples = profile.Samples.Compact(false)
}

profile.TotalValue = profile.Samples.Sum()

if profile.Samples.Len() == 0 {
Expand Down

0 comments on commit 7007d52

Please sign in to comment.