aboutsummaryrefslogtreecommitdiff
path: root/weed/filesys/dirty_page.go
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2020-01-22 13:42:03 -0800
committerChris Lu <chris.lu@gmail.com>2020-01-22 13:42:03 -0800
commit6b48d246a5d7943527d1948e352c9906e9d01a17 (patch)
tree03e8547f1d86ed54a47d7fde4a1bb484f4e1f6a8 /weed/filesys/dirty_page.go
parent09f4ceef3a5b3eca457fd74382f0391a1db4283e (diff)
downloadseaweedfs-6b48d246a5d7943527d1948e352c9906e9d01a17.tar.xz
seaweedfs-6b48d246a5d7943527d1948e352c9906e9d01a17.zip
mount: read data that is just written
able read on data not flushed multiple file open shares the same file handle fix https://github.com/chrislusf/seaweedfs/issues/1182 on linux
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
+}