The Access Denied status may be received from APE due to exceeding the quota. In this situation, you need to return the appropriate status code. Signed-off-by: Roman Loginov <r.loginov@yadro.com>
133 lines
3.6 KiB
Go
133 lines
3.6 KiB
Go
package layer
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"io"
|
|
|
|
"git.frostfs.info/TrueCloudLab/frostfs-http-gw/utils"
|
|
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/bearer"
|
|
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container"
|
|
cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id"
|
|
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
|
|
oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
|
|
)
|
|
|
|
// PrmContainer groups parameters of FrostFS.Container operation.
|
|
type PrmContainer struct {
|
|
// Container identifier.
|
|
ContainerID cid.ID
|
|
}
|
|
|
|
// PrmAuth groups authentication parameters for the FrostFS operation.
|
|
type PrmAuth struct {
|
|
// Bearer token to be used for the operation. Overlaps PrivateKey. Optional.
|
|
BearerToken *bearer.Token
|
|
}
|
|
|
|
// PrmObjectHead groups parameters of FrostFS.HeadObject operation.
|
|
type PrmObjectHead struct {
|
|
// Authentication parameters.
|
|
PrmAuth
|
|
|
|
// Address to read the object header from.
|
|
Address oid.Address
|
|
}
|
|
|
|
// PrmObjectGet groups parameters of FrostFS.GetObject operation.
|
|
type PrmObjectGet struct {
|
|
// Authentication parameters.
|
|
PrmAuth
|
|
|
|
// Address to read the object header from.
|
|
Address oid.Address
|
|
}
|
|
|
|
// PrmObjectRange groups parameters of FrostFS.RangeObject operation.
|
|
type PrmObjectRange struct {
|
|
// Authentication parameters.
|
|
PrmAuth
|
|
|
|
// Address to read the object header from.
|
|
Address oid.Address
|
|
|
|
// Offset-length range of the object payload to be read.
|
|
PayloadRange [2]uint64
|
|
}
|
|
|
|
// Object represents FrostFS object.
|
|
type Object struct {
|
|
// Object header (doesn't contain payload).
|
|
Header object.Object
|
|
|
|
// Object payload part encapsulated in io.Reader primitive.
|
|
// Returns ErrAccessDenied on read access violation.
|
|
Payload io.ReadCloser
|
|
}
|
|
|
|
// PrmObjectCreate groups parameters of FrostFS.CreateObject operation.
|
|
type PrmObjectCreate struct {
|
|
// Authentication parameters.
|
|
PrmAuth
|
|
|
|
Object *object.Object
|
|
|
|
// Object payload encapsulated in io.Reader primitive.
|
|
Payload io.Reader
|
|
|
|
// Enables client side object preparing.
|
|
ClientCut bool
|
|
|
|
// Disables using Tillich-Zémor hash for payload.
|
|
WithoutHomomorphicHash bool
|
|
|
|
// Sets max buffer size to read payload.
|
|
BufferMaxSize uint64
|
|
}
|
|
|
|
// PrmObjectSearch groups parameters of FrostFS.sear SearchObjects operation.
|
|
type PrmObjectSearch struct {
|
|
// Authentication parameters.
|
|
PrmAuth
|
|
|
|
// Container to select the objects from.
|
|
Container cid.ID
|
|
|
|
Filters object.SearchFilters
|
|
}
|
|
|
|
type PrmInitMultiObjectReader struct {
|
|
// payload range
|
|
Off, Ln uint64
|
|
|
|
Addr oid.Address
|
|
Bearer *bearer.Token
|
|
}
|
|
|
|
type ResObjectSearch interface {
|
|
Read(buf []oid.ID) (int, error)
|
|
Iterate(f func(oid.ID) bool) error
|
|
Close()
|
|
}
|
|
|
|
var (
|
|
// ErrAccessDenied is returned from FrostFS in case of access violation.
|
|
ErrAccessDenied = errors.New("access denied")
|
|
// ErrGatewayTimeout is returned from FrostFS in case of timeout, deadline exceeded etc.
|
|
ErrGatewayTimeout = errors.New("gateway timeout")
|
|
// ErrQuotaLimitReached is returned from FrostFS in case of quota exceeded.
|
|
ErrQuotaLimitReached = errors.New("quota limit reached")
|
|
)
|
|
|
|
// FrostFS represents virtual connection to FrostFS network.
|
|
type FrostFS interface {
|
|
Container(context.Context, PrmContainer) (*container.Container, error)
|
|
HeadObject(context.Context, PrmObjectHead) (*object.Object, error)
|
|
GetObject(context.Context, PrmObjectGet) (*Object, error)
|
|
RangeObject(context.Context, PrmObjectRange) (io.ReadCloser, error)
|
|
CreateObject(context.Context, PrmObjectCreate) (oid.ID, error)
|
|
SearchObjects(context.Context, PrmObjectSearch) (ResObjectSearch, error)
|
|
InitMultiObjectReader(ctx context.Context, p PrmInitMultiObjectReader) (io.Reader, error)
|
|
|
|
utils.EpochInfoFetcher
|
|
}
|