quicker to adapt to pattern change

This commit is contained in:
chrislu 2022-08-07 10:14:01 -07:00
parent 928d29af9e
commit 0aeec04c31
2 changed files with 16 additions and 4 deletions

View file

@ -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)
}

View file

@ -6,6 +6,8 @@ type WriterPattern struct {
chunkSize int64
}
const ModeChangeLimit = 3
// For streaming write: only cache the first chunk
// For random write: fall back to temp file approach
// writes can only change from streaming mode to non-streaming mode
@ -20,9 +22,13 @@ func NewWriterPattern(chunkSize int64) *WriterPattern {
func (rp *WriterPattern) MonitorWriteAt(offset int64, size int) {
if rp.lastWriteStopOffset == offset {
rp.isSequentialCounter++
if rp.isSequentialCounter < ModeChangeLimit {
rp.isSequentialCounter++
}
} else {
rp.isSequentialCounter--
if rp.isSequentialCounter > -ModeChangeLimit {
rp.isSequentialCounter--
}
}
rp.lastWriteStopOffset = offset + int64(size)
}