|
|
@ -177,7 +177,7 @@ 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 |
|
|
@ -191,26 +191,10 @@ func ReadNeedleHeader(r backend.BackendStorageFile, version Version, offset int6 |
|
|
|
|
|
|
|
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) { |
|
|
|