fix cuncurrent [read/]write panic
This commit is contained in:
		
							parent
							
								
									360a58dca9
								
							
						
					
					
						commit
						c5b0f95dac
					
				@ -3,6 +3,7 @@ package fsutils
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"io/ioutil"
 | 
			
		||||
	"sync"
 | 
			
		||||
 | 
			
		||||
	"github.com/golangci/golangci-lint/pkg/logutils"
 | 
			
		||||
 | 
			
		||||
@ -10,19 +11,17 @@ import (
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type FileCache struct {
 | 
			
		||||
	files map[string][]byte
 | 
			
		||||
	files sync.Map
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewFileCache() *FileCache {
 | 
			
		||||
	return &FileCache{
 | 
			
		||||
		files: map[string][]byte{},
 | 
			
		||||
	}
 | 
			
		||||
	return &FileCache{}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (fc *FileCache) GetFileBytes(filePath string) ([]byte, error) {
 | 
			
		||||
	cachedBytes := fc.files[filePath]
 | 
			
		||||
	if cachedBytes != nil {
 | 
			
		||||
		return cachedBytes, nil
 | 
			
		||||
	cachedBytes, ok := fc.files.Load(filePath)
 | 
			
		||||
	if ok {
 | 
			
		||||
		return cachedBytes.([]byte), nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	fileBytes, err := ioutil.ReadFile(filePath)
 | 
			
		||||
@ -30,7 +29,7 @@ func (fc *FileCache) GetFileBytes(filePath string) ([]byte, error) {
 | 
			
		||||
		return nil, errors.Wrapf(err, "can't read file %s", filePath)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	fc.files[filePath] = fileBytes
 | 
			
		||||
	fc.files.Store(filePath, fileBytes)
 | 
			
		||||
	return fileBytes, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -56,9 +55,13 @@ func prettifyBytesCount(n int) string {
 | 
			
		||||
 | 
			
		||||
func (fc *FileCache) PrintStats(log logutils.Log) {
 | 
			
		||||
	var size int
 | 
			
		||||
	for _, fileBytes := range fc.files {
 | 
			
		||||
		size += len(fileBytes)
 | 
			
		||||
	}
 | 
			
		||||
	var mapLen int
 | 
			
		||||
	fc.files.Range(func(_, fileBytes interface{}) bool {
 | 
			
		||||
		mapLen++
 | 
			
		||||
		size += len(fileBytes.([]byte))
 | 
			
		||||
 | 
			
		||||
	log.Infof("File cache stats: %d entries of total size %s", len(fc.files), prettifyBytesCount(size))
 | 
			
		||||
		return true
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	log.Infof("File cache stats: %d entries of total size %s", mapLen, prettifyBytesCount(size))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user