Browse Source

refactor

pull/6224/merge
chrislu 4 days ago
parent
commit
61c4f01e05
  1. 15
      weed/storage/needle/needle_write.go
  2. 7
      weed/storage/needle/needle_write_test.go
  3. 11
      weed/storage/needle/needle_write_v1.go
  4. 11
      weed/storage/needle/needle_write_v2.go
  5. 11
      weed/storage/needle/needle_write_v3.go

15
weed/storage/needle/needle_write.go

@ -34,15 +34,24 @@ func (n *Needle) Append(w backend.BackendStorageFile, version Version) (offset u
switch version {
case Version1:
return writeNeedleV1(w, n, offset, bytesBuffer)
size, actualSize, err = writeNeedleV1(n, offset, bytesBuffer)
case Version2:
return writeNeedleV2(w, n, offset, bytesBuffer)
size, actualSize, err = writeNeedleV2(n, offset, bytesBuffer)
case Version3:
return writeNeedleV3(w, n, offset, bytesBuffer)
size, actualSize, err = writeNeedleV3(n, offset, bytesBuffer)
default:
err = fmt.Errorf("unsupported version: %d", version)
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) {

7
weed/storage/needle/needle_write_test.go

@ -107,14 +107,13 @@ func TestWriteNeedle_CompatibilityWithLegacy(t *testing.T) {
// New
newBuf := &bytes.Buffer{}
offset := uint64(0)
dummyWriter := &mockBackendWriter{buf: &bytes.Buffer{}} // not used for actual output
switch version {
case Version1:
_, _, _, err = writeNeedleV1(dummyWriter, n, offset, newBuf)
_, _, err = writeNeedleV1(n, offset, newBuf)
case Version2:
_, _, _, err = writeNeedleV2(dummyWriter, n, offset, newBuf)
_, _, err = writeNeedleV2(n, offset, newBuf)
case Version3:
_, _, _, err = writeNeedleV3(dummyWriter, n, offset, newBuf)
_, _, err = writeNeedleV3(n, offset, newBuf)
}
if err != nil {
t.Fatalf("writeNeedleV%d failed: %v", version, err)

11
weed/storage/needle/needle_write_v1.go

@ -2,14 +2,12 @@ package needle
import (
"bytes"
"fmt"
"github.com/seaweedfs/seaweedfs/weed/storage/backend"
. "github.com/seaweedfs/seaweedfs/weed/storage/types"
"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()
header := make([]byte, NeedleHeaderSize)
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))
bytesBuffer.Write(header[0 : NeedleChecksumSize+padding])
_, 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
return size, actualSize, nil
}

11
weed/storage/needle/needle_write_v2.go

@ -2,15 +2,13 @@ package needle
import (
"bytes"
"fmt"
"math"
"github.com/seaweedfs/seaweedfs/weed/storage/backend"
. "github.com/seaweedfs/seaweedfs/weed/storage/types"
"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()
header := make([]byte, NeedleHeaderSize+TimestampSize)
CookieToBytes(header[0:CookieSize], n.Cookie)
@ -79,10 +77,5 @@ func writeNeedleV2(w backend.BackendStorageFile, n *Needle, offset uint64, bytes
size = Size(n.DataSize)
actualSize = GetActualSize(n.Size, Version2)
_, 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
return size, actualSize, nil
}

11
weed/storage/needle/needle_write_v3.go

@ -2,15 +2,13 @@ package needle
import (
"bytes"
"fmt"
"math"
"github.com/seaweedfs/seaweedfs/weed/storage/backend"
. "github.com/seaweedfs/seaweedfs/weed/storage/types"
"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()
header := make([]byte, NeedleHeaderSize+TimestampSize)
CookieToBytes(header[0:CookieSize], n.Cookie)
@ -80,10 +78,5 @@ func writeNeedleV3(w backend.BackendStorageFile, n *Needle, offset uint64, bytes
size = Size(n.DataSize)
actualSize = GetActualSize(n.Size, Version3)
_, 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
return size, actualSize, nil
}
Loading…
Cancel
Save