Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add observer metric #474

Merged
merged 29 commits into from
Mar 5, 2020
Merged
Changes from 1 commit
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
0cd632f
wip: observers
krnowak Feb 7, 2020
718bd77
wip: float observers
krnowak Feb 11, 2020
000748e
fix copy pasta
krnowak Feb 11, 2020
f5cb07d
wip: rework observers in sdk
krnowak Feb 11, 2020
780a3a4
small fix in global meter
krnowak Feb 11, 2020
a3d59d7
wip: aggregators and selectors
krnowak Feb 12, 2020
ce19483
wip: monotonicity option for observers
krnowak Feb 12, 2020
66e1ee4
some refactor
krnowak Feb 12, 2020
c58130f
wip: docs
krnowak Feb 12, 2020
7e25164
fix ci
krnowak Feb 12, 2020
e9d628d
Fix copy-pasta in docs
krnowak Feb 13, 2020
4e95301
recycle unused recorders in observers
krnowak Feb 13, 2020
6e850ce
unregister
krnowak Feb 13, 2020
413e778
thread-safe set callback
krnowak Feb 13, 2020
ad96df8
Fix docs
krnowak Feb 21, 2020
8c04c23
Revert "wip: aggregators and selectors"
krnowak Feb 21, 2020
f5be2ba
update selector
krnowak Feb 21, 2020
82fa0fd
tests
krnowak Feb 21, 2020
6c23249
Rework number equality
krnowak Mar 2, 2020
7a818a9
Ensure that Observers are registered in the same order
krnowak Mar 3, 2020
a54724a
Run observers in fixed order
krnowak Mar 3, 2020
2a11983
Ensure the proper alignment of the delegates
krnowak Mar 3, 2020
24ed22d
Small tweaks to the global meter test
krnowak Mar 3, 2020
fbfa197
Ensure proper alignment of the callback pointer
krnowak Mar 3, 2020
8a443bc
update docs
krnowak Mar 3, 2020
6bd67be
update a TODO
krnowak Mar 3, 2020
3c38c8f
address review issues
krnowak Mar 5, 2020
feb25ce
drop SetCallback
krnowak Mar 5, 2020
eeac9d1
Merge branch 'master' into observer
rghetia Mar 5, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
recycle unused recorders in observers
if a recorder for a labelset is unused for a second collection cycle
in a row, drop it
  • Loading branch information
krnowak committed Mar 5, 2020
commit 4e95301f9f7eebaa4e1c94c168345d32a98c7445
27 changes: 21 additions & 6 deletions sdk/metric/sdk.go
Original file line number Diff line number Diff line change
Expand Up @@ -142,8 +142,9 @@ type (
}

labeledRecorder struct {
recorder export.Aggregator
labels *labels
recorder export.Aggregator
labels *labels
modifiedEpoch int64
}

int64Observer struct {
Expand Down Expand Up @@ -193,6 +194,8 @@ func (o *observer) getRecorder(ls api.LabelSet) export.Aggregator {
labels := o.meter.labsFor(ls)
lrec, ok := o.recorders[labels.encoded]
if ok {
lrec.modifiedEpoch = o.meter.currentEpoch
o.recorders[labels.encoded] = lrec
return lrec.recorder
}
rec := o.meter.batcher.AggregatorFor(o.descriptor)
Expand All @@ -204,8 +207,9 @@ func (o *observer) getRecorder(ls api.LabelSet) export.Aggregator {
// rather not store anything if recorder is nil and query the
// aggregator selector again?
o.recorders[labels.encoded] = labeledRecorder{
recorder: rec,
labels: labels,
recorder: rec,
labels: labels,
modifiedEpoch: o.meter.currentEpoch,
}
return rec
}
Expand Down Expand Up @@ -564,8 +568,19 @@ func (m *SDK) checkpointObserver(obs *observer) int {
}
checkpointed := 0
ctx := context.Background()
for _, lrec := range obs.recorders {
checkpointed += m.checkpoint(ctx, obs.descriptor, lrec.recorder, lrec.labels)
for encodedLabels, lrec := range obs.recorders {
epochDiff := m.currentEpoch - lrec.modifiedEpoch
if epochDiff == 0 {
checkpointed += m.checkpoint(ctx, obs.descriptor, lrec.recorder, lrec.labels)
} else if epochDiff > 1 {
// This is second collection cycle with no
// observations for this labelset. Remove the
// recorder.
delete(obs.recorders, encodedLabels)
}
}
if len(obs.recorders) == 0 {
obs.recorders = nil
}
return checkpointed
}
Expand Down