aboutsummaryrefslogtreecommitdiff
path: root/weed/filer/reader_pattern.go
diff options
context:
space:
mode:
authorchrislu <chris.lu@gmail.com>2022-07-13 02:30:53 -0700
committerchrislu <chris.lu@gmail.com>2022-07-13 02:30:53 -0700
commit9c0459685e4784d18c30105861e479af3aadb84f (patch)
tree5a467b9a57223f8d6e35922b1f84d065747915e2 /weed/filer/reader_pattern.go
parent9a712df6eea5d24cba6fb068c913c3f2f771f4c3 (diff)
parent289402a741be0ee7370ae1d27834afb23003596d (diff)
downloadseaweedfs-9c0459685e4784d18c30105861e479af3aadb84f.tar.xz
seaweedfs-9c0459685e4784d18c30105861e479af3aadb84f.zip
Merge branch 'master' into messaging
Diffstat (limited to 'weed/filer/reader_pattern.go')
-rw-r--r--weed/filer/reader_pattern.go29
1 files changed, 10 insertions, 19 deletions
diff --git a/weed/filer/reader_pattern.go b/weed/filer/reader_pattern.go
index b860bc577..ec73c59a2 100644
--- a/weed/filer/reader_pattern.go
+++ b/weed/filer/reader_pattern.go
@@ -1,8 +1,8 @@
package filer
type ReaderPattern struct {
- isStreaming bool
- lastReadOffset int64
+ isSequentialCounter int64
+ lastReadStopOffset int64
}
// For streaming read: only cache the first chunk
@@ -10,29 +10,20 @@ type ReaderPattern struct {
func NewReaderPattern() *ReaderPattern {
return &ReaderPattern{
- isStreaming: true,
- lastReadOffset: -1,
+ isSequentialCounter: 0,
+ lastReadStopOffset: 0,
}
}
func (rp *ReaderPattern) MonitorReadAt(offset int64, size int) {
- isStreaming := true
- if rp.lastReadOffset > offset {
- isStreaming = false
+ if rp.lastReadStopOffset == offset {
+ rp.isSequentialCounter++
+ } else {
+ rp.isSequentialCounter--
}
- if rp.lastReadOffset == -1 {
- if offset != 0 {
- isStreaming = false
- }
- }
- rp.lastReadOffset = offset
- rp.isStreaming = isStreaming
-}
-
-func (rp *ReaderPattern) IsStreamingMode() bool {
- return rp.isStreaming
+ rp.lastReadStopOffset = offset + int64(size)
}
func (rp *ReaderPattern) IsRandomMode() bool {
- return !rp.isStreaming
+ return rp.isSequentialCounter >= 0
}