diff --git a/weed/filer/reader_at.go b/weed/filer/reader_at.go index f73f72429..04c64d449 100644 --- a/weed/filer/reader_at.go +++ b/weed/filer/reader_at.go @@ -38,9 +38,12 @@ type LookupFileIdFunctionType func(fileId string) (targetUrls []string, err erro func LookupFn(filerClient filer_pb.FilerClient) LookupFileIdFunctionType { vidCache := make(map[string]*filer_pb.Locations) + var vicCacheLock sync.RWMutex return func(fileId string) (targetUrls []string, err error) { vid := VolumeId(fileId) + vicCacheLock.RLock() locations, found := vidCache[vid] + vicCacheLock.RUnlock() waitTime := time.Second for !found && waitTime < ReadWaitTime { @@ -58,7 +61,9 @@ func LookupFn(filerClient filer_pb.FilerClient) LookupFileIdFunctionType { glog.V(0).Infof("failed to locate %s", fileId) return fmt.Errorf("failed to locate %s", fileId) } + vicCacheLock.Lock() vidCache[vid] = locations + vicCacheLock.Unlock() return nil })