diff options
| author | chrislu <chris.lu@gmail.com> | 2022-07-08 23:40:22 -0700 |
|---|---|---|
| committer | chrislu <chris.lu@gmail.com> | 2022-07-08 23:40:22 -0700 |
| commit | 08f2dcc532551b8def152ebd3ae781711be11933 (patch) | |
| tree | 718f157b710dd265833ccfeabd73f0da0f08abe3 /weed/filer/reader_cache.go | |
| parent | e7843b412713de26acf80b75fac1ff7403a0b717 (diff) | |
| parent | 3d0defa66301fd159ad93f699cccb2ebc1b4b4fe (diff) | |
| download | seaweedfs-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.go | 7 |
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 } |
