forked from TrueCloudLab/frostfs-node
[#1064] putsvc: Refactor distributed target
Extract object builder. Signed-off-by: Dmitrii Stepanov <d.stepanov@yadro.com>
This commit is contained in:
parent
92569b9bbf
commit
39da643354
3 changed files with 60 additions and 48 deletions
54
pkg/services/object/put/builder.go
Normal file
54
pkg/services/object/put/builder.go
Normal file
|
@ -0,0 +1,54 @@
|
|||
package putsvc
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
objectSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/transformer"
|
||||
)
|
||||
|
||||
var _ transformer.ChunkedObjectWriter = (*inMemoryObjectBuilder)(nil)
|
||||
|
||||
type inMemoryObjectBuilder struct {
|
||||
objectWriter transformer.ObjectWriter
|
||||
payload *payload
|
||||
|
||||
obj *objectSDK.Object
|
||||
}
|
||||
|
||||
func newInMemoryObjectBuilder(objectWriter transformer.ObjectWriter) *inMemoryObjectBuilder {
|
||||
return &inMemoryObjectBuilder{
|
||||
objectWriter: objectWriter,
|
||||
payload: getPayload(),
|
||||
}
|
||||
}
|
||||
|
||||
func (b *inMemoryObjectBuilder) Close(ctx context.Context) (*transformer.AccessIdentifiers, error) {
|
||||
defer func() {
|
||||
putPayload(b.payload)
|
||||
b.payload = nil
|
||||
}()
|
||||
|
||||
b.obj.SetPayload(b.payload.Data)
|
||||
|
||||
if err := b.objectWriter.WriteObject(ctx, b.obj); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
id, _ := b.obj.ID()
|
||||
return &transformer.AccessIdentifiers{
|
||||
SelfID: id,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (b *inMemoryObjectBuilder) Write(_ context.Context, p []byte) (int, error) {
|
||||
b.payload.Data = append(b.payload.Data, p...)
|
||||
|
||||
return len(p), nil
|
||||
}
|
||||
|
||||
func (b *inMemoryObjectBuilder) WriteHeader(_ context.Context, obj *objectSDK.Object) error {
|
||||
b.obj = obj
|
||||
|
||||
return nil
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue