Fix race conditions in logging package functions

The logging package contains two functions, SetLogOptions and SetLogFile, that could experience race conditions when multiple goroutines access and modify the logger struct concurrently. 
To address these issues, a copy of the logger struct is now created in each function to eliminate data races.

In addition, the test-go.sh script is updated to include the '-race' flag, enabling race detection during testing. This change helps prevent future race conditions by activating the Go race detector.

Signed-off-by: Alina Sudakov <asudakov@redhat.com>
This commit is contained in:
Alina Sudakov 2023-05-22 11:48:21 +03:00
parent d5883bdbfa
commit 272b3ca8fa
2 changed files with 23 additions and 12 deletions

View File

@ -19,5 +19,5 @@ if [ "$GO111MODULE" == "off" ]; then
bash -c "umask 0; cd ${GOPATH}/src/${REPO_PATH}; PATH=${GOROOT}/bin:$(pwd)/bin:${PATH} go test -v -covermode=count -coverprofile=coverage.out ./..." bash -c "umask 0; cd ${GOPATH}/src/${REPO_PATH}; PATH=${GOROOT}/bin:$(pwd)/bin:${PATH} go test -v -covermode=count -coverprofile=coverage.out ./..."
else else
# test with go modules # test with go modules
bash -c "umask 0; go test -v -covermode=count -coverprofile=coverage.out ./..." bash -c "umask 0; go test -v -race -covermode=atomic -coverprofile=coverage.out ./..."
fi fi

View File

@ -57,24 +57,29 @@ type LogOptions struct {
// SetLogOptions set the LoggingOptions of NetConf // SetLogOptions set the LoggingOptions of NetConf
func SetLogOptions(options *LogOptions) { func SetLogOptions(options *LogOptions) {
// give some default value // give some default value
logger.MaxSize = 100 updatedLogger := lumberjack.Logger{
logger.MaxAge = 5 Filename: logger.Filename,
logger.MaxBackups = 5 MaxAge: 5,
logger.Compress = true MaxBackups: 5,
Compress: true,
MaxSize: 100,
LocalTime: logger.LocalTime,
}
if options != nil { if options != nil {
if options.MaxAge != nil { if options.MaxAge != nil {
logger.MaxAge = *options.MaxAge updatedLogger.MaxAge = *options.MaxAge
} }
if options.MaxSize != nil { if options.MaxSize != nil {
logger.MaxSize = *options.MaxSize updatedLogger.MaxSize = *options.MaxSize
} }
if options.MaxBackups != nil { if options.MaxBackups != nil {
logger.MaxBackups = *options.MaxBackups updatedLogger.MaxBackups = *options.MaxBackups
} }
if options.Compress != nil { if options.Compress != nil {
logger.Compress = *options.Compress updatedLogger.Compress = *options.Compress
} }
} }
logger = &updatedLogger
loggingW = logger loggingW = logger
} }
@ -174,10 +179,16 @@ func SetLogFile(filename string) {
if filename == "" { if filename == "" {
return return
} }
updatedLogger := lumberjack.Logger{
logger.Filename = filename Filename: filename,
MaxAge: logger.MaxAge,
MaxBackups: logger.MaxBackups,
Compress: logger.Compress,
MaxSize: logger.MaxSize,
LocalTime: logger.LocalTime,
}
logger = &updatedLogger
loggingW = logger loggingW = logger
} }
func init() { func init() {