From e71d681feee81dbe01c59dbc657f8ce85be3f415 Mon Sep 17 00:00:00 2001 From: chrislu Date: Wed, 11 Jun 2025 20:46:13 -0700 Subject: [PATCH] refactor --- weed/storage/needle/needle_read.go | 38 +++++++------------------ weed/storage/needle/needle_read_tail.go | 15 ++++++++++ 2 files changed, 26 insertions(+), 27 deletions(-) diff --git a/weed/storage/needle/needle_read.go b/weed/storage/needle/needle_read.go index 416c8f4cb..25eabb2b3 100644 --- a/weed/storage/needle/needle_read.go +++ b/weed/storage/needle/needle_read.go @@ -177,40 +177,24 @@ func (n *Needle) readNeedleDataVersion2NonData(bytes []byte) (index int, err err func ReadNeedleHeader(r backend.BackendStorageFile, version Version, offset int64) (n *Needle, bytes []byte, bodyLength int64, err error) { n = new(Needle) - if version == Version1 || version == Version2 || version == Version3 { - bytes = make([]byte, NeedleHeaderSize) - var count int - count, err = r.ReadAt(bytes, offset) - if err == io.EOF && count == NeedleHeaderSize { - err = nil - } - if count <= 0 || err != nil { - return nil, bytes, 0, err - } + bytes = make([]byte, NeedleHeaderSize) - n.ParseNeedleHeader(bytes) - bodyLength = NeedleBodyLength(n.Size, version) + var count int + count, err = r.ReadAt(bytes, offset) + if err == io.EOF && count == NeedleHeaderSize { + err = nil } + if count <= 0 || err != nil { + return nil, bytes, 0, err + } + + n.ParseNeedleHeader(bytes) + bodyLength = NeedleBodyLength(n.Size, version) return } -func PaddingLength(needleSize Size, version Version) Size { - if version == Version3 { - // this is same value as version2, but just listed here for clarity - return NeedlePaddingSize - ((NeedleHeaderSize + needleSize + NeedleChecksumSize + TimestampSize) % NeedlePaddingSize) - } - return NeedlePaddingSize - ((NeedleHeaderSize + needleSize + NeedleChecksumSize) % NeedlePaddingSize) -} - -func NeedleBodyLength(needleSize Size, version Version) int64 { - if version == Version3 { - return int64(needleSize) + NeedleChecksumSize + TimestampSize + int64(PaddingLength(needleSize, version)) - } - return int64(needleSize) + NeedleChecksumSize + int64(PaddingLength(needleSize, version)) -} - // n should be a needle already read the header // the input stream will read until next file entry func (n *Needle) ReadNeedleBody(r backend.BackendStorageFile, version Version, offset int64, bodyLength int64) (bytes []byte, err error) { diff --git a/weed/storage/needle/needle_read_tail.go b/weed/storage/needle/needle_read_tail.go index f53a5654f..7dc1340e6 100644 --- a/weed/storage/needle/needle_read_tail.go +++ b/weed/storage/needle/needle_read_tail.go @@ -33,3 +33,18 @@ func (n *Needle) readNeedleTail(needleBody []byte, version Version) error { } return nil } + +func PaddingLength(needleSize Size, version Version) Size { + if version == Version3 { + // this is same value as version2, but just listed here for clarity + return NeedlePaddingSize - ((NeedleHeaderSize + needleSize + NeedleChecksumSize + TimestampSize) % NeedlePaddingSize) + } + return NeedlePaddingSize - ((NeedleHeaderSize + needleSize + NeedleChecksumSize) % NeedlePaddingSize) +} + +func NeedleBodyLength(needleSize Size, version Version) int64 { + if version == Version3 { + return int64(needleSize) + NeedleChecksumSize + TimestampSize + int64(PaddingLength(needleSize, version)) + } + return int64(needleSize) + NeedleChecksumSize + int64(PaddingLength(needleSize, version)) +}