refactor
This commit is contained in:
@@ -34,15 +34,24 @@ func (n *Needle) Append(w backend.BackendStorageFile, version Version) (offset u
|
|||||||
|
|
||||||
switch version {
|
switch version {
|
||||||
case Version1:
|
case Version1:
|
||||||
return writeNeedleV1(w, n, offset, bytesBuffer)
|
size, actualSize, err = writeNeedleV1(n, offset, bytesBuffer)
|
||||||
case Version2:
|
case Version2:
|
||||||
return writeNeedleV2(w, n, offset, bytesBuffer)
|
size, actualSize, err = writeNeedleV2(n, offset, bytesBuffer)
|
||||||
case Version3:
|
case Version3:
|
||||||
return writeNeedleV3(w, n, offset, bytesBuffer)
|
size, actualSize, err = writeNeedleV3(n, offset, bytesBuffer)
|
||||||
default:
|
default:
|
||||||
err = fmt.Errorf("unsupported version: %d", version)
|
err = fmt.Errorf("unsupported version: %d", version)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if err == nil {
|
||||||
|
_, err = w.WriteAt(bytesBuffer.Bytes(), int64(offset))
|
||||||
|
if err != nil {
|
||||||
|
err = fmt.Errorf("failed to write %d bytes to %s at offset %d: %w", actualSize, w.Name(), offset, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return offset, size, actualSize, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func WriteNeedleBlob(w backend.BackendStorageFile, dataSlice []byte, size Size, appendAtNs uint64, version Version) (offset uint64, err error) {
|
func WriteNeedleBlob(w backend.BackendStorageFile, dataSlice []byte, size Size, appendAtNs uint64, version Version) (offset uint64, err error) {
|
||||||
|
|||||||
@@ -107,14 +107,13 @@ func TestWriteNeedle_CompatibilityWithLegacy(t *testing.T) {
|
|||||||
// New
|
// New
|
||||||
newBuf := &bytes.Buffer{}
|
newBuf := &bytes.Buffer{}
|
||||||
offset := uint64(0)
|
offset := uint64(0)
|
||||||
dummyWriter := &mockBackendWriter{buf: &bytes.Buffer{}} // not used for actual output
|
|
||||||
switch version {
|
switch version {
|
||||||
case Version1:
|
case Version1:
|
||||||
_, _, _, err = writeNeedleV1(dummyWriter, n, offset, newBuf)
|
_, _, err = writeNeedleV1(n, offset, newBuf)
|
||||||
case Version2:
|
case Version2:
|
||||||
_, _, _, err = writeNeedleV2(dummyWriter, n, offset, newBuf)
|
_, _, err = writeNeedleV2(n, offset, newBuf)
|
||||||
case Version3:
|
case Version3:
|
||||||
_, _, _, err = writeNeedleV3(dummyWriter, n, offset, newBuf)
|
_, _, err = writeNeedleV3(n, offset, newBuf)
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("writeNeedleV%d failed: %v", version, err)
|
t.Fatalf("writeNeedleV%d failed: %v", version, err)
|
||||||
|
|||||||
@@ -2,14 +2,12 @@ package needle
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"fmt"
|
|
||||||
|
|
||||||
"github.com/seaweedfs/seaweedfs/weed/storage/backend"
|
|
||||||
. "github.com/seaweedfs/seaweedfs/weed/storage/types"
|
. "github.com/seaweedfs/seaweedfs/weed/storage/types"
|
||||||
"github.com/seaweedfs/seaweedfs/weed/util"
|
"github.com/seaweedfs/seaweedfs/weed/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
func writeNeedleV1(w backend.BackendStorageFile, n *Needle, offset uint64, bytesBuffer *bytes.Buffer) (offsetOut uint64, size Size, actualSize int64, err error) {
|
func writeNeedleV1(n *Needle, offset uint64, bytesBuffer *bytes.Buffer) (size Size, actualSize int64, err error) {
|
||||||
bytesBuffer.Reset()
|
bytesBuffer.Reset()
|
||||||
header := make([]byte, NeedleHeaderSize)
|
header := make([]byte, NeedleHeaderSize)
|
||||||
CookieToBytes(header[0:CookieSize], n.Cookie)
|
CookieToBytes(header[0:CookieSize], n.Cookie)
|
||||||
@@ -24,10 +22,5 @@ func writeNeedleV1(w backend.BackendStorageFile, n *Needle, offset uint64, bytes
|
|||||||
util.Uint32toBytes(header[0:NeedleChecksumSize], uint32(n.Checksum))
|
util.Uint32toBytes(header[0:NeedleChecksumSize], uint32(n.Checksum))
|
||||||
bytesBuffer.Write(header[0 : NeedleChecksumSize+padding])
|
bytesBuffer.Write(header[0 : NeedleChecksumSize+padding])
|
||||||
|
|
||||||
_, err = w.WriteAt(bytesBuffer.Bytes(), int64(offset))
|
return size, actualSize, nil
|
||||||
if err != nil {
|
|
||||||
err = fmt.Errorf("failed to write %d bytes to %s at offset %d: %w", actualSize, w.Name(), offset, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return offset, size, actualSize, err
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,15 +2,13 @@ package needle
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"fmt"
|
|
||||||
"math"
|
"math"
|
||||||
|
|
||||||
"github.com/seaweedfs/seaweedfs/weed/storage/backend"
|
|
||||||
. "github.com/seaweedfs/seaweedfs/weed/storage/types"
|
. "github.com/seaweedfs/seaweedfs/weed/storage/types"
|
||||||
"github.com/seaweedfs/seaweedfs/weed/util"
|
"github.com/seaweedfs/seaweedfs/weed/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
func writeNeedleV2(w backend.BackendStorageFile, n *Needle, offset uint64, bytesBuffer *bytes.Buffer) (offsetOut uint64, size Size, actualSize int64, err error) {
|
func writeNeedleV2(n *Needle, offset uint64, bytesBuffer *bytes.Buffer) (size Size, actualSize int64, err error) {
|
||||||
bytesBuffer.Reset()
|
bytesBuffer.Reset()
|
||||||
header := make([]byte, NeedleHeaderSize+TimestampSize)
|
header := make([]byte, NeedleHeaderSize+TimestampSize)
|
||||||
CookieToBytes(header[0:CookieSize], n.Cookie)
|
CookieToBytes(header[0:CookieSize], n.Cookie)
|
||||||
@@ -79,10 +77,5 @@ func writeNeedleV2(w backend.BackendStorageFile, n *Needle, offset uint64, bytes
|
|||||||
|
|
||||||
size = Size(n.DataSize)
|
size = Size(n.DataSize)
|
||||||
actualSize = GetActualSize(n.Size, Version2)
|
actualSize = GetActualSize(n.Size, Version2)
|
||||||
_, err = w.WriteAt(bytesBuffer.Bytes(), int64(offset))
|
return size, actualSize, nil
|
||||||
if err != nil {
|
|
||||||
err = fmt.Errorf("failed to write %d bytes to %s at offset %d: %w", actualSize, w.Name(), offset, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return offset, size, actualSize, err
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,15 +2,13 @@ package needle
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"fmt"
|
|
||||||
"math"
|
"math"
|
||||||
|
|
||||||
"github.com/seaweedfs/seaweedfs/weed/storage/backend"
|
|
||||||
. "github.com/seaweedfs/seaweedfs/weed/storage/types"
|
. "github.com/seaweedfs/seaweedfs/weed/storage/types"
|
||||||
"github.com/seaweedfs/seaweedfs/weed/util"
|
"github.com/seaweedfs/seaweedfs/weed/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
func writeNeedleV3(w backend.BackendStorageFile, n *Needle, offset uint64, bytesBuffer *bytes.Buffer) (offsetOut uint64, size Size, actualSize int64, err error) {
|
func writeNeedleV3(n *Needle, offset uint64, bytesBuffer *bytes.Buffer) (size Size, actualSize int64, err error) {
|
||||||
bytesBuffer.Reset()
|
bytesBuffer.Reset()
|
||||||
header := make([]byte, NeedleHeaderSize+TimestampSize)
|
header := make([]byte, NeedleHeaderSize+TimestampSize)
|
||||||
CookieToBytes(header[0:CookieSize], n.Cookie)
|
CookieToBytes(header[0:CookieSize], n.Cookie)
|
||||||
@@ -80,10 +78,5 @@ func writeNeedleV3(w backend.BackendStorageFile, n *Needle, offset uint64, bytes
|
|||||||
|
|
||||||
size = Size(n.DataSize)
|
size = Size(n.DataSize)
|
||||||
actualSize = GetActualSize(n.Size, Version3)
|
actualSize = GetActualSize(n.Size, Version3)
|
||||||
_, err = w.WriteAt(bytesBuffer.Bytes(), int64(offset))
|
return size, actualSize, nil
|
||||||
if err != nil {
|
|
||||||
err = fmt.Errorf("failed to write %d bytes to %s at offset %d: %w", actualSize, w.Name(), offset, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return offset, size, actualSize, err
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user