aboutsummaryrefslogtreecommitdiff
path: root/weed/storage/volume_read.go
diff options
context:
space:
mode:
Diffstat (limited to 'weed/storage/volume_read.go')
-rw-r--r--weed/storage/volume_read.go18
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()