diff options
| author | chrislu <chris.lu@gmail.com> | 2022-07-13 02:20:03 -0700 |
|---|---|---|
| committer | chrislu <chris.lu@gmail.com> | 2022-07-13 02:20:03 -0700 |
| commit | 6e90f7bdd0960b4682ff1258168a8315d3cf5e27 (patch) | |
| tree | ff6868da786071d4ebfef110a4d91a03a6a7f69f | |
| parent | 578c8aea0ec11fb3d3e8b2c4264d889a2ff5d4f7 (diff) | |
| download | seaweedfs-6e90f7bdd0960b4682ff1258168a8315d3cf5e27.tar.xz seaweedfs-6e90f7bdd0960b4682ff1258168a8315d3cf5e27.zip | |
detect sequential mode with a counter
| -rw-r--r-- | weed/filer/reader_pattern.go | 29 |
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 } |
