aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorchrislu <chris.lu@gmail.com>2025-06-06 01:26:54 -0700
committerchrislu <chris.lu@gmail.com>2025-06-06 01:26:54 -0700
commitcc135c63f7638b12a9e6a4b460fc858b412cf019 (patch)
tree6c4f0e956b4305f38e2ef3d665dd96d8b00fc5a1
parentc4695fc3b38fbf5cefffb0ba50da8d2ece41f8e0 (diff)
downloadseaweedfs-cc135c63f7638b12a9e6a4b460fc858b412cf019.tar.xz
seaweedfs-cc135c63f7638b12a9e6a4b460fc858b412cf019.zip
a bit refactoring
-rw-r--r--weed/storage/needle/needle_read.go29
1 files changed, 17 insertions, 12 deletions
diff --git a/weed/storage/needle/needle_read.go b/weed/storage/needle/needle_read.go
index 1907efad3..905969e36 100644
--- a/weed/storage/needle/needle_read.go
+++ b/weed/storage/needle/needle_read.go
@@ -3,12 +3,13 @@ package needle
import (
"errors"
"fmt"
+ "io"
+
"github.com/seaweedfs/seaweedfs/weed/glog"
"github.com/seaweedfs/seaweedfs/weed/stats"
"github.com/seaweedfs/seaweedfs/weed/storage/backend"
. "github.com/seaweedfs/seaweedfs/weed/storage/types"
"github.com/seaweedfs/seaweedfs/weed/util"
- "io"
)
const (
@@ -52,7 +53,6 @@ func ReadNeedleBlob(r backend.BackendStorageFile, offset int64, size Size, versi
func (n *Needle) ReadBytes(bytes []byte, offset int64, size Size, version Version) (err error) {
n.ParseNeedleHeader(bytes)
if n.Size != size {
- // cookie is not always passed in for this API. Use size to do preliminary checking.
if OffsetSize == 4 && offset < int64(MaxPossibleVolumeSize) {
stats.VolumeServerHandlerCounter.WithLabelValues(stats.ErrorSizeMismatchOffsetSize).Inc()
glog.Errorf("entry not found1: offset %d found id %x size %d, expected size %d", offset, n.Id, n.Size, size)
@@ -64,11 +64,21 @@ func (n *Needle) ReadBytes(bytes []byte, offset int64, size Size, version Versio
switch version {
case Version1:
n.Data = bytes[NeedleHeaderSize : NeedleHeaderSize+size]
- case Version2, Version3:
- err = n.readNeedleDataVersion2(bytes[NeedleHeaderSize : NeedleHeaderSize+int(n.Size)])
- }
- if err != nil && err != io.EOF {
- return err
+ // fallthrough to checksum logic below
+ case Version2:
+ err := n.readNeedleDataVersion2(bytes[NeedleHeaderSize : NeedleHeaderSize+int(size)])
+ if err != nil && err != io.EOF {
+ return err
+ }
+ case Version3:
+ err := n.readNeedleDataVersion2(bytes[NeedleHeaderSize : NeedleHeaderSize+int(size)])
+ if err != nil && err != io.EOF {
+ return err
+ }
+ tsOffset := NeedleHeaderSize + size + NeedleChecksumSize
+ n.AppendAtNs = util.BytesToUint64(bytes[tsOffset : tsOffset+TimestampSize])
+ default:
+ return fmt.Errorf("unsupported version %d", version)
}
if size > 0 {
checksum := util.BytesToUint32(bytes[NeedleHeaderSize+size : NeedleHeaderSize+size+NeedleChecksumSize])
@@ -82,10 +92,6 @@ func (n *Needle) ReadBytes(bytes []byte, offset int64, size Size, version Versio
}
n.Checksum = newChecksum
}
- if version == Version3 {
- tsOffset := NeedleHeaderSize + size + NeedleChecksumSize
- n.AppendAtNs = util.BytesToUint64(bytes[tsOffset : tsOffset+TimestampSize])
- }
return nil
}
@@ -95,7 +101,6 @@ func (n *Needle) ReadData(r backend.BackendStorageFile, offset int64, size Size,
if err != nil {
return err
}
-
err = n.ReadBytes(bytes, offset, size, version)
if err == ErrorSizeMismatch && OffsetSize == 4 {
offset = offset + int64(MaxPossibleVolumeSize)