aboutsummaryrefslogtreecommitdiff
path: root/weed/filer/reader_pattern.go
diff options
context:
space:
mode:
Diffstat (limited to 'weed/filer/reader_pattern.go')
-rw-r--r--weed/filer/reader_pattern.go10
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)
}