mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-09 20:17:41 +00:00
Merge pull request #117114 from pohly/test-integration-race-detection-logs-registry
component-base: avoid data race in log format registry
This commit is contained in:
commit
cd648c9c7d
@ -20,6 +20,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
|
"sync"
|
||||||
|
|
||||||
"github.com/go-logr/logr"
|
"github.com/go-logr/logr"
|
||||||
|
|
||||||
@ -30,6 +31,7 @@ var logRegistry = newLogFormatRegistry()
|
|||||||
|
|
||||||
// logFormatRegistry stores factories for all supported logging formats.
|
// logFormatRegistry stores factories for all supported logging formats.
|
||||||
type logFormatRegistry struct {
|
type logFormatRegistry struct {
|
||||||
|
mutex sync.Mutex
|
||||||
registry map[string]logFormat
|
registry map[string]logFormat
|
||||||
frozen bool
|
frozen bool
|
||||||
}
|
}
|
||||||
@ -83,6 +85,8 @@ func newLogFormatRegistry() *logFormatRegistry {
|
|||||||
|
|
||||||
// register adds a new log format. It's an error to modify an existing one.
|
// register adds a new log format. It's an error to modify an existing one.
|
||||||
func (lfr *logFormatRegistry) register(name string, format logFormat) error {
|
func (lfr *logFormatRegistry) register(name string, format logFormat) error {
|
||||||
|
lfr.mutex.Lock()
|
||||||
|
defer lfr.mutex.Unlock()
|
||||||
if lfr.frozen {
|
if lfr.frozen {
|
||||||
return fmt.Errorf("log format registry is frozen, unable to register log format %s", name)
|
return fmt.Errorf("log format registry is frozen, unable to register log format %s", name)
|
||||||
}
|
}
|
||||||
@ -98,6 +102,8 @@ func (lfr *logFormatRegistry) register(name string, format logFormat) error {
|
|||||||
|
|
||||||
// get specified log format factory
|
// get specified log format factory
|
||||||
func (lfr *logFormatRegistry) get(name string) (*logFormat, error) {
|
func (lfr *logFormatRegistry) get(name string) (*logFormat, error) {
|
||||||
|
lfr.mutex.Lock()
|
||||||
|
defer lfr.mutex.Unlock()
|
||||||
format, ok := lfr.registry[name]
|
format, ok := lfr.registry[name]
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, fmt.Errorf("log format: %s does not exists", name)
|
return nil, fmt.Errorf("log format: %s does not exists", name)
|
||||||
@ -107,6 +113,8 @@ func (lfr *logFormatRegistry) get(name string) (*logFormat, error) {
|
|||||||
|
|
||||||
// list names of registered log formats, including feature gates (sorted)
|
// list names of registered log formats, including feature gates (sorted)
|
||||||
func (lfr *logFormatRegistry) list() string {
|
func (lfr *logFormatRegistry) list() string {
|
||||||
|
lfr.mutex.Lock()
|
||||||
|
defer lfr.mutex.Unlock()
|
||||||
formats := make([]string, 0, len(lfr.registry))
|
formats := make([]string, 0, len(lfr.registry))
|
||||||
for name, format := range lfr.registry {
|
for name, format := range lfr.registry {
|
||||||
item := fmt.Sprintf(`"%s"`, name)
|
item := fmt.Sprintf(`"%s"`, name)
|
||||||
@ -121,5 +129,7 @@ func (lfr *logFormatRegistry) list() string {
|
|||||||
|
|
||||||
// freeze prevents further modifications of the registered log formats.
|
// freeze prevents further modifications of the registered log formats.
|
||||||
func (lfr *logFormatRegistry) freeze() {
|
func (lfr *logFormatRegistry) freeze() {
|
||||||
|
lfr.mutex.Lock()
|
||||||
|
defer lfr.mutex.Unlock()
|
||||||
lfr.frozen = true
|
lfr.frozen = true
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user