diff options
| author | chrislu <chris.lu@gmail.com> | 2021-12-19 22:43:14 -0800 |
|---|---|---|
| committer | chrislu <chris.lu@gmail.com> | 2021-12-19 22:43:14 -0800 |
| commit | a152f179378319ab888cfbc0b4f0741f562faa64 (patch) | |
| tree | 0d3354a3fee668c108c9811b2f2bc790e6c59ff9 /weed/filer/reader_pattern.go | |
| parent | 85c526c583f6e1eb0a9499ba58fd9250ef25722d (diff) | |
| download | seaweedfs-a152f179378319ab888cfbc0b4f0741f562faa64.tar.xz seaweedfs-a152f179378319ab888cfbc0b4f0741f562faa64.zip | |
mount: improve read performance on random reads
Diffstat (limited to 'weed/filer/reader_pattern.go')
| -rw-r--r-- | weed/filer/reader_pattern.go | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/weed/filer/reader_pattern.go b/weed/filer/reader_pattern.go new file mode 100644 index 000000000..2bf18d141 --- /dev/null +++ b/weed/filer/reader_pattern.go @@ -0,0 +1,31 @@ +package filer + +type ReaderPattern struct { + isStreaming bool + lastReadOffset int64 +} + +// For streaming read: only cache the first chunk +// For random read: only fetch the requested range, instead of the whole chunk + +func NewReaderPattern() *ReaderPattern { + return &ReaderPattern{ + isStreaming: true, + lastReadOffset: 0, + } +} + +func (rp *ReaderPattern) MonitorReadAt(offset int64, size int) { + if rp.lastReadOffset > offset { + rp.isStreaming = false + } + rp.lastReadOffset = offset +} + +func (rp *ReaderPattern) IsStreamingMode() bool { + return rp.isStreaming +} + +func (rp *ReaderPattern) IsRandomMode() bool { + return !rp.isStreaming +} |
