Merge pull request #472 from prometheus/beorn7/registry

Fix a few minor things...
This commit is contained in:
Björn Rabenstein 2018-09-29 11:53:47 +02:00 committed by GitHub
commit daeaac0cfb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 8 additions and 5 deletions

View File

@ -40,7 +40,8 @@ type Collector interface {
// Collector may yield any Metric it sees fit in its Collect method. // Collector may yield any Metric it sees fit in its Collect method.
// //
// This method idempotently sends the same descriptors throughout the // This method idempotently sends the same descriptors throughout the
// lifetime of the Collector. // lifetime of the Collector. It may be called concurrently and
// therefore must be implemented in a concurrency safe way.
// //
// If a Collector encounters an error while executing this method, it // If a Collector encounters an error while executing this method, it
// must send an invalid descriptor (created with NewInvalidDesc) to // must send an invalid descriptor (created with NewInvalidDesc) to

View File

@ -107,9 +107,6 @@ type Registerer interface {
// Collector, and for providing a Collector that will not cause // Collector, and for providing a Collector that will not cause
// inconsistent metrics on collection. (This would lead to scrape // inconsistent metrics on collection. (This would lead to scrape
// errors.) // errors.)
//
// It is in general not safe to register the same Collector multiple
// times concurrently.
Register(Collector) error Register(Collector) error
// MustRegister works like Register but registers any number of // MustRegister works like Register but registers any number of
// Collectors and panics upon the first registration that causes an // Collectors and panics upon the first registration that causes an
@ -273,7 +270,12 @@ func (r *Registry) Register(c Collector) error {
close(descChan) close(descChan)
}() }()
r.mtx.Lock() r.mtx.Lock()
defer r.mtx.Unlock() defer func() {
// Drain channel in case of premature return to not leak a goroutine.
for range descChan {
}
r.mtx.Unlock()
}()
// Conduct various tests... // Conduct various tests...
for desc := range descChan { for desc := range descChan {