diff --git a/weed/storage/needle/needle_write.go b/weed/storage/needle/needle_write.go index 0ed2d292a..dd8296b7a 100644 --- a/weed/storage/needle/needle_write.go +++ b/weed/storage/needle/needle_write.go @@ -32,23 +32,14 @@ func (n *Needle) Append(w backend.BackendStorageFile, version Version) (offset u buffer_pool.SyncPoolPutBuffer(bytesBuffer) }() - switch version { - case Version1: - size, actualSize, err = writeNeedleV1(n, offset, bytesBuffer) - case Version2: - size, actualSize, err = writeNeedleV2(n, offset, bytesBuffer) - case Version3: - size, actualSize, err = writeNeedleV3(n, offset, bytesBuffer) - default: - err = fmt.Errorf("unsupported version: %d", version) + size, actualSize, err = writeNeedleByVersion(version, n, offset, bytesBuffer) + if err != nil { 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) - } + _, 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 diff --git a/weed/storage/needle/needle_write_version.go b/weed/storage/needle/needle_write_version.go new file mode 100644 index 000000000..1a6c0bf78 --- /dev/null +++ b/weed/storage/needle/needle_write_version.go @@ -0,0 +1,23 @@ +package needle + +import ( + "bytes" + "fmt" + + . "github.com/seaweedfs/seaweedfs/weed/storage/types" +) + +func writeNeedleByVersion(version Version, n *Needle, offset uint64, bytesBuffer *bytes.Buffer) (size Size, actualSize int64, err error) { + // Switch logic moved from needle_write.go + switch version { + case Version1: + size, actualSize, err = writeNeedleV1(n, offset, bytesBuffer) + case Version2: + size, actualSize, err = writeNeedleV2(n, offset, bytesBuffer) + case Version3: + size, actualSize, err = writeNeedleV3(n, offset, bytesBuffer) + default: + err = fmt.Errorf("unsupported version: %d", version) + } + return +}