diff options
Diffstat (limited to 'weed/filer/reader_pattern.go')
| -rw-r--r-- | weed/filer/reader_pattern.go | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/weed/filer/reader_pattern.go b/weed/filer/reader_pattern.go index 38a51d788..e32f7fc2d 100644 --- a/weed/filer/reader_pattern.go +++ b/weed/filer/reader_pattern.go @@ -5,6 +5,8 @@ type ReaderPattern struct { lastReadStopOffset int64 } +const ModeChangeLimit = 3 + // For streaming read: only cache the first chunk // For random read: only fetch the requested range, instead of the whole chunk @@ -17,9 +19,13 @@ func NewReaderPattern() *ReaderPattern { func (rp *ReaderPattern) MonitorReadAt(offset int64, size int) { if rp.lastReadStopOffset == offset { - rp.isSequentialCounter++ + if rp.isSequentialCounter < ModeChangeLimit { + rp.isSequentialCounter++ + } } else { - rp.isSequentialCounter-- + if rp.isSequentialCounter > -ModeChangeLimit { + rp.isSequentialCounter-- + } } rp.lastReadStopOffset = offset + int64(size) } |
