frostfs-node/pkg/services/object_manager/transport/object.go
Stanislav Bogatyrev b7b5079934 Add Inner Ring code
2020-07-24 17:07:37 +03:00

107 lines
2.6 KiB
Go

package transport
import (
"context"
"io"
"time"
"github.com/multiformats/go-multiaddr"
"github.com/nspcc-dev/neofs-api-go/object"
"github.com/nspcc-dev/neofs-api-go/refs"
"github.com/nspcc-dev/neofs-api-go/service"
)
type (
// ObjectTransport is an interface of the executor of object remote operations.
ObjectTransport interface {
Transport(context.Context, ObjectTransportParams)
}
// ObjectTransportParams groups the parameters of remote object operation.
ObjectTransportParams struct {
TransportInfo MetaInfo
TargetNode multiaddr.Multiaddr
ResultHandler ResultHandler
}
// ResultHandler is an interface of remote object operation's result handler.
ResultHandler interface {
HandleResult(context.Context, multiaddr.Multiaddr, interface{}, error)
}
// MetaInfo is an interface of the container of cross-operation values.
MetaInfo interface {
GetTTL() uint32
GetTimeout() time.Duration
service.SessionTokenSource
GetRaw() bool
Type() object.RequestType
service.BearerTokenSource
service.ExtendedHeadersSource
}
// SearchInfo is an interface of the container of object Search operation parameters.
SearchInfo interface {
MetaInfo
GetCID() refs.CID
GetQuery() []byte
}
// PutInfo is an interface of the container of object Put operation parameters.
PutInfo interface {
MetaInfo
GetHead() *object.Object
Payload() io.Reader
CopiesNumber() uint32
}
// AddressInfo is an interface of the container of object request by Address.
AddressInfo interface {
MetaInfo
GetAddress() refs.Address
}
// GetInfo is an interface of the container of object Get operation parameters.
GetInfo interface {
AddressInfo
}
// HeadInfo is an interface of the container of object Head operation parameters.
HeadInfo interface {
GetInfo
GetFullHeaders() bool
}
// RangeInfo is an interface of the container of object GetRange operation parameters.
RangeInfo interface {
AddressInfo
GetRange() object.Range
}
// RangeHashInfo is an interface of the container of object GetRangeHash operation parameters.
RangeHashInfo interface {
AddressInfo
GetRanges() []object.Range
GetSalt() []byte
}
)
const (
// KeyID is a filter key to object ID field.
KeyID = "ID"
// KeyTombstone is a filter key to tombstone header.
KeyTombstone = "TOMBSTONE"
// KeyStorageGroup is a filter key to storage group link.
KeyStorageGroup = "STORAGE_GROUP"
// KeyNoChildren is a filter key to objects w/o child links.
KeyNoChildren = "LEAF"
// KeyParent is a filter key to parent link.
KeyParent = "PARENT"
// KeyHasParent is a filter key to objects with parent link.
KeyHasParent = "HAS_PAR"
)