WIP: Make Patch
method patch split-header #1697
5 changed files with 42 additions and 4 deletions
|
@ -846,6 +846,8 @@ type PatchObjectPrm struct {
|
|||
|
||||
ReplaceAttribute bool
|
||||
|
||||
NewSplitHeader *objectSDK.SplitHeader
|
||||
|
||||
PayloadPatches []PayloadPatch
|
||||
}
|
||||
|
||||
|
@ -876,7 +878,11 @@ func Patch(ctx context.Context, prm PatchObjectPrm) (*PatchRes, error) {
|
|||
return nil, fmt.Errorf("init payload reading: %w", err)
|
||||
}
|
||||
|
||||
if patcher.PatchAttributes(ctx, prm.NewAttributes, prm.ReplaceAttribute) {
|
||||
if patcher.PatchHeader(ctx, client.PatchHeaderPrm{
|
||||
NewSplitHeader: prm.NewSplitHeader,
|
||||
NewAttributes: prm.NewAttributes,
|
||||
ReplaceAttributes: prm.ReplaceAttribute,
|
||||
}) {
|
||||
for _, pp := range prm.PayloadPatches {
|
||||
payloadFile, err := os.OpenFile(pp.PayloadPath, os.O_RDONLY, os.ModePerm)
|
||||
if err != nil {
|
||||
|
|
|
@ -2,6 +2,7 @@ package object
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
|
@ -9,6 +10,7 @@ import (
|
|||
"git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/key"
|
||||
commonCmd "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/internal/common"
|
||||
objectV2 "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/object"
|
||||
cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id"
|
||||
objectSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
|
||||
oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
|
||||
|
@ -20,6 +22,7 @@ const (
|
|||
replaceAttrsFlagName = "replace-attrs"
|
||||
rangeFlagName = "range"
|
||||
payloadFlagName = "payload"
|
||||
splitHeaderFlagName = "split-header"
|
||||
)
|
||||
|
||||
var objectPatchCmd = &cobra.Command{
|
||||
|
@ -50,6 +53,7 @@ func initObjectPatchCmd() {
|
|||
flags.Bool(replaceAttrsFlagName, false, "Replace object attributes by new ones.")
|
||||
flags.StringSlice(rangeFlagName, []string{}, "Range to which patch payload is applied. Format: offset:length")
|
||||
flags.StringSlice(payloadFlagName, []string{}, "Path to file with patch payload.")
|
||||
flags.String(splitHeaderFlagName, "", "Path to binary or JSON-encoded split header")
|
||||
}
|
||||
|
||||
func patch(cmd *cobra.Command, _ []string) {
|
||||
|
@ -84,6 +88,8 @@ func patch(cmd *cobra.Command, _ []string) {
|
|||
prm.NewAttributes = newAttrs
|
||||
prm.ReplaceAttribute = replaceAttrs
|
||||
|
||||
prm.NewSplitHeader = parseSplitHeaderBinaryOrJSON(cmd)
|
||||
|
||||
for i := range ranges {
|
||||
prm.PayloadPatches = append(prm.PayloadPatches, internalclient.PayloadPatch{
|
||||
Range: ranges[i],
|
||||
|
@ -149,3 +155,22 @@ func patchPayloadPaths(cmd *cobra.Command) []string {
|
|||
v, _ := cmd.Flags().GetStringSlice(payloadFlagName)
|
||||
return v
|
||||
}
|
||||
|
||||
func parseSplitHeaderBinaryOrJSON(cmd *cobra.Command) *objectSDK.SplitHeader {
|
||||
path, _ := cmd.Flags().GetString(splitHeaderFlagName)
|
||||
if path == "" {
|
||||
return nil
|
||||
}
|
||||
|
||||
data, err := os.ReadFile(path)
|
||||
commonCmd.ExitOnErr(cmd, "read file error: %w", err)
|
||||
|
||||
splitHdrV2 := new(objectV2.SplitHeader)
|
||||
err = splitHdrV2.Unmarshal(data)
|
||||
if err != nil {
|
||||
err = splitHdrV2.UnmarshalJSON(data)
|
||||
commonCmd.ExitOnErr(cmd, "unmarshal error: %w", err)
|
||||
}
|
||||
|
||||
return objectSDK.NewSplitHeaderFromV2(splitHdrV2)
|
||||
}
|
||||
|
|
2
go.mod
2
go.mod
|
@ -2,6 +2,8 @@ module git.frostfs.info/TrueCloudLab/frostfs-node
|
|||
|
||||
go 1.22
|
||||
|
||||
replace git.frostfs.info/TrueCloudLab/frostfs-sdk-go v0.0.0-20250204075528-d759a0980331 => git.frostfs.info/aarifullin/frostfs-sdk-go v0.0.0-20250324143057-e275ec3f8068
|
||||
|
||||
|
||||
require (
|
||||
code.gitea.io/sdk/gitea v0.17.1
|
||||
git.frostfs.info/TrueCloudLab/frostfs-contract v0.21.0-rc.4
|
||||
|
|
4
go.sum
4
go.sum
|
@ -8,8 +8,6 @@ git.frostfs.info/TrueCloudLab/frostfs-locode-db v0.4.1-0.20240710074952-65761deb
|
|||
git.frostfs.info/TrueCloudLab/frostfs-locode-db v0.4.1-0.20240710074952-65761deb5c0d/go.mod h1:7ZZq8iguY7qFsXajdHGmZd2AW4QbucyrJwhbsRfOfek=
|
||||
git.frostfs.info/TrueCloudLab/frostfs-observability v0.0.0-20241112082307-f17779933e88 h1:9bvBDLApbbO5sXBKdODpE9tzy3HV99nXxkDWNn22rdI=
|
||||
git.frostfs.info/TrueCloudLab/frostfs-observability v0.0.0-20241112082307-f17779933e88/go.mod h1:kbwB4v2o6RyOfCo9kEFeUDZIX3LKhmS0yXPrtvzkQ1g=
|
||||
git.frostfs.info/TrueCloudLab/frostfs-sdk-go v0.0.0-20250204075528-d759a0980331 h1:cyWAo/wwYc4gwCBPxKJRXXcWNwHhaEIMlGjvkRPoIEc=
|
||||
git.frostfs.info/TrueCloudLab/frostfs-sdk-go v0.0.0-20250204075528-d759a0980331/go.mod h1:qruvF6zaznX0RDPpfOk0AMcyy5XO8rm+s+wyj5nSDnI=
|
||||
git.frostfs.info/TrueCloudLab/hrw v1.2.1 h1:ccBRK21rFvY5R1WotI6LNoPlizk7qSvdfD8lNIRudVc=
|
||||
git.frostfs.info/TrueCloudLab/hrw v1.2.1/go.mod h1:C1Ygde2n843yTZEQ0FP69jYiuaYV0kriLvP4zm8JuvM=
|
||||
git.frostfs.info/TrueCloudLab/multinet v0.0.0-20241015075604-6cb0d80e0972 h1:/960fWeyn2AFHwQUwDsWB3sbP6lTEnFnMzLMM6tx6N8=
|
||||
|
@ -24,6 +22,8 @@ git.frostfs.info/TrueCloudLab/tzhash v1.8.0 h1:UFMnUIk0Zh17m8rjGHJMqku2hCgaXDqjq
|
|||
git.frostfs.info/TrueCloudLab/tzhash v1.8.0/go.mod h1:dhY+oy274hV8wGvGL4MwwMpdL3GYvaX1a8GQZQHvlF8=
|
||||
git.frostfs.info/TrueCloudLab/zapjournald v0.0.0-20240124114243-cb2e66427d02 h1:HeY8n27VyPRQe49l/fzyVMkWEB2fsLJYKp64pwA7tz4=
|
||||
git.frostfs.info/TrueCloudLab/zapjournald v0.0.0-20240124114243-cb2e66427d02/go.mod h1:rQFJJdEOV7KbbMtQYR2lNfiZk+ONRDJSbMCTWxKt8Fw=
|
||||
git.frostfs.info/aarifullin/frostfs-sdk-go v0.0.0-20250324143057-e275ec3f8068 h1:WZ7PmRQ1xLttnkYUX4G0t1I/MvDHJZv7rcto4qtSchM=
|
||||
git.frostfs.info/aarifullin/frostfs-sdk-go v0.0.0-20250324143057-e275ec3f8068/go.mod h1:qruvF6zaznX0RDPpfOk0AMcyy5XO8rm+s+wyj5nSDnI=
|
||||
github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
|
||||
github.com/VictoriaMetrics/easyproto v0.1.4 h1:r8cNvo8o6sR4QShBXQd1bKw/VVLSQma/V2KhTBPf+Sc=
|
||||
github.com/VictoriaMetrics/easyproto v0.1.4/go.mod h1:QlGlzaJnDfFd8Lk6Ci/fuLxfTo3/GThPs2KH23mv710=
|
||||
|
|
|
@ -195,7 +195,12 @@ func (s *Streamer) Send(ctx context.Context, req *objectV2.PatchRequest) error {
|
|||
patch.FromV2(req.GetBody())
|
||||
|
||||
if !s.nonFirstSend {
|
||||
err := s.patcher.ApplyAttributesPatch(ctx, patch.NewAttributes, patch.ReplaceAttributes)
|
||||
err := s.patcher.ApplyHeaderPatch(ctx,
|
||||
patcher.ApplyHeaderPatchPrm{
|
||||
NewSplitHeader: patch.NewSplitHeader,
|
||||
NewAttributes: patch.NewAttributes,
|
||||
ReplaceAttributes: patch.ReplaceAttributes,
|
||||
})
|
||||
if err != nil {
|
||||
return fmt.Errorf("patch attributes: %w", err)
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue
Fix