in experimental/s3_storage.go [195:234]
func (f *s3Storage) Read(path string, etag string) ([]byte, error) {
cachePath := filepath.Join(*s3CacheStorage, path)
if etag != "" && *s3CacheStorage != "" {
file, err := ioutil.ReadFile(cachePath)
if err == nil {
if compareEtag(file, etag) {
atomic.AddInt64(&f.cacheHits, 1)
return file, nil
} else {
atomic.AddInt64(&f.cacheError, 1)
}
} else if os.IsNotExist(err) {
atomic.AddInt64(&f.cacheMiss, 1)
logrus.Infoln("CACHE MISS:", path)
}
}
atomic.AddInt64(&f.apiCalls, 1)
resp, err := f.S3.GetObject(&s3.GetObjectInput{
Bucket: aws.String(f.Bucket),
Key: aws.String(f.fullPath(path)),
})
if err != nil {
return nil, err
}
defer resp.Body.Close()
data, err := ioutil.ReadAll(resp.Body)
if err != nil {
return nil, err
}
if etag != "" && *s3CacheStorage != "" {
os.MkdirAll(filepath.Dir(cachePath), 0700)
ioutil.WriteFile(cachePath, data, 0600)
}
return data, nil
}