From ba8d14f493484cff7098d6c9f3ee0618bb50504c Mon Sep 17 00:00:00 2001 From: Matt Moore Date: Mon, 5 Oct 2020 20:09:22 -0700 Subject: [PATCH] upgrade to latest dependencies (#351) Signed-off-by: Matt Moore (via Sockpuppet) --- go.mod | 4 +- go.sum | 8 +- .../knative.dev/pkg/metrics/resource_view.go | 77 +++++++++++++++++-- vendor/modules.txt | 4 +- 4 files changed, 78 insertions(+), 15 deletions(-) diff --git a/go.mod b/go.mod index f263389c..ddc886a9 100644 --- a/go.mod +++ b/go.mod @@ -16,8 +16,8 @@ require ( k8s.io/client-go v11.0.1-0.20190805182717-6502b5e7b1b5+incompatible k8s.io/code-generator v0.18.8 k8s.io/kube-openapi v0.0.0-20200410145947-bcb3869e6f29 - knative.dev/pkg v0.0.0-20201003175733-ea7374e81105 - knative.dev/test-infra v0.0.0-20201002164834-8c07ff018549 + knative.dev/pkg v0.0.0-20201005175134-21cb070a8b05 + knative.dev/test-infra v0.0.0-20201005191434-b298834c10f1 ) replace ( diff --git a/go.sum b/go.sum index 85786bdf..eb3ff577 100644 --- a/go.sum +++ b/go.sum @@ -1894,17 +1894,17 @@ knative.dev/pkg v0.0.0-20200505191044-3da93ebb24c2/go.mod h1:Q6sL35DdGs8hIQZKdaC knative.dev/pkg v0.0.0-20200515002500-16d7b963416f/go.mod h1:tMOHGbxtRz8zYFGEGpV/bpoTEM1o89MwYFC4YJXl3GY= knative.dev/pkg v0.0.0-20200528142800-1c6815d7e4c9/go.mod h1:QgNZTxnwpB/oSpNcfnLVlw+WpEwwyKAvJlvR3hgeltA= knative.dev/pkg v0.0.0-20200711004937-22502028e31a/go.mod h1:AqAJV6rYi8IGikDjJ/9ZQd9qKdkXVlesVnVjwx62YB8= -knative.dev/pkg v0.0.0-20201003175733-ea7374e81105 h1:dx4o9pDAyyYAqpDiCQiIVbcBMjVYGAV+lzgJbVijZtg= -knative.dev/pkg v0.0.0-20201003175733-ea7374e81105/go.mod h1:o9w/M7OnPc0ou07PIUORHUBSZgszeZebAYZkxQ8GdFw= +knative.dev/pkg v0.0.0-20201005175134-21cb070a8b05 h1:EKh6IFZisRV8qaT2KqUYsX8VovGJfO6978z3xuQvUuE= +knative.dev/pkg v0.0.0-20201005175134-21cb070a8b05/go.mod h1:xpPYLHYXh306wQISWkRC/5t3+CD76nOcEHrCQ+5pxBM= knative.dev/test-infra v0.0.0-20200407185800-1b88cb3b45a5/go.mod h1:xcdUkMJrLlBswIZqL5zCuBFOC22WIPMQoVX1L35i0vQ= knative.dev/test-infra v0.0.0-20200505052144-5ea2f705bb55/go.mod h1:WqF1Azka+FxPZ20keR2zCNtiQA1MP9ZB4BH4HuI+SIU= knative.dev/test-infra v0.0.0-20200513011557-d03429a76034/go.mod h1:aMif0KXL4g19YCYwsy4Ocjjz5xgPlseYV+B95Oo4JGE= knative.dev/test-infra v0.0.0-20200519015156-82551620b0a9/go.mod h1:A5b2OAXTOeHT3hHhVQm3dmtbuWvIDP7qzgtqxA3/2pE= knative.dev/test-infra v0.0.0-20200707183444-aed09e56ddc7/go.mod h1:RjYAhXnZqeHw9+B0zsbqSPlae0lCvjekO/nw5ZMpLCs= -knative.dev/test-infra v0.0.0-20201001200229-a6988e3b3b38 h1:g2LdlRp7jB6QHz3D69fnvn2OfX5C6bydIzubyLpFNl0= -knative.dev/test-infra v0.0.0-20201001200229-a6988e3b3b38/go.mod h1:Pmg2c7Z7q7BGFUV/GOpU5BlrD3ePJft4MPqx8AYBplc= knative.dev/test-infra v0.0.0-20201002164834-8c07ff018549 h1:8UObRJ0lnWvU9FuD8ubmkwJo14+aZtboq1ncBWbs2uI= knative.dev/test-infra v0.0.0-20201002164834-8c07ff018549/go.mod h1:Pmg2c7Z7q7BGFUV/GOpU5BlrD3ePJft4MPqx8AYBplc= +knative.dev/test-infra v0.0.0-20201005191434-b298834c10f1 h1:BCeUtO6TsMQyvH1GpxRViTOY+KANqnfk+n5DdTo4nio= +knative.dev/test-infra v0.0.0-20201005191434-b298834c10f1/go.mod h1:Pmg2c7Z7q7BGFUV/GOpU5BlrD3ePJft4MPqx8AYBplc= mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= mvdan.cc/unparam v0.0.0-20190720180237-d51796306d8f/go.mod h1:4G1h5nDURzA3bwVMZIVpwbkw+04kSxk3rAtzlimaUJw= diff --git a/vendor/knative.dev/pkg/metrics/resource_view.go b/vendor/knative.dev/pkg/metrics/resource_view.go index 1e89787f..57e54a6f 100644 --- a/vendor/knative.dev/pkg/metrics/resource_view.go +++ b/vendor/knative.dev/pkg/metrics/resource_view.go @@ -29,6 +29,7 @@ import ( "go.opencensus.io/stats" "go.opencensus.io/stats/view" "go.opencensus.io/tag" + "k8s.io/apimachinery/pkg/util/clock" ) type storedViews struct { @@ -40,6 +41,7 @@ type meterExporter struct { m view.Meter // NOTE: DO NOT RETURN THIS DIRECTLY; the view.Meter will not work for the empty Resource o stats.Options // Cache the option to reduce allocations e view.Exporter + t time.Time // Time when last access occurred } // ResourceExporterFactory provides a hook for producing separate view.Exporters @@ -48,17 +50,70 @@ type meterExporter struct { // Tags are. type ResourceExporterFactory func(*resource.Resource) (view.Exporter, error) type meters struct { - meters map[string]*meterExporter - factory ResourceExporterFactory - lock sync.Mutex + meters map[string]*meterExporter + factory ResourceExporterFactory + lock sync.Mutex + clock clock.Clock + ticker clock.Ticker + tickerStopChan chan struct{} } // Lock regime: lock allMeters before resourceViews. The critical path is in // optionForResource, which must lock allMeters, but only needs to lock // resourceViews if a new meter needs to be created. -var resourceViews = storedViews{} -var allMeters = meters{ - meters: map[string]*meterExporter{"": &defaultMeter}, +var ( + resourceViews = storedViews{} + allMeters = meters{ + meters: map[string]*meterExporter{"": &defaultMeter}, + clock: clock.Clock(clock.RealClock{}), + } + + cleanupOnce = new(sync.Once) + meterExporterScanFrequency = 1 * time.Minute + maxMeterExporterAge = 10 * time.Minute +) + +// cleanup looks through allMeter's meterExporter and prunes any that were last visited +// more than maxMeterExporterAge ago. This will clean up any exporters for resources +// that no longer exist on the system (a replaced revision, e.g.). All meterExporter +// lookups (and creations) run meterExporterForResource, which updates the timestamp +// on each access. +func cleanup() { + expiryCutoff := allMeters.clock.Now().Add(-1 * maxMeterExporterAge) + allMeters.lock.Lock() + defer allMeters.lock.Unlock() + for key, meter := range allMeters.meters { + if key != "" && meter.t.Before(expiryCutoff) { + flushGivenExporter(meter.e) + delete(allMeters.meters, key) + } + } +} + +// startCleanup is configured to only run once in production. For testing, +// calling startCleanup again will terminate old cleanup threads, +// and restart anew. +func startCleanup() { + if allMeters.tickerStopChan != nil { + close(allMeters.tickerStopChan) + } + + curClock := allMeters.clock + newTicker := curClock.NewTicker(meterExporterScanFrequency) + newStopChan := make(chan struct{}) + allMeters.tickerStopChan = newStopChan + allMeters.ticker = newTicker + go func() { + defer newTicker.Stop() + for { + select { + case <-newTicker.C(): + cleanup() + case <-newStopChan: + return + } + } + }() } // RegisterResourceView is similar to view.Register(), except that it will @@ -174,7 +229,9 @@ func flushResourceExporters() { } // ClearMetersForTest clears the internal set of metrics being exported, -// including cleaning up background threads. +// including cleaning up background threads, and restarts cleanup thread. +// +// If a replacement clock is desired, it should be in allMeters.clock before calling. func ClearMetersForTest() { allMeters.lock.Lock() defer allMeters.lock.Unlock() @@ -186,6 +243,7 @@ func ClearMetersForTest() { meter.m.Stop() delete(allMeters.meters, k) } + startCleanup() } func meterExporterForResource(r *resource.Resource) *meterExporter { @@ -195,6 +253,7 @@ func meterExporterForResource(r *resource.Resource) *meterExporter { mE = &meterExporter{} allMeters.meters[key] = mE } + mE.t = allMeters.clock.Now() if mE.o != nil { return mE } @@ -219,6 +278,9 @@ func meterExporterForResource(r *resource.Resource) *meterExporter { // optionForResource finds or creates a stats exporter for the resource, and // returns a stats.Option indicating which meter to record to. func optionForResource(r *resource.Resource) (stats.Options, error) { + // Start the allMeters cleanup thread, if not already started + cleanupOnce.Do(startCleanup) + allMeters.lock.Lock() defer allMeters.lock.Unlock() @@ -313,6 +375,7 @@ var _ view.Meter = (*defaultMeterImpl)(nil) var defaultMeter = meterExporter{ m: &defaultMeterImpl{}, o: stats.WithRecorder(nil), + t: time.Now(), // time.Now() here is ok - defaultMeter never expires, so this won't be checked } func (*defaultMeterImpl) Record(*tag.Map, interface{}, map[string]interface{}) { diff --git a/vendor/modules.txt b/vendor/modules.txt index 0a1f61d9..f0974865 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -725,7 +725,7 @@ k8s.io/kube-openapi/pkg/util/sets k8s.io/utils/buffer k8s.io/utils/integer k8s.io/utils/trace -# knative.dev/pkg v0.0.0-20201003175733-ea7374e81105 +# knative.dev/pkg v0.0.0-20201005175134-21cb070a8b05 ## explicit knative.dev/pkg/apis knative.dev/pkg/apis/duck/ducktypes @@ -749,7 +749,7 @@ knative.dev/pkg/metrics/metricskey knative.dev/pkg/network knative.dev/pkg/reconciler knative.dev/pkg/system -# knative.dev/test-infra v0.0.0-20201002164834-8c07ff018549 +# knative.dev/test-infra v0.0.0-20201005191434-b298834c10f1 ## explicit knative.dev/test-infra/scripts knative.dev/test-infra/tools/dep-collector