layer

package
v0.0.0-...-6eb7966 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 20, 2023 License: AGPL-3.0 Imports: 46 Imported by: 0

Documentation

Index

Constants

View Source
const (
	AESEncryptionAlgorithm       = "AES256"
	AESKeySize                   = 32
	AttributeEncryptionAlgorithm = api.FrostFSSystemMetadataPrefix + "Algorithm"
	AttributeDecryptedSize       = api.FrostFSSystemMetadataPrefix + "Decrypted-Size"
	AttributeHMACSalt            = api.FrostFSSystemMetadataPrefix + "HMAC-Salt"
	AttributeHMACKey             = api.FrostFSSystemMetadataPrefix + "HMAC-Key"

	AttributeFrostfsCopiesNumber = "frostfs-copies-number" // such format to match X-Amz-Meta-Frostfs-Copies-Number header
)
View Source
const (
	UploadIDAttributeName         = "S3-Upload-Id"
	UploadPartNumberAttributeName = "S3-Upload-Part-Number"
	UploadCompletedParts          = "S3-Completed-Parts"

	MaxSizeUploadsList  = 1000
	MaxSizePartsList    = 1000
	UploadMinPartNumber = 1
	UploadMaxPartNumber = 10000
)
View Source
const (
	AttributeComplianceMode  = ".s3-compliance-mode"
	AttributeExpirationEpoch = "__NEOFS__EXPIRATION_EPOCH"
)
View Source
const (
	AttributeLockEnabled = "LockEnabled"
)
View Source
const PathSeparator = string(os.PathSeparator)

PathSeparator is a path components separator string.

Variables

View Source
var (
	// ErrNodeNotFound is returned from Tree service in case of not found error.
	ErrNodeNotFound = errors.New("not found")

	// ErrNodeAccessDenied is returned from Tree service in case of access denied error.
	ErrNodeAccessDenied = errors.New("access denied")

	// ErrNoNodeToRemove is returned from Tree service in case of the lack of node with OID to remove.
	ErrNoNodeToRemove = errors.New("no node to remove")
)
View Source
var ErrAccessDenied = errors.New("access denied")

ErrAccessDenied is returned from FrostFS in case of access violation.

Functions

func FormEncryptionInfo

func FormEncryptionInfo(headers map[string]string) encryption.ObjectEncryption

func GetBoxData

func GetBoxData(ctx context.Context) (*accessbox.Box, error)

GetBoxData extracts accessbox.Box from context.

func IsAuthenticatedRequest

func IsAuthenticatedRequest(ctx context.Context) bool

IsAuthenticatedRequest checks if access box exists in the current request.

func IsSystemHeader

func IsSystemHeader(key string) bool

func MimeByFilePath

func MimeByFilePath(path string) string

MimeByFilePath detect mime type by file path extension.

func NameFromString

func NameFromString(name string) (string, string)

NameFromString splits name into a base file name and a directory path.

func TimeNow

func TimeNow(ctx context.Context) time.Time

TimeNow returns client time from request or time.Now().

Types

type AnonymousKey

type AnonymousKey struct {
	Key *keys.PrivateKey
}

AnonymousKey contains data for anonymous requests.

type BucketACL

type BucketACL struct {
	Info *data.BucketInfo
	EACL *eacl.Table
}

BucketACL extends BucketInfo by eacl.Table.

type BucketResolver

type BucketResolver interface {
	Resolve(ctx context.Context, name string) (cid.ID, error)
}

type Cache

type Cache struct {
	// contains filtered or unexported fields
}

func NewCache

func NewCache(cfg *CachesConfig) *Cache

func (*Cache) CleanListCacheEntriesContainingObject

func (c *Cache) CleanListCacheEntriesContainingObject(objectName string, cnrID cid.ID)

func (*Cache) DeleteBucket

func (c *Cache) DeleteBucket(name string)

func (*Cache) DeleteCORS

func (c *Cache) DeleteCORS(bktInfo *data.BucketInfo)

func (*Cache) DeleteObject

func (c *Cache) DeleteObject(addr oid.Address)

func (*Cache) DeleteObjectName

func (c *Cache) DeleteObjectName(cnrID cid.ID, bktName, objName string)

func (*Cache) DeleteTagging

func (c *Cache) DeleteTagging(key string)

func (*Cache) GetBucket

func (c *Cache) GetBucket(name string) *data.BucketInfo

func (*Cache) GetCORS

func (c *Cache) GetCORS(owner user.ID, bkt *data.BucketInfo) *data.CORSConfiguration

func (*Cache) GetLastObject

func (c *Cache) GetLastObject(owner user.ID, bktName, objName string) *data.ExtendedObjectInfo

func (*Cache) GetList

func (c *Cache) GetList(owner user.ID, key cache.ObjectsListKey) []*data.NodeVersion

func (*Cache) GetLockInfo

func (c *Cache) GetLockInfo(owner user.ID, key string) *data.LockInfo

func (*Cache) GetNotificationConfiguration

func (c *Cache) GetNotificationConfiguration(owner user.ID, bktInfo *data.BucketInfo) *data.NotificationConfiguration

func (*Cache) GetObject

func (c *Cache) GetObject(owner user.ID, addr oid.Address) *data.ExtendedObjectInfo

func (*Cache) GetSettings

func (c *Cache) GetSettings(owner user.ID, bktInfo *data.BucketInfo) *data.BucketSettings

func (*Cache) GetTagging

func (c *Cache) GetTagging(owner user.ID, key string) map[string]string

func (*Cache) PutBucket

func (c *Cache) PutBucket(bktInfo *data.BucketInfo)

func (*Cache) PutCORS

func (c *Cache) PutCORS(owner user.ID, bkt *data.BucketInfo, cors *data.CORSConfiguration)

func (*Cache) PutList

func (c *Cache) PutList(owner user.ID, key cache.ObjectsListKey, list []*data.NodeVersion)

func (*Cache) PutLockInfo

func (c *Cache) PutLockInfo(owner user.ID, key string, lockInfo *data.LockInfo)

func (*Cache) PutNotificationConfiguration

func (c *Cache) PutNotificationConfiguration(owner user.ID, bktInfo *data.BucketInfo, configuration *data.NotificationConfiguration)

func (*Cache) PutObject

func (c *Cache) PutObject(owner user.ID, extObjInfo *data.ExtendedObjectInfo)

func (*Cache) PutObjectWithName

func (c *Cache) PutObjectWithName(owner user.ID, extObjInfo *data.ExtendedObjectInfo)

func (*Cache) PutSettings

func (c *Cache) PutSettings(owner user.ID, bktInfo *data.BucketInfo, settings *data.BucketSettings)

func (*Cache) PutTagging

func (c *Cache) PutTagging(owner user.ID, key string, tags map[string]string)

type CachesConfig

type CachesConfig struct {
	Logger        *zap.Logger
	Objects       *cache.Config
	ObjectsList   *cache.Config
	Names         *cache.Config
	Buckets       *cache.Config
	System        *cache.Config
	AccessControl *cache.Config
}

CachesConfig contains params for caches.

func DefaultCachesConfigs

func DefaultCachesConfigs(logger *zap.Logger) *CachesConfig

DefaultCachesConfigs returns filled configs.

type Client

type Client interface {
	Initialize(ctx context.Context, c EventListener) error
	EphemeralKey() *keys.PublicKey

	GetBucketSettings(ctx context.Context, bktInfo *data.BucketInfo) (*data.BucketSettings, error)
	PutBucketSettings(ctx context.Context, p *PutSettingsParams) error

	PutBucketCORS(ctx context.Context, p *PutCORSParams) error
	GetBucketCORS(ctx context.Context, bktInfo *data.BucketInfo) (*data.CORSConfiguration, error)
	DeleteBucketCORS(ctx context.Context, bktInfo *data.BucketInfo) error

	ListBuckets(ctx context.Context) ([]*data.BucketInfo, error)
	GetBucketInfo(ctx context.Context, name string) (*data.BucketInfo, error)
	GetBucketACL(ctx context.Context, bktInfo *data.BucketInfo) (*BucketACL, error)
	PutBucketACL(ctx context.Context, p *PutBucketACLParams) error
	CreateBucket(ctx context.Context, p *CreateBucketParams) (*data.BucketInfo, error)
	DeleteBucket(ctx context.Context, p *DeleteBucketParams) error

	GetObject(ctx context.Context, p *GetObjectParams) error
	GetObjectInfo(ctx context.Context, p *HeadObjectParams) (*data.ObjectInfo, error)
	GetExtendedObjectInfo(ctx context.Context, p *HeadObjectParams) (*data.ExtendedObjectInfo, error)

	GetLockInfo(ctx context.Context, obj *ObjectVersion) (*data.LockInfo, error)
	PutLockInfo(ctx context.Context, p *PutLockInfoParams) error

	GetBucketTagging(ctx context.Context, bktInfo *data.BucketInfo) (map[string]string, error)
	PutBucketTagging(ctx context.Context, bktInfo *data.BucketInfo, tagSet map[string]string) error
	DeleteBucketTagging(ctx context.Context, bktInfo *data.BucketInfo) error

	GetObjectTagging(ctx context.Context, p *GetObjectTaggingParams) (string, map[string]string, error)
	PutObjectTagging(ctx context.Context, p *PutObjectTaggingParams) (*data.NodeVersion, error)
	DeleteObjectTagging(ctx context.Context, p *ObjectVersion) (*data.NodeVersion, error)

	PutObject(ctx context.Context, p *PutObjectParams) (*data.ExtendedObjectInfo, error)

	CopyObject(ctx context.Context, p *CopyObjectParams) (*data.ExtendedObjectInfo, error)

	ListObjectsV1(ctx context.Context, p *ListObjectsParamsV1) (*ListObjectsInfoV1, error)
	ListObjectsV2(ctx context.Context, p *ListObjectsParamsV2) (*ListObjectsInfoV2, error)
	ListObjectVersions(ctx context.Context, p *ListObjectVersionsParams) (*ListObjectVersionsInfo, error)

	DeleteObjects(ctx context.Context, p *DeleteObjectParams) []*VersionedObject

	CreateMultipartUpload(ctx context.Context, p *CreateMultipartParams) error
	CompleteMultipartUpload(ctx context.Context, p *CompleteMultipartParams) (*UploadData, *data.ExtendedObjectInfo, error)
	UploadPart(ctx context.Context, p *UploadPartParams) (string, error)
	UploadPartCopy(ctx context.Context, p *UploadCopyParams) (*data.ObjectInfo, error)
	ListMultipartUploads(ctx context.Context, p *ListMultipartUploadsParams) (*ListMultipartUploadsInfo, error)
	AbortMultipartUpload(ctx context.Context, p *UploadInfoParams) error
	ListParts(ctx context.Context, p *ListPartsParams) (*ListPartsInfo, error)

	PutBucketNotificationConfiguration(ctx context.Context, p *PutBucketNotificationConfigurationParams) error
	GetBucketNotificationConfiguration(ctx context.Context, bktInfo *data.BucketInfo) (*data.NotificationConfiguration, error)

	// GetObjectTaggingAndLock unifies GetObjectTagging and GetLock methods in single tree service invocation.
	GetObjectTaggingAndLock(ctx context.Context, p *ObjectVersion, nodeVersion *data.NodeVersion) (map[string]string, *data.LockInfo, error)
}

Client provides S3 API client interface.

func NewLayer

func NewLayer(log *zap.Logger, frostFS FrostFS, config *Config) Client

NewLayer creates an instance of a layer. It checks credentials and establishes gRPC connection with the node.

type CompleteMultipartParams

type CompleteMultipartParams struct {
	Info  *UploadInfoParams
	Parts []*CompletedPart
}

type CompletedPart

type CompletedPart struct {
	ETag       string
	PartNumber int
}

type Config

type Config struct {
	ChainAddress string
	Caches       *CachesConfig
	AnonKey      AnonymousKey
	Resolver     BucketResolver
	TreeService  TreeService
}

type CopyObjectParams

type CopyObjectParams struct {
	SrcObject   *data.ObjectInfo
	ScrBktInfo  *data.BucketInfo
	DstBktInfo  *data.BucketInfo
	DstObject   string
	SrcSize     int64
	Header      map[string]string
	Range       *RangeParams
	Lock        *data.ObjectLock
	Encryption  encryption.Params
	CopiesNuber uint32
}

CopyObjectParams stores object copy request parameters.

type CreateBucketParams

type CreateBucketParams struct {
	Name                     string
	Policy                   netmap.PlacementPolicy
	EACL                     *eacl.Table
	SessionContainerCreation *session.Container
	SessionEACL              *session.Container
	LocationConstraint       string
	ObjectLockEnabled        bool
}

CreateBucketParams stores bucket create request parameters.

type CreateMultipartParams

type CreateMultipartParams struct {
	Info         *UploadInfoParams
	Header       map[string]string
	Data         *UploadData
	CopiesNumber uint32
}

type DeleteBucketParams

type DeleteBucketParams struct {
	BktInfo      *data.BucketInfo
	SessionToken *session.Container
}

DeleteBucketParams stores delete bucket request parameters.

type DeleteObjectParams

type DeleteObjectParams struct {
	BktInfo  *data.BucketInfo
	Objects  []*VersionedObject
	Settings *data.BucketSettings
}

type EncryptedPart

type EncryptedPart struct {
	Part
	EncryptedSize int64
}

type EventListener

type EventListener interface {
	Subscribe(context.Context, string, MsgHandler) error
	Listen(context.Context)
}

type FrostFS

type FrostFS interface {
	// CreateContainer creates and saves parameterized container in FrostFS.
	// It sets 'Timestamp' attribute to the current time.
	// It returns the ID of the saved container.
	//
	// Created container is public with enabled ACL extension.
	//
	// It returns exactly one non-zero value. It returns any error encountered which
	// prevented the container from being created.
	CreateContainer(context.Context, PrmContainerCreate) (cid.ID, error)

	// Container reads a container from FrostFS by ID.
	//
	// It returns exactly one non-nil value. It returns any error encountered which
	// prevented the container from being read.
	Container(context.Context, cid.ID) (*container.Container, error)

	// UserContainers reads a list of the containers owned by the specified user.
	//
	// It returns exactly one non-nil value. It returns any error encountered which
	// prevented the containers from being listed.
	UserContainers(context.Context, user.ID) ([]cid.ID, error)

	// SetContainerEACL saves the eACL table of the container in FrostFS. The
	// extended ACL is modified within session if session token is not nil.
	//
	// It returns any error encountered which prevented the eACL from being saved.
	SetContainerEACL(context.Context, eacl.Table, *session.Container) error

	// ContainerEACL reads the container eACL from FrostFS by the container ID.
	//
	// It returns exactly one non-nil value. It returns any error encountered which
	// prevented the eACL from being read.
	ContainerEACL(context.Context, cid.ID) (*eacl.Table, error)

	// DeleteContainer marks the container to be removed from FrostFS by ID.
	// Request is sent within session if the session token is specified.
	// Successful return does not guarantee actual removal.
	//
	// It returns any error encountered which prevented the removal request from being sent.
	DeleteContainer(context.Context, cid.ID, *session.Container) error

	// ReadObject reads a part of the object from the FrostFS container by identifier.
	// Exact part is returned according to the parameters:
	//   * with header only: empty payload (both in-mem and reader parts are nil);
	//   * with payload only: header is nil (zero range means full payload);
	//   * with header and payload: full in-mem object, payload reader is nil.
	//
	// WithHeader or WithPayload is true. Range length is positive if offset is positive.
	//
	// Payload reader should be closed if it is no longer needed.
	//
	// It returns ErrAccessDenied on read access violation.
	//
	// It returns exactly one non-nil value. It returns any error encountered which
	// prevented the object header from being read.
	ReadObject(context.Context, PrmObjectRead) (*ObjectPart, error)

	// CreateObject creates and saves a parameterized object in the FrostFS container.
	// It sets 'Timestamp' attribute to the current time.
	// It returns the ID of the saved object.
	//
	// Creation time should be written into the object (UTC).
	//
	// It returns ErrAccessDenied on write access violation.
	//
	// It returns exactly one non-zero value. It returns any error encountered which
	// prevented the container from being created.
	CreateObject(context.Context, PrmObjectCreate) (oid.ID, error)

	// DeleteObject marks the object to be removed from the FrostFS container by identifier.
	// Successful return does not guarantee actual removal.
	//
	// It returns ErrAccessDenied on remove access violation.
	//
	// It returns any error encountered which prevented the removal request from being sent.
	DeleteObject(context.Context, PrmObjectDelete) error

	// TimeToEpoch computes current epoch and the epoch that corresponds to the provided now and future time.
	// Note:
	// * future time must be after the now
	// * future time will be ceil rounded to match epoch
	//
	// It returns any error encountered which prevented computing epochs.
	TimeToEpoch(ctx context.Context, now time.Time, future time.Time) (uint64, uint64, error)
}

FrostFS represents virtual connection to FrostFS network.

type GetObjectParams

type GetObjectParams struct {
	Range      *RangeParams
	ObjectInfo *data.ObjectInfo
	BucketInfo *data.BucketInfo
	Writer     io.Writer
	Encryption encryption.Params
}

GetObjectParams stores object get request parameters.

type GetObjectTaggingParams

type GetObjectTaggingParams struct {
	ObjectVersion *ObjectVersion

	// NodeVersion can be nil. If not nil we save one request to tree service.
	NodeVersion *data.NodeVersion // optional
}

type HeadObjectParams

type HeadObjectParams struct {
	BktInfo   *data.BucketInfo
	Object    string
	VersionID string
}

HeadObjectParams stores object head request parameters.

type ListMultipartUploadsInfo

type ListMultipartUploadsInfo struct {
	Prefixes           []string
	Uploads            []*UploadInfo
	IsTruncated        bool
	NextKeyMarker      string
	NextUploadIDMarker string
}

type ListMultipartUploadsParams

type ListMultipartUploadsParams struct {
	Bkt            *data.BucketInfo
	Delimiter      string
	EncodingType   string
	KeyMarker      string
	MaxUploads     int
	Prefix         string
	UploadIDMarker string
}

type ListObjectVersionsInfo

type ListObjectVersionsInfo struct {
	CommonPrefixes      []string
	IsTruncated         bool
	KeyMarker           string
	NextKeyMarker       string
	NextVersionIDMarker string
	Version             []*data.ExtendedObjectInfo
	DeleteMarker        []*data.ExtendedObjectInfo
	VersionIDMarker     string
}

ListObjectVersionsInfo stores info and list of objects versions.

type ListObjectVersionsParams

type ListObjectVersionsParams struct {
	BktInfo         *data.BucketInfo
	Delimiter       string
	KeyMarker       string
	MaxKeys         int
	Prefix          string
	VersionIDMarker string
	Encode          string
}

ListObjectVersionsParams stores list objects versions parameters.

type ListObjectsInfo

type ListObjectsInfo struct {
	Prefixes    []string
	Objects     []*data.ObjectInfo
	IsTruncated bool
}

ListObjectsInfo contains common fields of data for ListObjectsV1 and ListObjectsV2.

type ListObjectsInfoV1

type ListObjectsInfoV1 struct {
	ListObjectsInfo
	NextMarker string
}

ListObjectsInfoV1 holds data which ListObjectsV1 returns.

type ListObjectsInfoV2

type ListObjectsInfoV2 struct {
	ListObjectsInfo
	NextContinuationToken string
}

ListObjectsInfoV2 holds data which ListObjectsV2 returns.

type ListObjectsParamsCommon

type ListObjectsParamsCommon struct {
	BktInfo   *data.BucketInfo
	Delimiter string
	Encode    string
	MaxKeys   int
	Prefix    string
}

ListObjectsParamsCommon contains common parameters for ListObjectsV1 and ListObjectsV2.

type ListObjectsParamsV1

type ListObjectsParamsV1 struct {
	ListObjectsParamsCommon
	Marker string
}

ListObjectsParamsV1 contains params for ListObjectsV1.

type ListObjectsParamsV2

type ListObjectsParamsV2 struct {
	ListObjectsParamsCommon
	ContinuationToken string
	StartAfter        string
	FetchOwner        bool
}

ListObjectsParamsV2 contains params for ListObjectsV2.

type ListPartsInfo

type ListPartsInfo struct {
	Parts                []*Part
	Owner                user.ID
	NextPartNumberMarker int
	IsTruncated          bool
}

type ListPartsParams

type ListPartsParams struct {
	Info             *UploadInfoParams
	MaxParts         int
	PartNumberMarker int
}

type MsgHandler

type MsgHandler interface {
	HandleMessage(context.Context, *nats.Msg) error
}

type MsgHandlerFunc

type MsgHandlerFunc func(context.Context, *nats.Msg) error

func (MsgHandlerFunc) HandleMessage

func (f MsgHandlerFunc) HandleMessage(ctx context.Context, msg *nats.Msg) error

type ObjectPart

type ObjectPart struct {
	// Object header with optional in-memory payload part.
	Head *object.Object

	// Object payload part encapsulated in io.Reader primitive.
	// Returns ErrAccessDenied on read access violation.
	Payload io.ReadCloser
}

ObjectPart represents partially read FrostFS object.

type ObjectVersion

type ObjectVersion struct {
	BktInfo               *data.BucketInfo
	ObjectName            string
	VersionID             string
	NoErrorOnDeleteMarker bool
}

ObjectVersion stores object version info.

type Part

type Part struct {
	ETag         string
	LastModified string
	PartNumber   int
	Size         int64
}

func ParseCompletedPartHeader

func ParseCompletedPartHeader(hdr string) (*Part, error)

type PrmAuth

type PrmAuth struct {
	// Bearer token to be used for the operation. Overlaps PrivateKey. Optional.
	BearerToken *bearer.Token

	// Private key used for the operation if BearerToken is missing (in this case non-nil).
	PrivateKey *ecdsa.PrivateKey
}

PrmAuth groups authentication parameters for the FrostFS operation.

type PrmContainerCreate

type PrmContainerCreate struct {
	// FrostFS identifier of the container creator.
	Creator user.ID

	// Container placement policy.
	Policy netmap.PlacementPolicy

	// Name for the container.
	Name string

	// CreationTime value for Timestamp attribute
	CreationTime time.Time

	// Token of the container's creation session. Nil means session absence.
	SessionToken *session.Container

	// Basic ACL of the container.
	BasicACL acl.Basic

	// Attributes for optional parameters.
	AdditionalAttributes [][2]string
}

PrmContainerCreate groups parameters of FrostFS.CreateContainer operation.

type PrmObjectCreate

type PrmObjectCreate struct {
	// Authentication parameters.
	PrmAuth

	// Container to store the object.
	Container cid.ID

	// FrostFS identifier of the object creator.
	Creator user.ID

	// Key-value object attributes.
	Attributes [][2]string

	// Value for Timestamp attribute (optional).
	CreationTime time.Time

	// List of ids to lock (optional).
	Locks []oid.ID

	// Full payload size (optional).
	PayloadSize uint64

	// Associated filepath (optional).
	Filepath string

	// Object payload encapsulated in io.Reader primitive.
	Payload io.Reader

	// Number of object copies that is enough to consider put successful.
	CopiesNumber uint32
}

PrmObjectCreate groups parameters of FrostFS.CreateObject operation.

type PrmObjectDelete

type PrmObjectDelete struct {
	// Authentication parameters.
	PrmAuth

	// Container to delete the object from.
	Container cid.ID

	// Identifier of the removed object.
	Object oid.ID
}

PrmObjectDelete groups parameters of FrostFS.DeleteObject operation.

type PrmObjectRead

type PrmObjectRead struct {
	// Authentication parameters.
	PrmAuth

	// Container to read the object header from.
	Container cid.ID

	// ID of the object for which to read the header.
	Object oid.ID

	// Flag to read object header.
	WithHeader bool

	// Flag to read object payload. False overlaps payload range.
	WithPayload bool

	// Offset-length range of the object payload to be read.
	PayloadRange [2]uint64
}

PrmObjectRead groups parameters of FrostFS.ReadObject operation.

type PutBucketACLParams

type PutBucketACLParams struct {
	BktInfo      *data.BucketInfo
	EACL         *eacl.Table
	SessionToken *session.Container
}

PutBucketACLParams stores put bucket acl request parameters.

type PutBucketNotificationConfigurationParams

type PutBucketNotificationConfigurationParams struct {
	RequestInfo   *api.ReqInfo
	BktInfo       *data.BucketInfo
	Configuration *data.NotificationConfiguration
	CopiesNumber  uint32
}

type PutCORSParams

type PutCORSParams struct {
	BktInfo      *data.BucketInfo
	Reader       io.Reader
	CopiesNumber uint32
}

PutCORSParams stores PutCORS request parameters.

type PutLockInfoParams

type PutLockInfoParams struct {
	ObjVersion   *ObjectVersion
	NewLock      *data.ObjectLock
	CopiesNumber uint32
	NodeVersion  *data.NodeVersion // optional
}

type PutObjectParams

type PutObjectParams struct {
	BktInfo      *data.BucketInfo
	Object       string
	Size         int64
	Reader       io.Reader
	Header       map[string]string
	Lock         *data.ObjectLock
	Encryption   encryption.Params
	CopiesNumber uint32
}

PutObjectParams stores object put request parameters.

type PutObjectTaggingParams

type PutObjectTaggingParams struct {
	ObjectVersion *ObjectVersion
	TagSet        map[string]string

	// NodeVersion can be nil. If not nil we save one request to tree service.
	NodeVersion *data.NodeVersion // optional
}

type PutSettingsParams

type PutSettingsParams struct {
	BktInfo  *data.BucketInfo
	Settings *data.BucketSettings
}

PutSettingsParams stores object copy request parameters.

type RangeParams

type RangeParams struct {
	Start uint64
	End   uint64
}

RangeParams stores range header request parameters.

type TestFrostFS

type TestFrostFS struct {
	FrostFS
	// contains filtered or unexported fields
}

func NewTestFrostFS

func NewTestFrostFS() *TestFrostFS

func (*TestFrostFS) AddObject

func (t *TestFrostFS) AddObject(key string, obj *object.Object)

func (*TestFrostFS) AllObjects

func (t *TestFrostFS) AllObjects(cnrID cid.ID) []oid.ID

func (*TestFrostFS) Container

func (t *TestFrostFS) Container(_ context.Context, id cid.ID) (*container.Container, error)

func (*TestFrostFS) ContainerEACL

func (t *TestFrostFS) ContainerEACL(_ context.Context, cnrID cid.ID) (*eacl.Table, error)

func (*TestFrostFS) ContainerID

func (t *TestFrostFS) ContainerID(name string) (cid.ID, error)

func (*TestFrostFS) CreateContainer

func (t *TestFrostFS) CreateContainer(_ context.Context, prm PrmContainerCreate) (cid.ID, error)

func (*TestFrostFS) CreateObject

func (t *TestFrostFS) CreateObject(ctx context.Context, prm PrmObjectCreate) (oid.ID, error)

func (*TestFrostFS) CurrentEpoch

func (t *TestFrostFS) CurrentEpoch() uint64

func (*TestFrostFS) DeleteContainer

func (t *TestFrostFS) DeleteContainer(_ context.Context, cnrID cid.ID, _ *session.Container) error

func (*TestFrostFS) DeleteObject

func (t *TestFrostFS) DeleteObject(ctx context.Context, prm PrmObjectDelete) error

func (*TestFrostFS) Objects

func (t *TestFrostFS) Objects() []*object.Object

func (*TestFrostFS) ReadObject

func (t *TestFrostFS) ReadObject(ctx context.Context, prm PrmObjectRead) (*ObjectPart, error)

func (*TestFrostFS) SetContainerEACL

func (t *TestFrostFS) SetContainerEACL(_ context.Context, table eacl.Table, _ *session.Container) error

func (*TestFrostFS) TimeToEpoch

func (t *TestFrostFS) TimeToEpoch(_ context.Context, now, futureTime time.Time) (uint64, uint64, error)

func (*TestFrostFS) UserContainers

func (t *TestFrostFS) UserContainers(_ context.Context, _ user.ID) ([]cid.ID, error)

type TreeService

type TreeService interface {
	// PutSettingsNode update or create new settings node in tree service.
	PutSettingsNode(ctx context.Context, bktInfo *data.BucketInfo, settings *data.BucketSettings) error

	// GetSettingsNode retrieves the settings node from the tree service and form data.BucketSettings.
	//
	// If tree node is not found returns ErrNodeNotFound error.
	GetSettingsNode(ctx context.Context, bktInfo *data.BucketInfo) (*data.BucketSettings, error)

	// GetNotificationConfigurationNode gets an object id that corresponds to object with bucket CORS.
	//
	// If tree node is not found returns ErrNodeNotFound error.
	GetNotificationConfigurationNode(ctx context.Context, bktInfo *data.BucketInfo) (oid.ID, error)

	// PutNotificationConfigurationNode puts a node to a system tree
	// and returns objectID of a previous notif config which must be deleted in FrostFS.
	//
	// If object id to remove is not found returns ErrNoNodeToRemove error.
	PutNotificationConfigurationNode(ctx context.Context, bktInfo *data.BucketInfo, objID oid.ID) (oid.ID, error)

	// GetBucketCORS gets an object id that corresponds to object with bucket CORS.
	//
	// If object id is not found returns ErrNodeNotFound error.
	GetBucketCORS(ctx context.Context, bktInfo *data.BucketInfo) (oid.ID, error)

	// PutBucketCORS puts a node to a system tree and returns objectID of a previous cors config which must be deleted in FrostFS.
	//
	// If object id to remove is not found returns ErrNoNodeToRemove error.
	PutBucketCORS(ctx context.Context, bktInfo *data.BucketInfo, objID oid.ID) (oid.ID, error)

	// DeleteBucketCORS removes a node from a system tree and returns objID which must be deleted in FrostFS.
	//
	// If object id to remove is not found returns ErrNoNodeToRemove error.
	DeleteBucketCORS(ctx context.Context, bktInfo *data.BucketInfo) (oid.ID, error)

	GetObjectTagging(ctx context.Context, bktInfo *data.BucketInfo, objVersion *data.NodeVersion) (map[string]string, error)
	PutObjectTagging(ctx context.Context, bktInfo *data.BucketInfo, objVersion *data.NodeVersion, tagSet map[string]string) error
	DeleteObjectTagging(ctx context.Context, bktInfo *data.BucketInfo, objVersion *data.NodeVersion) error

	GetBucketTagging(ctx context.Context, bktInfo *data.BucketInfo) (map[string]string, error)
	PutBucketTagging(ctx context.Context, bktInfo *data.BucketInfo, tagSet map[string]string) error
	DeleteBucketTagging(ctx context.Context, bktInfo *data.BucketInfo) error

	GetVersions(ctx context.Context, bktInfo *data.BucketInfo, objectName string) ([]*data.NodeVersion, error)
	GetLatestVersion(ctx context.Context, bktInfo *data.BucketInfo, objectName string) (*data.NodeVersion, error)
	GetLatestVersionsByPrefix(ctx context.Context, bktInfo *data.BucketInfo, prefix string) ([]*data.NodeVersion, error)
	GetAllVersionsByPrefix(ctx context.Context, bktInfo *data.BucketInfo, prefix string) ([]*data.NodeVersion, error)
	GetUnversioned(ctx context.Context, bktInfo *data.BucketInfo, objectName string) (*data.NodeVersion, error)
	AddVersion(ctx context.Context, bktInfo *data.BucketInfo, newVersion *data.NodeVersion) (uint64, error)
	RemoveVersion(ctx context.Context, bktInfo *data.BucketInfo, nodeID uint64) error

	PutLock(ctx context.Context, bktInfo *data.BucketInfo, nodeID uint64, lock *data.LockInfo) error
	GetLock(ctx context.Context, bktInfo *data.BucketInfo, nodeID uint64) (*data.LockInfo, error)

	CreateMultipartUpload(ctx context.Context, bktInfo *data.BucketInfo, info *data.MultipartInfo) error
	DeleteMultipartUpload(ctx context.Context, bktInfo *data.BucketInfo, multipartNodeID uint64) error
	GetMultipartUploadsByPrefix(ctx context.Context, bktInfo *data.BucketInfo, prefix string) ([]*data.MultipartInfo, error)
	GetMultipartUpload(ctx context.Context, bktInfo *data.BucketInfo, objectName, uploadID string) (*data.MultipartInfo, error)

	// AddPart puts a node to a system tree as a child of appropriate multipart upload
	// and returns objectID of a previous part which must be deleted in FrostFS.
	//
	// If object id to remove is not found returns ErrNoNodeToRemove error.
	AddPart(ctx context.Context, bktInfo *data.BucketInfo, multipartNodeID uint64, info *data.PartInfo) (oldObjIDToDelete oid.ID, err error)
	GetParts(ctx context.Context, bktInfo *data.BucketInfo, multipartNodeID uint64) ([]*data.PartInfo, error)

	// GetObjectTaggingAndLock unifies GetObjectTagging and GetLock methods in single tree service invocation.
	GetObjectTaggingAndLock(ctx context.Context, bktInfo *data.BucketInfo, objVersion *data.NodeVersion) (map[string]string, *data.LockInfo, error)
}

TreeService provide interface to interact with tree service using s3 data models.

type TreeServiceMock

type TreeServiceMock struct {
	// contains filtered or unexported fields
}

func NewTreeService

func NewTreeService() *TreeServiceMock

func (*TreeServiceMock) AddPart

func (t *TreeServiceMock) AddPart(ctx context.Context, bktInfo *data.BucketInfo, multipartNodeID uint64, info *data.PartInfo) (oldObjIDToDelete oid.ID, err error)

func (*TreeServiceMock) AddVersion

func (t *TreeServiceMock) AddVersion(_ context.Context, bktInfo *data.BucketInfo, newVersion *data.NodeVersion) (uint64, error)

func (*TreeServiceMock) CreateMultipartUpload

func (t *TreeServiceMock) CreateMultipartUpload(_ context.Context, bktInfo *data.BucketInfo, info *data.MultipartInfo) error

func (*TreeServiceMock) DeleteBucketCORS

func (t *TreeServiceMock) DeleteBucketCORS(ctx context.Context, bktInfo *data.BucketInfo) (oid.ID, error)

func (*TreeServiceMock) DeleteBucketTagging

func (t *TreeServiceMock) DeleteBucketTagging(ctx context.Context, bktInfo *data.BucketInfo) error

func (*TreeServiceMock) DeleteMultipartUpload

func (t *TreeServiceMock) DeleteMultipartUpload(_ context.Context, bktInfo *data.BucketInfo, multipartNodeID uint64) error

func (*TreeServiceMock) DeleteObjectTagging

func (t *TreeServiceMock) DeleteObjectTagging(_ context.Context, bktInfo *data.BucketInfo, objVersion *data.NodeVersion) error

func (*TreeServiceMock) GetAllVersionsByPrefix

func (t *TreeServiceMock) GetAllVersionsByPrefix(_ context.Context, bktInfo *data.BucketInfo, prefix string) ([]*data.NodeVersion, error)

func (*TreeServiceMock) GetBucketCORS

func (t *TreeServiceMock) GetBucketCORS(ctx context.Context, bktInfo *data.BucketInfo) (oid.ID, error)

func (*TreeServiceMock) GetBucketTagging

func (t *TreeServiceMock) GetBucketTagging(ctx context.Context, bktInfo *data.BucketInfo) (map[string]string, error)

func (*TreeServiceMock) GetLatestVersion

func (t *TreeServiceMock) GetLatestVersion(_ context.Context, bktInfo *data.BucketInfo, objectName string) (*data.NodeVersion, error)

func (*TreeServiceMock) GetLatestVersionsByPrefix

func (t *TreeServiceMock) GetLatestVersionsByPrefix(_ context.Context, bktInfo *data.BucketInfo, prefix string) ([]*data.NodeVersion, error)

func (*TreeServiceMock) GetLock

func (t *TreeServiceMock) GetLock(ctx context.Context, bktInfo *data.BucketInfo, nodeID uint64) (*data.LockInfo, error)

func (*TreeServiceMock) GetMultipartUpload

func (t *TreeServiceMock) GetMultipartUpload(_ context.Context, bktInfo *data.BucketInfo, objectName, uploadID string) (*data.MultipartInfo, error)

func (*TreeServiceMock) GetMultipartUploadsByPrefix

func (t *TreeServiceMock) GetMultipartUploadsByPrefix(ctx context.Context, bktInfo *data.BucketInfo, prefix string) ([]*data.MultipartInfo, error)

func (*TreeServiceMock) GetNotificationConfigurationNode

func (t *TreeServiceMock) GetNotificationConfigurationNode(ctx context.Context, bktInfo *data.BucketInfo) (oid.ID, error)

func (*TreeServiceMock) GetObjectTagging

func (t *TreeServiceMock) GetObjectTagging(_ context.Context, bktInfo *data.BucketInfo, nodeVersion *data.NodeVersion) (map[string]string, error)

func (*TreeServiceMock) GetObjectTaggingAndLock

func (t *TreeServiceMock) GetObjectTaggingAndLock(ctx context.Context, bktInfo *data.BucketInfo, objVersion *data.NodeVersion) (map[string]string, *data.LockInfo, error)

func (*TreeServiceMock) GetParts

func (t *TreeServiceMock) GetParts(_ context.Context, bktInfo *data.BucketInfo, multipartNodeID uint64) ([]*data.PartInfo, error)

func (*TreeServiceMock) GetSettingsNode

func (t *TreeServiceMock) GetSettingsNode(_ context.Context, bktInfo *data.BucketInfo) (*data.BucketSettings, error)

func (*TreeServiceMock) GetUnversioned

func (t *TreeServiceMock) GetUnversioned(_ context.Context, bktInfo *data.BucketInfo, objectName string) (*data.NodeVersion, error)

func (*TreeServiceMock) GetVersions

func (t *TreeServiceMock) GetVersions(_ context.Context, bktInfo *data.BucketInfo, objectName string) ([]*data.NodeVersion, error)

func (*TreeServiceMock) PutBucketCORS

func (t *TreeServiceMock) PutBucketCORS(ctx context.Context, bktInfo *data.BucketInfo, objID oid.ID) (oid.ID, error)

func (*TreeServiceMock) PutBucketTagging

func (t *TreeServiceMock) PutBucketTagging(ctx context.Context, bktInfo *data.BucketInfo, tagSet map[string]string) error

func (*TreeServiceMock) PutLock

func (t *TreeServiceMock) PutLock(ctx context.Context, bktInfo *data.BucketInfo, nodeID uint64, lock *data.LockInfo) error

func (*TreeServiceMock) PutNotificationConfigurationNode

func (t *TreeServiceMock) PutNotificationConfigurationNode(ctx context.Context, bktInfo *data.BucketInfo, objID oid.ID) (oid.ID, error)

func (*TreeServiceMock) PutObjectTagging

func (t *TreeServiceMock) PutObjectTagging(_ context.Context, bktInfo *data.BucketInfo, nodeVersion *data.NodeVersion, tagSet map[string]string) error

func (*TreeServiceMock) PutSettingsNode

func (t *TreeServiceMock) PutSettingsNode(_ context.Context, bktInfo *data.BucketInfo, settings *data.BucketSettings) error

func (*TreeServiceMock) RemoveVersion

func (t *TreeServiceMock) RemoveVersion(_ context.Context, bktInfo *data.BucketInfo, nodeID uint64) error

type UploadCopyParams

type UploadCopyParams struct {
	Info       *UploadInfoParams
	SrcObjInfo *data.ObjectInfo
	SrcBktInfo *data.BucketInfo
	PartNumber int
	Range      *RangeParams
}

type UploadData

type UploadData struct {
	TagSet     map[string]string
	ACLHeaders map[string]string
}

type UploadInfo

type UploadInfo struct {
	IsDir    bool
	Key      string
	UploadID string
	Owner    user.ID
	Created  time.Time
}

type UploadInfoParams

type UploadInfoParams struct {
	UploadID   string
	Bkt        *data.BucketInfo
	Key        string
	Encryption encryption.Params
}

type UploadPartParams

type UploadPartParams struct {
	Info       *UploadInfoParams
	PartNumber int
	Size       int64
	Reader     io.Reader
}

type VersionedObject

type VersionedObject struct {
	Name              string
	VersionID         string
	DeleteMarkVersion string
	DeleteMarkerEtag  string
	Error             error
}

VersionedObject stores info about objects to delete.

func (*VersionedObject) String

func (t *VersionedObject) String() string

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL