aboutsummaryrefslogtreecommitdiff
path: root/weed/filer/reader_cache.go
diff options
context:
space:
mode:
authorchrislu <chris.lu@gmail.com>2022-07-08 23:40:22 -0700
committerchrislu <chris.lu@gmail.com>2022-07-08 23:40:22 -0700
commit08f2dcc532551b8def152ebd3ae781711be11933 (patch)
tree718f157b710dd265833ccfeabd73f0da0f08abe3 /weed/filer/reader_cache.go
parente7843b412713de26acf80b75fac1ff7403a0b717 (diff)
parent3d0defa66301fd159ad93f699cccb2ebc1b4b4fe (diff)
downloadseaweedfs-08f2dcc532551b8def152ebd3ae781711be11933.tar.xz
seaweedfs-08f2dcc532551b8def152ebd3ae781711be11933.zip
Merge branch 'master' into messaging
Diffstat (limited to 'weed/filer/reader_cache.go')
-rw-r--r--weed/filer/reader_cache.go7
1 files changed, 7 insertions, 0 deletions
diff --git a/weed/filer/reader_cache.go b/weed/filer/reader_cache.go
index bce97cc49..c319f6c78 100644
--- a/weed/filer/reader_cache.go
+++ b/weed/filer/reader_cache.go
@@ -19,6 +19,7 @@ type ReaderCache struct {
type SingleChunkCacher struct {
sync.RWMutex
+ cond *sync.Cond
parent *ReaderCache
chunkFileId string
data []byte
@@ -140,6 +141,7 @@ func newSingleChunkCacher(parent *ReaderCache, fileId string, cipherKey []byte,
chunkSize: chunkSize,
shouldCache: shouldCache,
}
+ t.cond = sync.NewCond(t)
return t
}
@@ -168,6 +170,7 @@ func (s *SingleChunkCacher) startCaching() {
if s.shouldCache {
s.parent.chunkCache.SetChunk(s.chunkFileId, s.data)
}
+ s.cond.Broadcast()
return
}
@@ -183,6 +186,10 @@ func (s *SingleChunkCacher) readChunkAt(buf []byte, offset int64) (int, error) {
s.RLock()
defer s.RUnlock()
+ for s.completedTime.IsZero() {
+ s.cond.Wait()
+ }
+
if s.err != nil {
return 0, s.err
}