aboutsummaryrefslogtreecommitdiff
path: root/weed/filesys/dirty_page.go
diff options
context:
space:
mode:
Diffstat (limited to 'weed/filesys/dirty_page.go')
-rw-r--r--weed/filesys/dirty_page.go23
1 files changed, 23 insertions, 0 deletions
diff --git a/weed/filesys/dirty_page.go b/weed/filesys/dirty_page.go
index f83944678..7a466b506 100644
--- a/weed/filesys/dirty_page.go
+++ b/weed/filesys/dirty_page.go
@@ -222,3 +222,26 @@ func max(x, y int64) int64 {
}
return y
}
+func min(x, y int64) int64 {
+ if x < y {
+ return x
+ }
+ return y
+}
+
+func (pages *ContinuousDirtyPages) ReadDirtyData(ctx context.Context, data []byte, startOffset int64) (offset int64, size int, err error) {
+ bufSize := int64(len(data))
+ if startOffset+bufSize < pages.Offset {
+ return
+ }
+ if startOffset >= pages.Offset+pages.Size {
+ return
+ }
+
+ offset = max(pages.Offset, startOffset)
+ stopOffset := min(pages.Offset+pages.Size, startOffset+bufSize)
+ size = int(stopOffset - offset)
+ copy(data[offset-startOffset:], pages.Data[offset-pages.Offset:stopOffset-pages.Offset])
+
+ return
+}