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
This commit is contained in:
Chris Lu
2020-01-22 13:42:03 -08:00
parent 09f4ceef3a
commit 6b48d246a5
5 changed files with 88 additions and 26 deletions

View File

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