diff options
Diffstat (limited to 'weed/storage/volume_read.go')
| -rw-r--r-- | weed/storage/volume_read.go | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/weed/storage/volume_read.go b/weed/storage/volume_read.go index d4d795fee..b51ab5c82 100644 --- a/weed/storage/volume_read.go +++ b/weed/storage/volume_read.go @@ -80,6 +80,24 @@ func (v *Volume) readNeedle(n *needle.Needle, readOption *ReadOption, onReadSize return -1, ErrorNotFound } +// read needle at a specific offset +func (v *Volume) readNeedleMetaAt(n *needle.Needle, offset int64, size int32) (err error) { + v.dataFileAccessLock.RLock() + defer v.dataFileAccessLock.RUnlock() + // read deleted meta data + if size < 0 { + size = -size + } + err = n.ReadNeedleMeta(v.DataBackend, offset, Size(size), v.Version()) + if err == needle.ErrorSizeMismatch && OffsetSize == 4 { + err = n.ReadNeedleMeta(v.DataBackend, offset+int64(MaxPossibleVolumeSize), Size(size), v.Version()) + } + if err != nil { + return err + } + return nil +} + // read fills in Needle content by looking up n.Id from NeedleMapper func (v *Volume) readNeedleDataInto(n *needle.Needle, readOption *ReadOption, writer io.Writer, offset int64, size int64) (err error) { v.dataFileAccessLock.RLock() |
