mirror of
https://github.com/pomerium/pomerium.git
synced 2025-07-25 20:49:30 +02:00
rm closure
This commit is contained in:
parent
4dc6bc6f76
commit
3ab1e12b03
1 changed files with 17 additions and 19 deletions
|
@ -72,10 +72,13 @@ func NewDeduplicator() *Deduplicator {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Deduplicator) SetProvider(p Provider) {
|
func (d *Deduplicator) SetProvider(p Provider) {
|
||||||
d.setProvider(p)()
|
records := d.setProvider(p)
|
||||||
|
for check, record := range records {
|
||||||
|
report(p, check, record.err, record.Attr()...)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Deduplicator) setProvider(p Provider) func() {
|
func (d *Deduplicator) setProvider(p Provider) map[Check]*record {
|
||||||
d.lock.Lock()
|
d.lock.Lock()
|
||||||
defer d.lock.Unlock()
|
defer d.lock.Unlock()
|
||||||
|
|
||||||
|
@ -83,39 +86,34 @@ func (d *Deduplicator) setProvider(p Provider) func() {
|
||||||
p = &noopProvider{}
|
p = &noopProvider{}
|
||||||
}
|
}
|
||||||
d.provider = p
|
d.provider = p
|
||||||
records := maps.Clone(d.records)
|
|
||||||
|
|
||||||
return func() {
|
return maps.Clone(d.records)
|
||||||
for check, record := range records {
|
|
||||||
report(p, check, record.err, record.Attr()...)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Deduplicator) update(check Check, next *record) func() {
|
func (d *Deduplicator) swap(check Check, next *record) (provider Provider, changed bool) {
|
||||||
d.lock.Lock()
|
d.lock.Lock()
|
||||||
defer d.lock.Unlock()
|
defer d.lock.Unlock()
|
||||||
|
|
||||||
prev := d.records[check]
|
prev := d.records[check]
|
||||||
d.records[check] = next
|
d.records[check] = next
|
||||||
if prev != nil && next.Equals(prev) {
|
changed = prev == nil || !next.Equals(prev)
|
||||||
return func() {}
|
return d.provider, changed
|
||||||
}
|
|
||||||
|
|
||||||
p := d.provider
|
|
||||||
return func() {
|
|
||||||
report(p, check, next.err, next.Attr()...)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReportError implements the Provider interface
|
// ReportError implements the Provider interface
|
||||||
func (d *Deduplicator) ReportError(check Check, err error, attrs ...Attr) {
|
func (d *Deduplicator) ReportError(check Check, err error, attrs ...Attr) {
|
||||||
d.update(check, newErrorRecord(err, attrs))()
|
provider, changed := d.swap(check, newErrorRecord(err, attrs))
|
||||||
|
if changed {
|
||||||
|
provider.ReportError(check, err, attrs...)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReportOK implements the Provider interface
|
// ReportOK implements the Provider interface
|
||||||
func (d *Deduplicator) ReportOK(check Check, attrs ...Attr) {
|
func (d *Deduplicator) ReportOK(check Check, attrs ...Attr) {
|
||||||
d.update(check, newOKRecord(attrs))()
|
provider, changed := d.swap(check, newOKRecord(attrs))
|
||||||
|
if changed {
|
||||||
|
provider.ReportOK(check, attrs...)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type noopProvider struct{}
|
type noopProvider struct{}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue