mirror of https://github.com/k3s-io/k3s
Merge pull request #49919 from liggitt/deconflict-reflector
Automatic merge from submit-queue (batch tested with PRs 49898, 49897, 49919, 48860, 49491) Fix duplicate metrics collector registration attempted error Fixes "duplicate metrics collector registration attempted" error seen in https://k8s-gubernator.appspot.com/build/kubernetes-jenkins/pr-logs/pull/batch/pull-kubernetes-unit/43931/pull/6/head
commit
f5b4f9a07d
|
@ -30,6 +30,7 @@ import (
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
"sync/atomic"
|
||||||
"syscall"
|
"syscall"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
@ -98,12 +99,17 @@ func NewReflector(lw ListerWatcher, expectedType interface{}, store Store, resyn
|
||||||
return NewNamedReflector(getDefaultReflectorName(internalPackages...), lw, expectedType, store, resyncPeriod)
|
return NewNamedReflector(getDefaultReflectorName(internalPackages...), lw, expectedType, store, resyncPeriod)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// reflectorDisambiguator is used to disambiguate started reflectors.
|
||||||
|
// initialized to an unstable value to ensure meaning isn't attributed to the suffix.
|
||||||
|
var reflectorDisambiguator = int64(time.Now().UnixNano() % 12345)
|
||||||
|
|
||||||
// NewNamedReflector same as NewReflector, but with a specified name for logging
|
// NewNamedReflector same as NewReflector, but with a specified name for logging
|
||||||
func NewNamedReflector(name string, lw ListerWatcher, expectedType interface{}, store Store, resyncPeriod time.Duration) *Reflector {
|
func NewNamedReflector(name string, lw ListerWatcher, expectedType interface{}, store Store, resyncPeriod time.Duration) *Reflector {
|
||||||
|
reflectorSuffix := atomic.AddInt64(&reflectorDisambiguator, 1)
|
||||||
r := &Reflector{
|
r := &Reflector{
|
||||||
name: name,
|
name: name,
|
||||||
// we need this to be unique per process (some names are still the same)but obvious who it belongs to
|
// we need this to be unique per process (some names are still the same)but obvious who it belongs to
|
||||||
metrics: newReflectorMetrics(makeValidPromethusMetricName(fmt.Sprintf("reflector_"+name+"_%07d", rand.Intn(1000000)))),
|
metrics: newReflectorMetrics(makeValidPromethusMetricName(fmt.Sprintf("reflector_"+name+"_%d", reflectorSuffix))),
|
||||||
listerWatcher: lw,
|
listerWatcher: lw,
|
||||||
store: store,
|
store: store,
|
||||||
expectedType: reflect.TypeOf(expectedType),
|
expectedType: reflect.TypeOf(expectedType),
|
||||||
|
|
Loading…
Reference in New Issue