layer

package
v0.32.0 Latest Latest
Warning

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

Go to latest
Published: Oct 1, 2024 License: AGPL-3.0 Imports: 49 Imported by: 0

Documentation

Index

Constants

View Source
const (
	AttributeLockEnabled = "LockEnabled"

	// AttributeOwnerPublicKey is used to store container owner public key.
	AttributeOwnerPublicKey = "owner-public-key"
)
View Source
const (
	AESEncryptionAlgorithm       = "AES256"
	AESKeySize                   = 32
	AttributeEncryptionAlgorithm = api.NeoFSSystemMetadataPrefix + "Algorithm"
	AttributeDecryptedSize       = api.NeoFSSystemMetadataPrefix + "Decrypted-Size"
	AttributeHMACSalt            = api.NeoFSSystemMetadataPrefix + "HMAC-Salt"
	AttributeHMACKey             = api.NeoFSSystemMetadataPrefix + "HMAC-Key"

	AttributeNeofsCopiesNumber = "neofs-copies-number" // such format to match X-Amz-Meta-Neofs-Copies-Number header
)
View Source
const (
	UploadCompletedParts = "S3-Completed-Parts"

	MaxSizeUploadsList  = 1000
	MaxSizePartsList    = 1000
	UploadMinPartNumber = 1
	UploadMaxPartNumber = 10000
)
View Source
const (
	AttributeComplianceMode = ".s3-compliance-mode"
)
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")

	// ErrPartListIsEmpty is returned if no parts available for the upload.
	ErrPartListIsEmpty = errors.New("part list is empty")
)
View Source
var ErrAccessDenied = errors.New("access denied")

ErrAccessDenied is returned from NeoFS in case of access violation.

View Source
var ErrDecodeUserID = errors.New("decode user.ID failed")

ErrDecodeUserID is returned if user.ID decode failed.

View Source
var ErrMetaEmptyParameterValue = errors.New("meta empty parameter value")

ErrMetaEmptyParameterValue describes situation when meta parameter was passed but with empty value.

View Source
var ErrTooManyObjectForDeletion = errors.New("to many objects for deletion")

ErrTooManyObjectForDeletion is returned if user is trying to delete to many objects per request.

Functions

func FormEncryptionInfo added in v0.24.0

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

func GetBoxData added in v0.17.0

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

GetBoxData extracts accessbox.Box from context.

func IsAuthenticatedRequest added in v0.19.0

func IsAuthenticatedRequest(ctx context.Context) bool

IsAuthenticatedRequest checks if access box exists in the current request.

func IsSystemHeader added in v0.19.0

func IsSystemHeader(key string) bool

func MimeByFilePath added in v0.24.0

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 added in v0.26.0

func TimeNow(ctx context.Context) time.Time

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

Types

type BucketACL added in v0.17.0

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

BucketACL extends BucketInfo by eacl.Table.

type Cache added in v0.25.0

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

func NewCache added in v0.25.0

func NewCache(cfg *CachesConfig) *Cache

func (*Cache) CleanListCacheEntriesContainingObject added in v0.25.0

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

func (*Cache) DeleteBucket added in v0.25.0

func (c *Cache) DeleteBucket(name string)

func (*Cache) DeleteCORS added in v0.25.0

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

func (*Cache) DeleteObject added in v0.25.0

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

func (*Cache) DeleteObjectName added in v0.25.0

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

func (*Cache) DeleteTagging added in v0.25.0

func (c *Cache) DeleteTagging(key string)

func (*Cache) GetBucket added in v0.25.0

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

func (*Cache) GetCORS added in v0.25.0

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

func (*Cache) GetLastObject added in v0.25.0

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

func (*Cache) GetList added in v0.25.0

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

func (*Cache) GetLockInfo added in v0.25.0

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

func (*Cache) GetNotificationConfiguration added in v0.25.0

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

func (*Cache) GetObject added in v0.25.0

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

func (*Cache) GetSettings added in v0.25.0

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

func (*Cache) GetTagging added in v0.25.0

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

func (*Cache) PutBucket added in v0.25.0

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

func (*Cache) PutCORS added in v0.25.0

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

func (*Cache) PutList added in v0.25.0

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

func (*Cache) PutLockInfo added in v0.25.0

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

func (*Cache) PutNotificationConfiguration added in v0.25.0

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

func (*Cache) PutObject added in v0.25.0

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

func (*Cache) PutObjectWithName added in v0.25.0

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

func (*Cache) PutSettings added in v0.25.0

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

func (*Cache) PutTagging added in v0.25.0

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

type CachesConfig added in v0.17.0

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 added in v0.17.0

func DefaultCachesConfigs(logger *zap.Logger) *CachesConfig

DefaultCachesConfigs returns filled configs.

type Client

type Client interface {
	Initialize(ctx context.Context, c EventListener) error

	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) (string, 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, neoFS NeoFS, config *Config) Client

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

type CompleteMultipartParams added in v0.18.0

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

type CompletedPart added in v0.18.0

type CompletedPart struct {
	ETag       string
	PartNumber int
}

type Config added in v0.18.0

type Config struct {
	ChainAddress string
	Caches       *CachesConfig
	GateKey      *keys.PrivateKey
	Anonymous    user.ID
	Resolver     Resolver
	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 added in v0.16.0

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 added in v0.22.0

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

type DeleteBucketParams added in v0.16.0

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

DeleteBucketParams stores delete bucket request parameters.

type DeleteObjectParams added in v0.20.0

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

type EncryptedPart added in v0.24.0

type EncryptedPart struct {
	Part
	EncryptedSize int64
}

type EventListener added in v0.21.0

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

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 added in v0.25.0

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 added in v0.17.0

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

HeadObjectParams stores object head request parameters.

type ListMultipartUploadsInfo added in v0.18.0

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

type ListMultipartUploadsParams added in v0.18.0

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

type ListObjectVersionsInfo added in v0.16.0

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 added in v0.16.0

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 added in v0.17.0

type ListObjectsInfoV1 struct {
	ListObjectsInfo
	NextMarker string
}

ListObjectsInfoV1 holds data which ListObjectsV1 returns.

type ListObjectsInfoV2 added in v0.17.0

type ListObjectsInfoV2 struct {
	ListObjectsInfo
	NextContinuationToken string
}

ListObjectsInfoV2 holds data which ListObjectsV2 returns.

type ListObjectsParamsCommon added in v0.17.0

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

ListObjectsParamsCommon contains common parameters for ListObjectsV1 and ListObjectsV2.

type ListObjectsParamsV1 added in v0.17.0

type ListObjectsParamsV1 struct {
	ListObjectsParamsCommon
	Marker string
}

ListObjectsParamsV1 contains params for ListObjectsV1.

type ListObjectsParamsV2 added in v0.17.0

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

ListObjectsParamsV2 contains params for ListObjectsV2.

type ListPartsInfo added in v0.18.0

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

type ListPartsParams added in v0.18.0

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

type MsgHandler added in v0.20.0

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

type MsgHandlerFunc added in v0.20.0

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

func (MsgHandlerFunc) HandleMessage added in v0.20.0

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

type Multipart added in v0.30.0

type Multipart struct {
	// MultipartHashes contains hashes for the multipart object payload calculation (optional).
	MultipartHashes []hash.Hash
	// SplitPreviousID contains [oid.ID] of previous object in chain (optional).
	SplitPreviousID *oid.ID
	// SplitFirstID contains [oid.ID] of the first object in chain (The first object has nil here).
	SplitFirstID *oid.ID
	// HeaderObject is a virtual representation of complete multipart object (optional). It is used to set Parent in
	// linking object.
	HeaderObject *object.Object
	// Link contains info for linking object.
	Link *object.Link
	// PayloadHash contains precalculated hash for object.
	PayloadHash hash.Hash
	// HomoHash contains precalculated homomorphic hash for object if enabled.
	HomoHash hash.Hash
}

Multipart contains info for local object slicing inside s3-gate during multipart upload operation.

type NeoFS

type NeoFS interface {
	// CreateContainer creates and saves parameterized container in NeoFS.
	// 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 NeoFS 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 NeoFS. 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 NeoFS 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 NeoFS 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 NeoFS 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 NeoFS 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)

	// FinalizeObjectWithPayloadChecksums fills and signs header object for complete multipart object.
	FinalizeObjectWithPayloadChecksums(context.Context, object.Object, hash.Hash, hash.Hash, uint64) (*object.Object, error)

	// DeleteObject marks the object to be removed from the NeoFS 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)

	// MaxObjectSize returns configured payload size limit for object slicing when enabled.
	MaxObjectSize() int64

	// IsHomomorphicHashingEnabled shows if homomorphic hashing is enabled in config.
	IsHomomorphicHashingEnabled() bool

	// CurrentEpoch returns current epoch.
	CurrentEpoch() uint64
}

NeoFS represents virtual connection to NeoFS network.

type ObjectPart added in v0.19.0

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 NeoFS object.

type ObjectVersion added in v0.22.0

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

ObjectVersion stores object version info.

type Part added in v0.18.0

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

func ParseCompletedPartHeader added in v0.24.0

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

type PrmAuth added in v0.19.0

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

PrmAuth groups authentication parameters for the NeoFS operation.

type PrmContainerCreate added in v0.19.0

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

	// Public key of the container creator.
	CreatorPubKey keys.PublicKey

	// 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 NeoFS.CreateContainer operation.

type PrmObjectCreate added in v0.19.0

type PrmObjectCreate struct {
	// Authentication parameters.
	PrmAuth

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

	// NeoFS 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

	Multipart *Multipart
}

PrmObjectCreate groups parameters of NeoFS.CreateObject operation.

type PrmObjectDelete added in v0.19.0

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 NeoFS.DeleteObject operation.

type PrmObjectRead added in v0.19.0

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 NeoFS.ReadObject operation.

type PutBucketACLParams added in v0.17.0

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

PutBucketACLParams stores put bucket acl request parameters.

type PutBucketNotificationConfigurationParams added in v0.19.0

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

type PutCORSParams added in v0.18.0

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

PutCORSParams stores PutCORS request parameters.

type PutLockInfoParams added in v0.24.0

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 added in v0.25.0

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 added in v0.20.0

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

PutSettingsParams stores object copy request parameters.

type RangeParams added in v0.16.0

type RangeParams struct {
	Start uint64
	End   uint64
}

RangeParams stores range header request parameters.

type Resolver added in v0.30.1

type Resolver interface {
	ResolveCID(ctx context.Context, containerName string) (cid.ID, error)
}

Resolver allows to map container ID by container name.

type TestNeoFS added in v0.22.0

type TestNeoFS struct {
	NeoFS
	// contains filtered or unexported fields
}

func NewTestNeoFS added in v0.22.0

func NewTestNeoFS(signer neofscrypto.Signer) *TestNeoFS

func (*TestNeoFS) AddObject added in v0.22.0

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

func (*TestNeoFS) AllObjects added in v0.24.0

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

func (*TestNeoFS) Container added in v0.22.0

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

func (*TestNeoFS) ContainerEACL added in v0.24.0

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

func (*TestNeoFS) ContainerID added in v0.22.0

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

func (*TestNeoFS) CreateContainer added in v0.22.0

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

func (*TestNeoFS) CreateObject added in v0.22.0

func (t *TestNeoFS) CreateObject(_ context.Context, prm PrmObjectCreate) (oid.ID, error)

func (*TestNeoFS) CurrentEpoch added in v0.22.0

func (t *TestNeoFS) CurrentEpoch() uint64

func (*TestNeoFS) DeleteContainer added in v0.22.0

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

func (*TestNeoFS) DeleteObject added in v0.22.0

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

func (*TestNeoFS) FinalizeObjectWithPayloadChecksums added in v0.30.0

func (t *TestNeoFS) FinalizeObjectWithPayloadChecksums(_ context.Context, header object.Object, metaChecksum hash.Hash, homomorphicChecksum hash.Hash, payloadLength uint64) (*object.Object, error)

func (*TestNeoFS) IsHomomorphicHashingEnabled added in v0.30.0

func (t *TestNeoFS) IsHomomorphicHashingEnabled() bool

func (*TestNeoFS) MaxObjectSize added in v0.30.0

func (t *TestNeoFS) MaxObjectSize() int64

func (*TestNeoFS) Objects added in v0.22.0

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

func (*TestNeoFS) ReadObject added in v0.22.0

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

func (*TestNeoFS) SetContainerEACL added in v0.24.0

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

func (*TestNeoFS) TimeToEpoch added in v0.22.0

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

func (*TestNeoFS) UserContainers added in v0.22.0

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

type TreeService added in v0.22.0

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 NeoFS.
	//
	// 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 NeoFS.
	//
	// 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 NeoFS.
	//
	// 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) (uint64, 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 NeoFS.
	//
	// 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)
	// GetPartByNumber returns the part by number. If part was uploaded few times the newest one will be returned.
	// Return errors:
	//   - [ErrPartListIsEmpty] if there is no parts in the upload id.
	GetPartByNumber(ctx context.Context, bktInfo *data.BucketInfo, multipartNodeID uint64, number int) (*data.PartInfo, error)
	GetPartsAfter(ctx context.Context, bktInfo *data.BucketInfo, multipartNodeID uint64, partID int) ([]*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 added in v0.22.0

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

func NewTreeService added in v0.22.0

func NewTreeService() *TreeServiceMock

func (*TreeServiceMock) AddPart added in v0.22.0

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

func (*TreeServiceMock) AddVersion added in v0.22.0

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

func (*TreeServiceMock) CreateMultipartUpload added in v0.22.0

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

func (*TreeServiceMock) DeleteBucketCORS added in v0.22.0

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

func (*TreeServiceMock) DeleteBucketTagging added in v0.22.0

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

func (*TreeServiceMock) DeleteMultipartUpload added in v0.22.0

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

func (*TreeServiceMock) DeleteObjectTagging added in v0.22.0

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

func (*TreeServiceMock) GetAllVersionsByPrefix added in v0.22.0

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

func (*TreeServiceMock) GetBucketCORS added in v0.22.0

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

func (*TreeServiceMock) GetBucketTagging added in v0.22.0

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

func (*TreeServiceMock) GetLatestVersion added in v0.22.0

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

func (*TreeServiceMock) GetLatestVersionsByPrefix added in v0.22.0

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

func (*TreeServiceMock) GetLock added in v0.22.0

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

func (*TreeServiceMock) GetMultipartUpload added in v0.22.0

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

func (*TreeServiceMock) GetMultipartUploadsByPrefix added in v0.22.0

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

func (*TreeServiceMock) GetNotificationConfigurationNode added in v0.22.0

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

func (*TreeServiceMock) GetObjectTagging added in v0.22.0

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

func (*TreeServiceMock) GetObjectTaggingAndLock added in v0.22.0

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

func (*TreeServiceMock) GetPartByNumber added in v0.30.1

func (t *TreeServiceMock) GetPartByNumber(ctx context.Context, bktInfo *data.BucketInfo, multipartNodeID uint64, number int) (*data.PartInfo, error)

func (*TreeServiceMock) GetParts added in v0.22.0

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

func (*TreeServiceMock) GetPartsAfter added in v0.30.0

func (t *TreeServiceMock) GetPartsAfter(ctx context.Context, bktInfo *data.BucketInfo, multipartNodeID uint64, partID int) ([]*data.PartInfo, error)

func (*TreeServiceMock) GetSettingsNode added in v0.22.0

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

func (*TreeServiceMock) GetUnversioned added in v0.22.0

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

func (*TreeServiceMock) GetVersions added in v0.22.0

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

func (*TreeServiceMock) PutBucketCORS added in v0.22.0

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

func (*TreeServiceMock) PutBucketTagging added in v0.22.0

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

func (*TreeServiceMock) PutLock added in v0.22.0

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

func (*TreeServiceMock) PutNotificationConfigurationNode added in v0.22.0

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

func (*TreeServiceMock) PutObjectTagging added in v0.22.0

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

func (*TreeServiceMock) PutSettingsNode added in v0.22.0

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

func (*TreeServiceMock) RemoveVersion added in v0.22.0

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

type UploadCopyParams added in v0.18.0

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

type UploadData added in v0.22.0

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

type UploadInfo added in v0.18.0

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

type UploadInfoParams added in v0.18.0

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

type UploadPartParams added in v0.18.0

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

type VersionedObject added in v0.17.0

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

VersionedObject stores info about objects to delete.

func (*VersionedObject) String added in v0.17.0

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