aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorchrislu <chris.lu@gmail.com>2025-06-06 08:55:32 -0700
committerchrislu <chris.lu@gmail.com>2025-06-06 08:55:32 -0700
commit61c4f01e05b88253b3759eb18765f479f7c7c0e8 (patch)
tree0caa3dd16b435b956fc5ce1c2056c8d5705213bc
parentce51d601279f012d58edab0a5799a19ef0aa7e80 (diff)
downloadseaweedfs-61c4f01e05b88253b3759eb18765f479f7c7c0e8.tar.xz
seaweedfs-61c4f01e05b88253b3759eb18765f479f7c7c0e8.zip
refactor
-rw-r--r--weed/storage/needle/needle_write.go15
-rw-r--r--weed/storage/needle/needle_write_test.go7
-rw-r--r--weed/storage/needle/needle_write_v1.go11
-rw-r--r--weed/storage/needle/needle_write_v2.go11
-rw-r--r--weed/storage/needle/needle_write_v3.go11
5 files changed, 21 insertions, 34 deletions
diff --git a/weed/storage/needle/needle_write.go b/weed/storage/needle/needle_write.go
index 5fe9f6a79..0ed2d292a 100644
--- a/weed/storage/needle/needle_write.go
+++ b/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) {
diff --git a/weed/storage/needle/needle_write_test.go b/weed/storage/needle/needle_write_test.go
index 713acbe02..5ddc040fb 100644
--- a/weed/storage/needle/needle_write_test.go
+++ b/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)
diff --git a/weed/storage/needle/needle_write_v1.go b/weed/storage/needle/needle_write_v1.go
index db912ee0f..67ebae4c3 100644
--- a/weed/storage/needle/needle_write_v1.go
+++ b/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
}
diff --git a/weed/storage/needle/needle_write_v2.go b/weed/storage/needle/needle_write_v2.go
index d332bc1c2..82cb50e88 100644
--- a/weed/storage/needle/needle_write_v2.go
+++ b/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
}
diff --git a/weed/storage/needle/needle_write_v3.go b/weed/storage/needle/needle_write_v3.go
index 6927a1431..20a6256cc 100644
--- a/weed/storage/needle/needle_write_v3.go
+++ b/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
}