Documentation ¶
Overview ¶
Package metabase implements storing objects and segements.
Index ¶
- Constants
- Variables
- func EqualAliasPieces(xs, ys AliasPieces) bool
- type AliasPiece
- type AliasPieces
- type BeginCopyObject
- type BeginCopyObjectResult
- type BeginMoveObject
- type BeginMoveObjectResult
- type BeginObjectExactVersion
- type BeginObjectNextVersion
- type BeginSegment
- type BucketEmpty
- type BucketLocation
- type BucketPrefix
- type CommitInlineSegment
- type CommitObject
- type CommitObjectWithSegments
- type CommitSegment
- type Config
- type DB
- func (db *DB) BeginCopyObject(ctx context.Context, opts BeginCopyObject) (result BeginCopyObjectResult, err error)
- func (db *DB) BeginMoveObject(ctx context.Context, opts BeginMoveObject) (result BeginMoveObjectResult, err error)
- func (db *DB) BeginObjectExactVersion(ctx context.Context, opts BeginObjectExactVersion) (committed Object, err error)
- func (db *DB) BeginObjectNextVersion(ctx context.Context, opts BeginObjectNextVersion) (committed Version, err error)
- func (db *DB) BeginSegment(ctx context.Context, opts BeginSegment) (err error)
- func (db *DB) BucketEmpty(ctx context.Context, opts BucketEmpty) (empty bool, err error)
- func (db *DB) CheckVersion(ctx context.Context) error
- func (db *DB) Close() error
- func (db *DB) CommitInlineSegment(ctx context.Context, opts CommitInlineSegment) (err error)
- func (db *DB) CommitObject(ctx context.Context, opts CommitObject) (object Object, err error)
- func (db *DB) CommitObjectWithSegments(ctx context.Context, opts CommitObjectWithSegments) (object Object, deletedSegments []DeletedSegmentInfo, err error)
- func (db *DB) CommitSegment(ctx context.Context, opts CommitSegment) (err error)
- func (db *DB) DeleteBucketObjects(ctx context.Context, opts DeleteBucketObjects) (deletedObjectCount int64, err error)
- func (db *DB) DeleteExpiredObjects(ctx context.Context, opts DeleteExpiredObjects) (err error)
- func (db *DB) DeleteObjectAnyStatusAllVersions(ctx context.Context, opts DeleteObjectAnyStatusAllVersions) (result DeleteObjectResult, err error)
- func (db *DB) DeleteObjectExactVersion(ctx context.Context, opts DeleteObjectExactVersion) (result DeleteObjectResult, err error)
- func (db *DB) DeleteObjectsAllVersions(ctx context.Context, opts DeleteObjectsAllVersions) (result DeleteObjectResult, err error)
- func (db *DB) DeletePendingObject(ctx context.Context, opts DeletePendingObject) (result DeleteObjectResult, err error)
- func (db *DB) DeleteZombieObjects(ctx context.Context, opts DeleteZombieObjects) (err error)
- func (db *DB) DestroyTables(ctx context.Context) error
- func (db *DB) EnsureNodeAliases(ctx context.Context, opts EnsureNodeAliases) (err error)
- func (db *DB) FinishCopyObject(ctx context.Context, opts FinishCopyObject) (object Object, err error)
- func (db *DB) FinishMoveObject(ctx context.Context, opts FinishMoveObject) (err error)
- func (db *DB) GetLatestObjectLastSegment(ctx context.Context, opts GetLatestObjectLastSegment) (segment Segment, err error)
- func (db *DB) GetObjectExactVersion(ctx context.Context, opts GetObjectExactVersion) (_ Object, err error)
- func (db *DB) GetProjectSegmentCount(ctx context.Context, opts GetProjectSegmentCount) (_ int64, err error)
- func (db *DB) GetSegmentByPosition(ctx context.Context, opts GetSegmentByPosition) (segment Segment, err error)
- func (db *DB) GetStreamPieceCountByNodeID(ctx context.Context, opts GetStreamPieceCountByNodeID) (result map[storj.NodeID]int64, err error)
- func (db *DB) GetTableStats(ctx context.Context, opts GetTableStats) (result TableStats, err error)
- func (db *DB) Implementation() dbutil.Implementation
- func (db *DB) IterateLoopObjects(ctx context.Context, opts IterateLoopObjects, ...) (err error)
- func (db *DB) IterateLoopSegments(ctx context.Context, opts IterateLoopSegments, ...) (err error)
- func (db *DB) IterateObjectsAllVersions(ctx context.Context, opts IterateObjects, ...) (err error)
- func (db *DB) IterateObjectsAllVersionsWithStatus(ctx context.Context, opts IterateObjectsWithStatus, ...) (err error)
- func (db *DB) IteratePendingObjectsByKey(ctx context.Context, opts IteratePendingObjectsByKey, ...) (err error)
- func (db *DB) ListNodeAliases(ctx context.Context) (_ []NodeAliasEntry, err error)
- func (db *DB) ListSegments(ctx context.Context, opts ListSegments) (result ListSegmentsResult, err error)
- func (db *DB) ListStreamPositions(ctx context.Context, opts ListStreamPositions) (result ListStreamPositionsResult, err error)
- func (db *DB) MigrateToLatest(ctx context.Context) error
- func (db *DB) Now(ctx context.Context) (time.Time, error)
- func (db *DB) Ping(ctx context.Context) error
- func (db *DB) PostgresMigration() *migrate.Migration
- func (db *DB) TestingAllCommittedObjects(ctx context.Context, projectID uuid.UUID, bucketName string) (objects []ObjectEntry, err error)
- func (db *DB) TestingAllObjectSegments(ctx context.Context, objectLocation ObjectLocation) (segments []Segment, err error)
- func (db *DB) TestingAllObjects(ctx context.Context) (objects []Object, err error)
- func (db *DB) TestingAllPendingObjects(ctx context.Context, projectID uuid.UUID, bucketName string) (objects []ObjectEntry, err error)
- func (db *DB) TestingAllSegments(ctx context.Context) (segments []Segment, err error)
- func (db *DB) TestingDeleteAll(ctx context.Context) (err error)
- func (db *DB) TestingGetState(ctx context.Context) (_ *RawState, err error)
- func (db *DB) TestingSetCleanup(cleanup func() error)
- func (db *DB) UnderlyingTagSQL() tagsql.DB
- func (db *DB) UpdateObjectMetadata(ctx context.Context, opts UpdateObjectMetadata) (err error)
- func (db *DB) UpdateSegmentPieces(ctx context.Context, opts UpdateSegmentPieces) (err error)
- type DeleteBucketObjects
- type DeleteExpiredObjects
- type DeleteObjectAnyStatusAllVersions
- type DeleteObjectExactVersion
- type DeleteObjectResult
- type DeleteObjectsAllVersions
- type DeletePendingObject
- type DeleteZombieObjects
- type DeletedSegmentInfo
- type EncryptedKeyAndNonce
- type EnsureNodeAliases
- type FinishCopyObject
- type FinishMoveObject
- type GetLatestObjectLastSegment
- type GetObjectExactVersion
- type GetProjectSegmentCount
- type GetSegmentByPosition
- type GetStreamPieceCountByNodeID
- type GetTableStats
- type IterateCursor
- type IterateLoopObjects
- type IterateLoopSegments
- type IterateObjects
- type IterateObjectsWithStatus
- type IteratePendingObjectsByKey
- type ListSegments
- type ListSegmentsResult
- type ListStreamPositions
- type ListStreamPositionsResult
- type LoopObjectEntry
- type LoopObjectsIterator
- type LoopSegmentEntry
- type LoopSegmentsIterator
- type NodeAlias
- type NodeAliasCache
- func (cache *NodeAliasCache) Aliases(ctx context.Context, nodes []storj.NodeID) ([]NodeAlias, error)
- func (cache *NodeAliasCache) ConvertAliasesToPieces(ctx context.Context, aliasPieces AliasPieces) (_ Pieces, err error)
- func (cache *NodeAliasCache) ConvertPiecesToAliases(ctx context.Context, pieces Pieces) (_ AliasPieces, err error)
- func (cache *NodeAliasCache) Nodes(ctx context.Context, aliases []NodeAlias) ([]storj.NodeID, error)
- type NodeAliasDB
- type NodeAliasEntry
- type NodeAliasMap
- func (m *NodeAliasMap) Aliases(nodes []storj.NodeID) (xs []NodeAlias, missing []storj.NodeID)
- func (m *NodeAliasMap) ContainsAll(nodeIDs []storj.NodeID, nodeAliases []NodeAlias) bool
- func (m *NodeAliasMap) Merge(other *NodeAliasMap)
- func (m *NodeAliasMap) Node(alias NodeAlias) (x storj.NodeID, ok bool)
- func (m *NodeAliasMap) Nodes(aliases []NodeAlias) (xs []storj.NodeID, missing []NodeAlias)
- func (m *NodeAliasMap) Size() int
- type Object
- type ObjectEntry
- type ObjectKey
- type ObjectLocation
- type ObjectStatus
- type ObjectStream
- type ObjectsIterator
- type Piece
- type Pieces
- func (p Pieces) Add(piecesToAdd Pieces) (Pieces, error)
- func (p Pieces) Equal(pieces Pieces) bool
- func (p Pieces) Len() int
- func (p Pieces) Less(i, j int) bool
- func (p Pieces) Remove(piecesToRemove Pieces) (Pieces, error)
- func (pieces *Pieces) Scan(value interface{}) error
- func (p Pieces) Swap(i, j int)
- func (p Pieces) Update(piecesToAdd, piecesToRemove Pieces) (Pieces, error)
- func (pieces Pieces) Value() (driver.Value, error)
- func (p Pieces) Verify() error
- type RawCopy
- type RawObject
- type RawSegment
- type RawState
- type Segment
- type SegmentIterator
- type SegmentKey
- type SegmentLocation
- type SegmentPosition
- type SegmentPositionInfo
- type StreamIDCursor
- type StreamRange
- type TableStats
- type UpdateObjectMetadata
- type UpdateSegmentPieces
- type Version
Constants ¶
const ( Delimiter = '/' LastSegmentName = "l" LastSegmentIndex = uint32(math.MaxUint32) )
Common constants for segment keys.
const ( // Pending means that the object is being uploaded or that the client failed during upload. // The failed upload may be continued in the future. Pending = ObjectStatus(1) // Committed means that the object is finished and should be visible for general listing. Committed = ObjectStatus(3) )
const CopySegmentLimit = int64(10000)
CopySegmentLimit is the maximum number of segments that can be copied.
const DefaultVersion = Version(1)
DefaultVersion represents default version 1.
const ListLimit = intLimitRange(1000)
ListLimit is the maximum number of items the client can request for listing.
const MoveLimit = int64(10000)
MoveLimit is the maximum number of segments that can be moved.
const NextVersion = Version(0)
NextVersion means that the version should be chosen automatically.
Variables ¶
var ( // ErrInvalidRequest is used to indicate invalid requests. ErrInvalidRequest = errs.Class("metabase: invalid request") // ErrConflict is used to indicate conflict with the request. ErrConflict = errs.Class("metabase: conflict") )
var ErrObjectAlreadyExists = errs.Class("object already exists")
ErrObjectAlreadyExists is used to indicate that object already exists.
var ErrSegmentNotFound = errs.Class("segment not found")
ErrSegmentNotFound is an error class for non-existing segment.
var Error = errs.Class("metabase")
Error is the default error for metabase.
Functions ¶
func EqualAliasPieces ¶
func EqualAliasPieces(xs, ys AliasPieces) bool
EqualAliasPieces compares whether xs and ys are equal.
Types ¶
type AliasPiece ¶
AliasPiece is a piece with alias node ID.
type AliasPieces ¶
type AliasPieces []AliasPiece
AliasPieces is a slice of AliasPiece.
func (AliasPieces) Bytes ¶
func (aliases AliasPieces) Bytes() ([]byte, error)
Bytes compresses alias pieces to a slice of bytes.
func (*AliasPieces) Scan ¶
func (aliases *AliasPieces) Scan(src interface{}) error
Scan implements the database/sql Scanner interface.
func (*AliasPieces) SetBytes ¶
func (aliases *AliasPieces) SetBytes(data []byte) error
SetBytes decompresses alias pieces from a slice of bytes.
type BeginCopyObject ¶ added in v1.50.1
type BeginCopyObject struct { Version Version ObjectLocation }
BeginCopyObject holds all data needed begin copy object method.
type BeginCopyObjectResult ¶ added in v1.50.1
type BeginCopyObjectResult struct { StreamID uuid.UUID EncryptedMetadata []byte EncryptedMetadataKeyNonce []byte EncryptedMetadataKey []byte EncryptedKeysNonces []EncryptedKeyAndNonce EncryptionParameters storj.EncryptionParameters }
BeginCopyObjectResult holds data needed to finish copy object.
type BeginMoveObject ¶ added in v1.39.4
type BeginMoveObject struct { Version Version ObjectLocation }
BeginMoveObject holds all data needed begin move object method.
type BeginMoveObjectResult ¶ added in v1.39.4
type BeginMoveObjectResult struct { StreamID uuid.UUID // TODO we need metadata because of an uplink issue with how we are storing key and nonce EncryptedMetadata []byte EncryptedMetadataKeyNonce []byte EncryptedMetadataKey []byte EncryptedKeysNonces []EncryptedKeyAndNonce EncryptionParameters storj.EncryptionParameters }
BeginMoveObjectResult holds data needed to finish move object.
type BeginObjectExactVersion ¶
type BeginObjectExactVersion struct { ObjectStream ExpiresAt *time.Time ZombieDeletionDeadline *time.Time EncryptedMetadata []byte // optional EncryptedMetadataNonce []byte // optional EncryptedMetadataEncryptedKey []byte // optional Encryption storj.EncryptionParameters }
BeginObjectExactVersion contains arguments necessary for starting an object upload.
func (*BeginObjectExactVersion) Verify ¶ added in v1.43.1
func (opts *BeginObjectExactVersion) Verify() error
Verify verifies get object reqest fields.
type BeginObjectNextVersion ¶
type BeginObjectNextVersion struct { ObjectStream ExpiresAt *time.Time ZombieDeletionDeadline *time.Time EncryptedMetadata []byte // optional EncryptedMetadataNonce []byte // optional EncryptedMetadataEncryptedKey []byte // optional Encryption storj.EncryptionParameters }
BeginObjectNextVersion contains arguments necessary for starting an object upload.
func (*BeginObjectNextVersion) Verify ¶ added in v1.43.1
func (opts *BeginObjectNextVersion) Verify() error
Verify verifies get object request fields.
type BeginSegment ¶
type BeginSegment struct { ObjectStream Position SegmentPosition // TODO: unused field, can remove RootPieceID storj.PieceID Pieces Pieces }
BeginSegment contains options to verify, whether a new segment upload can be started.
type BucketEmpty ¶
BucketEmpty contains arguments necessary for checking if bucket is empty.
type BucketLocation ¶
BucketLocation defines a bucket that belongs to a project.
func ParseBucketPrefix ¶
func ParseBucketPrefix(prefix BucketPrefix) (BucketLocation, error)
ParseBucketPrefix parses BucketPrefix.
func ParseCompactBucketPrefix ¶
func ParseCompactBucketPrefix(compactPrefix []byte) (BucketLocation, error)
ParseCompactBucketPrefix parses BucketPrefix.
func (BucketLocation) CompactPrefix ¶
func (loc BucketLocation) CompactPrefix() []byte
CompactPrefix converts bucket location into bucket prefix with compact project ID.
func (BucketLocation) Prefix ¶
func (loc BucketLocation) Prefix() BucketPrefix
Prefix converts bucket location into bucket prefix.
func (BucketLocation) Verify ¶
func (loc BucketLocation) Verify() error
Verify object location fields.
type CommitInlineSegment ¶
type CommitInlineSegment struct { ObjectStream Position SegmentPosition ExpiresAt *time.Time EncryptedKeyNonce []byte EncryptedKey []byte PlainOffset int64 // offset in the original data stream PlainSize int32 // size before encryption EncryptedETag []byte InlineData []byte }
CommitInlineSegment contains all necessary information about the segment.
type CommitObject ¶
type CommitObject struct { ObjectStream Encryption storj.EncryptionParameters EncryptedMetadata []byte // optional EncryptedMetadataNonce []byte // optional EncryptedMetadataEncryptedKey []byte // optional }
CommitObject contains arguments necessary for committing an object.
func (*CommitObject) Verify ¶ added in v1.43.1
func (c *CommitObject) Verify() error
Verify verifies reqest fields.
type CommitObjectWithSegments ¶
type CommitObjectWithSegments struct { ObjectStream EncryptedMetadata []byte EncryptedMetadataNonce []byte EncryptedMetadataEncryptedKey []byte // TODO: this probably should use segment ranges rather than individual items Segments []SegmentPosition }
CommitObjectWithSegments contains arguments necessary for committing an object.
type CommitSegment ¶
type CommitSegment struct { ObjectStream Position SegmentPosition RootPieceID storj.PieceID ExpiresAt *time.Time EncryptedKeyNonce []byte EncryptedKey []byte PlainOffset int64 // offset in the original data stream PlainSize int32 // size before encryption EncryptedSize int32 // segment size after encryption EncryptedETag []byte Redundancy storj.RedundancyScheme Pieces Pieces Placement storj.PlacementConstraint }
CommitSegment contains all necessary information about the segment.
type Config ¶ added in v1.42.2
type Config struct { ApplicationName string MinPartSize memory.Size MaxNumberOfParts int // TODO remove this flag when server-side copy implementation will be finished ServerSideCopy bool }
Config is a configuration struct for part validation.
type DB ¶
type DB struct {
// contains filtered or unexported fields
}
DB implements a database for storing objects and segments.
func (*DB) BeginCopyObject ¶ added in v1.50.1
func (db *DB) BeginCopyObject(ctx context.Context, opts BeginCopyObject) (result BeginCopyObjectResult, err error)
BeginCopyObject collects all data needed to begin object copy procedure.
func (*DB) BeginMoveObject ¶ added in v1.39.4
func (db *DB) BeginMoveObject(ctx context.Context, opts BeginMoveObject) (result BeginMoveObjectResult, err error)
BeginMoveObject collects all data needed to begin object move procedure.
func (*DB) BeginObjectExactVersion ¶
func (db *DB) BeginObjectExactVersion(ctx context.Context, opts BeginObjectExactVersion) (committed Object, err error)
BeginObjectExactVersion adds a pending object to the database, with specific version.
func (*DB) BeginObjectNextVersion ¶
func (db *DB) BeginObjectNextVersion(ctx context.Context, opts BeginObjectNextVersion) (committed Version, err error)
BeginObjectNextVersion adds a pending object to the database, with automatically assigned version.
func (*DB) BeginSegment ¶
func (db *DB) BeginSegment(ctx context.Context, opts BeginSegment) (err error)
BeginSegment verifies, whether a new segment upload can be started.
func (*DB) BucketEmpty ¶
BucketEmpty returns true if bucket does not contain objects (pending or committed). This method doesn't check bucket existence.
func (*DB) CheckVersion ¶
CheckVersion checks the database is the correct version.
func (*DB) CommitInlineSegment ¶
func (db *DB) CommitInlineSegment(ctx context.Context, opts CommitInlineSegment) (err error)
CommitInlineSegment commits inline segment to the database.
func (*DB) CommitObject ¶
CommitObject adds a pending object to the database.
func (*DB) CommitObjectWithSegments ¶
func (db *DB) CommitObjectWithSegments(ctx context.Context, opts CommitObjectWithSegments) (object Object, deletedSegments []DeletedSegmentInfo, err error)
CommitObjectWithSegments commits pending object to the database.
func (*DB) CommitSegment ¶
func (db *DB) CommitSegment(ctx context.Context, opts CommitSegment) (err error)
CommitSegment commits segment to the database.
func (*DB) DeleteBucketObjects ¶
func (db *DB) DeleteBucketObjects(ctx context.Context, opts DeleteBucketObjects) (deletedObjectCount int64, err error)
DeleteBucketObjects deletes all objects in the specified bucket. Deletion performs in batches, so in case of error while processing, this method will return the number of objects deleted to the moment when an error occurs.
func (*DB) DeleteExpiredObjects ¶
func (db *DB) DeleteExpiredObjects(ctx context.Context, opts DeleteExpiredObjects) (err error)
DeleteExpiredObjects deletes all objects that expired before expiredBefore.
func (*DB) DeleteObjectAnyStatusAllVersions ¶
func (db *DB) DeleteObjectAnyStatusAllVersions(ctx context.Context, opts DeleteObjectAnyStatusAllVersions) (result DeleteObjectResult, err error)
DeleteObjectAnyStatusAllVersions deletes all object versions.
func (*DB) DeleteObjectExactVersion ¶
func (db *DB) DeleteObjectExactVersion(ctx context.Context, opts DeleteObjectExactVersion) (result DeleteObjectResult, err error)
DeleteObjectExactVersion deletes an exact object version.
Result will contain only those segments which needs to be deleted from storage nodes. If object is an ancestor for copied object its segments pieces cannot be deleted because copy still needs it.
func (*DB) DeleteObjectsAllVersions ¶
func (db *DB) DeleteObjectsAllVersions(ctx context.Context, opts DeleteObjectsAllVersions) (result DeleteObjectResult, err error)
DeleteObjectsAllVersions deletes all versions of multiple objects from the same bucket.
func (*DB) DeletePendingObject ¶
func (db *DB) DeletePendingObject(ctx context.Context, opts DeletePendingObject) (result DeleteObjectResult, err error)
DeletePendingObject deletes a pending object with specified version and streamID.
func (*DB) DeleteZombieObjects ¶ added in v1.30.1
func (db *DB) DeleteZombieObjects(ctx context.Context, opts DeleteZombieObjects) (err error)
DeleteZombieObjects deletes all objects that zombie deletion deadline passed.
func (*DB) DestroyTables ¶
DestroyTables deletes all tables.
TODO: remove this, only for bootstrapping.
func (*DB) EnsureNodeAliases ¶
func (db *DB) EnsureNodeAliases(ctx context.Context, opts EnsureNodeAliases) (err error)
EnsureNodeAliases ensures that the supplied node ID-s have a alias. It's safe to concurrently try and create node ID-s for the same NodeID.
func (*DB) FinishCopyObject ¶ added in v1.50.1
func (db *DB) FinishCopyObject(ctx context.Context, opts FinishCopyObject) (object Object, err error)
FinishCopyObject accepts new encryption keys for copied object and insert the corresponding new object ObjectKey and segments EncryptedKey. TODO handle the case when the source and destination encrypted object keys are the same.
func (*DB) FinishMoveObject ¶ added in v1.40.3
func (db *DB) FinishMoveObject(ctx context.Context, opts FinishMoveObject) (err error)
FinishMoveObject accepts new encryption keys for moved object and updates the corresponding object ObjectKey and segments EncryptedKey.
func (*DB) GetLatestObjectLastSegment ¶
func (db *DB) GetLatestObjectLastSegment(ctx context.Context, opts GetLatestObjectLastSegment) (segment Segment, err error)
GetLatestObjectLastSegment returns an object last segment information.
func (*DB) GetObjectExactVersion ¶
func (db *DB) GetObjectExactVersion(ctx context.Context, opts GetObjectExactVersion) (_ Object, err error)
GetObjectExactVersion returns object information for exact version.
func (*DB) GetProjectSegmentCount ¶ added in v1.45.2
func (db *DB) GetProjectSegmentCount(ctx context.Context, opts GetProjectSegmentCount) (_ int64, err error)
GetProjectSegmentCount returns number of segments that specified project has.
func (*DB) GetSegmentByPosition ¶
func (db *DB) GetSegmentByPosition(ctx context.Context, opts GetSegmentByPosition) (segment Segment, err error)
GetSegmentByPosition returns information about segment on the specified position.
func (*DB) GetStreamPieceCountByNodeID ¶
func (db *DB) GetStreamPieceCountByNodeID(ctx context.Context, opts GetStreamPieceCountByNodeID) (result map[storj.NodeID]int64, err error)
GetStreamPieceCountByNodeID returns piece count by node id.
func (*DB) GetTableStats ¶ added in v1.32.2
func (db *DB) GetTableStats(ctx context.Context, opts GetTableStats) (result TableStats, err error)
GetTableStats gathers information about the metabase tables.
func (*DB) Implementation ¶ added in v1.32.2
func (db *DB) Implementation() dbutil.Implementation
Implementation rturns the database implementation.
func (*DB) IterateLoopObjects ¶
func (db *DB) IterateLoopObjects(ctx context.Context, opts IterateLoopObjects, fn func(context.Context, LoopObjectsIterator) error) (err error)
IterateLoopObjects iterates through all objects in metabase.
func (*DB) IterateLoopSegments ¶ added in v1.31.1
func (db *DB) IterateLoopSegments(ctx context.Context, opts IterateLoopSegments, fn func(context.Context, LoopSegmentsIterator) error) (err error)
IterateLoopSegments iterates through all segments in metabase.
func (*DB) IterateObjectsAllVersions ¶
func (db *DB) IterateObjectsAllVersions(ctx context.Context, opts IterateObjects, fn func(context.Context, ObjectsIterator) error) (err error)
IterateObjectsAllVersions iterates through all versions of all objects.
func (*DB) IterateObjectsAllVersionsWithStatus ¶
func (db *DB) IterateObjectsAllVersionsWithStatus(ctx context.Context, opts IterateObjectsWithStatus, fn func(context.Context, ObjectsIterator) error) (err error)
IterateObjectsAllVersionsWithStatus iterates through all versions of all objects with specified status.
func (*DB) IteratePendingObjectsByKey ¶
func (db *DB) IteratePendingObjectsByKey(ctx context.Context, opts IteratePendingObjectsByKey, fn func(context.Context, ObjectsIterator) error) (err error)
IteratePendingObjectsByKey iterates through all streams of pending objects with the same ObjectKey.
func (*DB) ListNodeAliases ¶
func (db *DB) ListNodeAliases(ctx context.Context) (_ []NodeAliasEntry, err error)
ListNodeAliases lists all node alias mappings.
func (*DB) ListSegments ¶
func (db *DB) ListSegments(ctx context.Context, opts ListSegments) (result ListSegmentsResult, err error)
ListSegments lists specified stream segments.
func (*DB) ListStreamPositions ¶
func (db *DB) ListStreamPositions(ctx context.Context, opts ListStreamPositions) (result ListStreamPositionsResult, err error)
ListStreamPositions lists specified stream segment positions.
func (*DB) MigrateToLatest ¶
MigrateToLatest migrates database to the latest version.
func (*DB) PostgresMigration ¶
PostgresMigration returns steps needed for migrating postgres database.
func (*DB) TestingAllCommittedObjects ¶
func (db *DB) TestingAllCommittedObjects(ctx context.Context, projectID uuid.UUID, bucketName string) (objects []ObjectEntry, err error)
TestingAllCommittedObjects gets all objects from bucket. Use only for testing purposes.
func (*DB) TestingAllObjectSegments ¶
func (db *DB) TestingAllObjectSegments(ctx context.Context, objectLocation ObjectLocation) (segments []Segment, err error)
TestingAllObjectSegments gets all segments for given object. Use only for testing purposes.
func (*DB) TestingAllObjects ¶
TestingAllObjects gets all objects. Use only for testing purposes.
func (*DB) TestingAllPendingObjects ¶
func (db *DB) TestingAllPendingObjects(ctx context.Context, projectID uuid.UUID, bucketName string) (objects []ObjectEntry, err error)
TestingAllPendingObjects gets all objects from bucket. Use only for testing purposes.
func (*DB) TestingAllSegments ¶
TestingAllSegments gets all segments. Use only for testing purposes.
func (*DB) TestingDeleteAll ¶
TestingDeleteAll deletes all objects and segments from the database.
func (*DB) TestingGetState ¶
TestingGetState returns the state of the database.
func (*DB) TestingSetCleanup ¶ added in v1.31.1
TestingSetCleanup is used to set the callback for cleaning up test database.
func (*DB) UnderlyingTagSQL ¶
UnderlyingTagSQL returns *tagsql.DB. TODO: remove.
func (*DB) UpdateObjectMetadata ¶
func (db *DB) UpdateObjectMetadata(ctx context.Context, opts UpdateObjectMetadata) (err error)
UpdateObjectMetadata updates an object metadata.
func (*DB) UpdateSegmentPieces ¶
func (db *DB) UpdateSegmentPieces(ctx context.Context, opts UpdateSegmentPieces) (err error)
UpdateSegmentPieces updates pieces for specified segment. If provided old pieces won't match current database state update will fail.
type DeleteBucketObjects ¶
type DeleteBucketObjects struct { Bucket BucketLocation BatchSize int // DeletePieces is called for every batch of objects. // Slice `segments` will be reused between calls. DeletePieces func(ctx context.Context, segments []DeletedSegmentInfo) error }
DeleteBucketObjects contains arguments for deleting a whole bucket.
type DeleteExpiredObjects ¶
DeleteExpiredObjects contains all the information necessary to delete expired objects and segments.
type DeleteObjectAnyStatusAllVersions ¶
type DeleteObjectAnyStatusAllVersions struct {
ObjectLocation
}
DeleteObjectAnyStatusAllVersions contains arguments necessary for deleting all object versions.
type DeleteObjectExactVersion ¶
type DeleteObjectExactVersion struct { Version Version ObjectLocation }
DeleteObjectExactVersion contains arguments necessary for deleting an exact version of object.
func (*DeleteObjectExactVersion) Verify ¶
func (obj *DeleteObjectExactVersion) Verify() error
Verify delete object fields.
type DeleteObjectResult ¶
type DeleteObjectResult struct { Objects []Object Segments []DeletedSegmentInfo }
DeleteObjectResult result of deleting object.
type DeleteObjectsAllVersions ¶
type DeleteObjectsAllVersions struct {
Locations []ObjectLocation
}
DeleteObjectsAllVersions contains arguments necessary for deleting all versions of multiple objects from the same bucket.
func (*DeleteObjectsAllVersions) Verify ¶
func (delete *DeleteObjectsAllVersions) Verify() error
Verify delete objects fields.
type DeletePendingObject ¶
type DeletePendingObject struct {
ObjectStream
}
DeletePendingObject contains arguments necessary for deleting a pending object.
func (*DeletePendingObject) Verify ¶
func (opts *DeletePendingObject) Verify() error
Verify verifies delete pending object fields validity.
type DeleteZombieObjects ¶ added in v1.30.1
type DeleteZombieObjects struct { DeadlineBefore time.Time InactiveDeadline time.Time AsOfSystemTime time.Time BatchSize int }
DeleteZombieObjects contains all the information necessary to delete zombie objects and segments.
type DeletedSegmentInfo ¶
DeletedSegmentInfo info about deleted segment.
type EncryptedKeyAndNonce ¶ added in v1.39.4
type EncryptedKeyAndNonce struct { Position SegmentPosition EncryptedKeyNonce []byte EncryptedKey []byte }
EncryptedKeyAndNonce holds single segment position, encrypted key and nonce.
type EnsureNodeAliases ¶
EnsureNodeAliases contains arguments necessary for creating NodeAlias-es.
type FinishCopyObject ¶ added in v1.50.1
type FinishCopyObject struct { ObjectStream NewBucket string NewEncryptedObjectKey ObjectKey NewStreamID uuid.UUID OverrideMetadata bool NewEncryptedMetadata []byte NewEncryptedMetadataKeyNonce storj.Nonce NewEncryptedMetadataKey []byte NewSegmentKeys []EncryptedKeyAndNonce }
FinishCopyObject holds all data needed to finish object copy.
func (FinishCopyObject) Verify ¶ added in v1.50.1
func (finishCopy FinishCopyObject) Verify() error
Verify verifies metabase.FinishCopyObject data.
type FinishMoveObject ¶ added in v1.40.3
type FinishMoveObject struct { ObjectStream NewBucket string NewSegmentKeys []EncryptedKeyAndNonce NewEncryptedObjectKey []byte NewEncryptedMetadataKeyNonce storj.Nonce NewEncryptedMetadataKey []byte }
FinishMoveObject holds all data needed to finish object move.
func (FinishMoveObject) Verify ¶ added in v1.40.3
func (finishMove FinishMoveObject) Verify() error
Verify verifies metabase.FinishMoveObject data.
type GetLatestObjectLastSegment ¶
type GetLatestObjectLastSegment struct {
ObjectLocation
}
GetLatestObjectLastSegment contains arguments necessary for fetching a last segment information.
type GetObjectExactVersion ¶
type GetObjectExactVersion struct { Version Version ObjectLocation }
GetObjectExactVersion contains arguments necessary for fetching an information about exact object version.
func (*GetObjectExactVersion) Verify ¶
func (obj *GetObjectExactVersion) Verify() error
Verify verifies get object reqest fields.
type GetProjectSegmentCount ¶ added in v1.45.2
type GetProjectSegmentCount struct { ProjectID uuid.UUID AsOfSystemTime time.Time AsOfSystemInterval time.Duration }
GetProjectSegmentCount contains arguments necessary for fetching an information about project segment count.
func (*GetProjectSegmentCount) Verify ¶ added in v1.45.2
func (g *GetProjectSegmentCount) Verify() error
Verify verifies reqest fields.
type GetSegmentByPosition ¶
type GetSegmentByPosition struct { StreamID uuid.UUID Position SegmentPosition }
GetSegmentByPosition contains arguments necessary for fetching a segment on specific position.
func (*GetSegmentByPosition) Verify ¶
func (seg *GetSegmentByPosition) Verify() error
Verify verifies get segment request fields.
type GetStreamPieceCountByNodeID ¶
GetStreamPieceCountByNodeID contains arguments for GetStreamPieceCountByNodeID.
type GetTableStats ¶ added in v1.32.2
GetTableStats contains arguments necessary for getting table statistics.
type IterateCursor ¶
IterateCursor is a cursor used during iteration through objects.
The cursor is exclusive.
type IterateLoopObjects ¶
type IterateLoopObjects struct { BatchSize int AsOfSystemTime time.Time AsOfSystemInterval time.Duration }
IterateLoopObjects contains arguments necessary for listing objects in metabase.
func (*IterateLoopObjects) Verify ¶
func (opts *IterateLoopObjects) Verify() error
Verify verifies get object request fields.
type IterateLoopSegments ¶ added in v1.31.1
type IterateLoopSegments struct { BatchSize int AsOfSystemTime time.Time AsOfSystemInterval time.Duration }
IterateLoopSegments contains arguments necessary for listing segments in metabase.
func (*IterateLoopSegments) Verify ¶ added in v1.31.1
func (opts *IterateLoopSegments) Verify() error
Verify verifies segments request fields.
type IterateObjects ¶
type IterateObjects struct { ProjectID uuid.UUID BucketName string BatchSize int Prefix ObjectKey Cursor IterateCursor }
IterateObjects contains arguments necessary for listing objects in a bucket.
func (*IterateObjects) Verify ¶
func (opts *IterateObjects) Verify() error
Verify verifies get object request fields.
type IterateObjectsWithStatus ¶
type IterateObjectsWithStatus struct { ProjectID uuid.UUID BucketName string Recursive bool BatchSize int Prefix ObjectKey Cursor IterateCursor Status ObjectStatus IncludeCustomMetadata bool IncludeSystemMetadata bool }
IterateObjectsWithStatus contains arguments necessary for listing objects in a bucket.
func (*IterateObjectsWithStatus) Verify ¶
func (opts *IterateObjectsWithStatus) Verify() error
Verify verifies get object request fields.
type IteratePendingObjectsByKey ¶
type IteratePendingObjectsByKey struct { ObjectLocation BatchSize int Cursor StreamIDCursor }
IteratePendingObjectsByKey contains arguments necessary for listing pending objects by ObjectKey.
func (*IteratePendingObjectsByKey) Verify ¶
func (opts *IteratePendingObjectsByKey) Verify() error
Verify verifies get object request fields.
type ListSegments ¶
type ListSegments struct { StreamID uuid.UUID Cursor SegmentPosition Limit int }
ListSegments contains arguments necessary for listing stream segments.
type ListSegmentsResult ¶
ListSegmentsResult result of listing segments.
type ListStreamPositions ¶
type ListStreamPositions struct { StreamID uuid.UUID Cursor SegmentPosition Limit int Range *StreamRange }
ListStreamPositions contains arguments necessary for listing stream segments.
type ListStreamPositionsResult ¶
type ListStreamPositionsResult struct { Segments []SegmentPositionInfo More bool }
ListStreamPositionsResult result of listing segments.
type LoopObjectEntry ¶
type LoopObjectEntry struct { ObjectStream // metrics, repair, tally Status ObjectStatus // verify CreatedAt time.Time // temp used by metabase-createdat-migration ExpiresAt *time.Time // tally SegmentCount int32 // metrics TotalEncryptedSize int64 // tally EncryptedMetadataSize int // tally }
LoopObjectEntry contains information about object needed by metainfo loop.
type LoopObjectsIterator ¶
type LoopObjectsIterator interface {
Next(ctx context.Context, item *LoopObjectEntry) bool
}
LoopObjectsIterator iterates over a sequence of LoopObjectEntry items.
type LoopSegmentEntry ¶
type LoopSegmentEntry struct { StreamID uuid.UUID Position SegmentPosition CreatedAt time.Time // non-nillable ExpiresAt *time.Time RepairedAt *time.Time // repair RootPieceID storj.PieceID EncryptedSize int32 // size of the whole segment (not a piece) PlainOffset int64 // verify PlainSize int32 // verify Redundancy storj.RedundancyScheme Pieces Pieces Placement storj.PlacementConstraint }
LoopSegmentEntry contains information about segment metadata needed by metainfo loop.
func (LoopSegmentEntry) Inline ¶
func (s LoopSegmentEntry) Inline() bool
Inline returns true if segment is inline.
type LoopSegmentsIterator ¶ added in v1.31.1
type LoopSegmentsIterator interface {
Next(ctx context.Context, item *LoopSegmentEntry) bool
}
LoopSegmentsIterator iterates over a sequence of LoopSegmentEntry items.
type NodeAlias ¶
type NodeAlias int32
NodeAlias is a metabase local alias for NodeID-s to reduce segment table size.
type NodeAliasCache ¶
type NodeAliasCache struct {
// contains filtered or unexported fields
}
NodeAliasCache is a write-through cache for looking up node ID and alias mapping.
func NewNodeAliasCache ¶
func NewNodeAliasCache(db NodeAliasDB) *NodeAliasCache
NewNodeAliasCache creates a new cache using the specified database.
func (*NodeAliasCache) Aliases ¶
func (cache *NodeAliasCache) Aliases(ctx context.Context, nodes []storj.NodeID) ([]NodeAlias, error)
Aliases returns node aliases corresponding to the node ID-s, adding missing node ID-s to the database when needed.
func (*NodeAliasCache) ConvertAliasesToPieces ¶
func (cache *NodeAliasCache) ConvertAliasesToPieces(ctx context.Context, aliasPieces AliasPieces) (_ Pieces, err error)
ConvertAliasesToPieces converts alias pieces to pieces.
func (*NodeAliasCache) ConvertPiecesToAliases ¶
func (cache *NodeAliasCache) ConvertPiecesToAliases(ctx context.Context, pieces Pieces) (_ AliasPieces, err error)
ConvertPiecesToAliases converts pieces to alias pieces.
func (*NodeAliasCache) Nodes ¶
func (cache *NodeAliasCache) Nodes(ctx context.Context, aliases []NodeAlias) ([]storj.NodeID, error)
Nodes returns node ID-s corresponding to the aliases, refreshing the cache once when an alias is missing. This results in an error when the alias is not in the database.
type NodeAliasDB ¶
type NodeAliasDB interface { EnsureNodeAliases(ctx context.Context, opts EnsureNodeAliases) error ListNodeAliases(ctx context.Context) (_ []NodeAliasEntry, err error) }
NodeAliasDB is an interface for looking up node alises.
type NodeAliasEntry ¶
NodeAliasEntry is a mapping between NodeID and NodeAlias.
type NodeAliasMap ¶
type NodeAliasMap struct {
// contains filtered or unexported fields
}
NodeAliasMap contains bidirectional mapping between node ID and a NodeAlias.
func NewNodeAliasMap ¶
func NewNodeAliasMap(entries []NodeAliasEntry) *NodeAliasMap
NewNodeAliasMap creates a new alias map from the given entries.
func (*NodeAliasMap) Aliases ¶
Aliases returns alises-s for the given node ID-s and node ID-s that are not in this map.
func (*NodeAliasMap) ContainsAll ¶
func (m *NodeAliasMap) ContainsAll(nodeIDs []storj.NodeID, nodeAliases []NodeAlias) bool
ContainsAll returns true when the table contains all entries.
func (*NodeAliasMap) Merge ¶
func (m *NodeAliasMap) Merge(other *NodeAliasMap)
Merge merges the other map into m.
func (*NodeAliasMap) Node ¶
func (m *NodeAliasMap) Node(alias NodeAlias) (x storj.NodeID, ok bool)
Node returns NodeID for the given alias.
func (*NodeAliasMap) Nodes ¶
func (m *NodeAliasMap) Nodes(aliases []NodeAlias) (xs []storj.NodeID, missing []NodeAlias)
Nodes returns NodeID-s for the given aliases and aliases that are not in this map.
func (*NodeAliasMap) Size ¶
func (m *NodeAliasMap) Size() int
Size returns the number of entries in this map.
type Object ¶
type Object RawObject
Object object metadata. TODO define separated struct.
func (*Object) IsMigrated ¶
IsMigrated returns whether the object comes from PointerDB. Pointer objects are special that they are missing some information.
- TotalPlainSize = 0 and FixedSegmentSize = 0.
- Segment.PlainOffset = 0, Segment.PlainSize = 0
type ObjectEntry ¶
type ObjectEntry struct { IsPrefix bool ObjectKey ObjectKey Version Version StreamID uuid.UUID CreatedAt time.Time ExpiresAt *time.Time Status ObjectStatus SegmentCount int32 EncryptedMetadataNonce []byte EncryptedMetadata []byte EncryptedMetadataEncryptedKey []byte TotalPlainSize int64 TotalEncryptedSize int64 FixedSegmentSize int32 Encryption storj.EncryptionParameters }
ObjectEntry contains information about an item in a bucket.
type ObjectKey ¶
type ObjectKey string
ObjectKey is an encrypted object key encoded using Path Component Encoding. It is not ascii safe.
type ObjectLocation ¶
ObjectLocation is decoded object key information.
func (ObjectLocation) Bucket ¶
func (obj ObjectLocation) Bucket() BucketLocation
Bucket returns bucket location this object belongs to.
func (ObjectLocation) Verify ¶
func (obj ObjectLocation) Verify() error
Verify object location fields.
type ObjectStatus ¶
type ObjectStatus byte
ObjectStatus defines the statuses that the object might be in.
type ObjectStream ¶
type ObjectStream struct { ProjectID uuid.UUID BucketName string ObjectKey ObjectKey Version Version StreamID uuid.UUID }
ObjectStream uniquely defines an object and stream.
func (*ObjectStream) Location ¶
func (obj *ObjectStream) Location() ObjectLocation
Location returns object location.
type ObjectsIterator ¶
type ObjectsIterator interface {
Next(ctx context.Context, item *ObjectEntry) bool
}
ObjectsIterator iterates over a sequence of ObjectEntry items.
type Pieces ¶
type Pieces []Piece
Pieces defines information for pieces.
func (Pieces) Less ¶
Less reports whether the piece with index i should sort before the piece with index j.
func (Pieces) Remove ¶ added in v1.36.1
Remove removes the specified pieces from the original pieces and returns the updated Pieces.
func (Pieces) Update ¶ added in v1.36.1
Update adds piecesToAdd pieces and removes piecesToRemove pieces from the original pieces struct and returns the updated Pieces.
It removes the piecesToRemove only if all piece number, node id match.
When adding a piece, it checks if the piece already exists using the piece Number If a piece already exists, it returns an empty pieces struct and an error.
type RawObject ¶
type RawObject struct { ObjectStream CreatedAt time.Time ExpiresAt *time.Time Status ObjectStatus SegmentCount int32 EncryptedMetadataNonce []byte EncryptedMetadata []byte EncryptedMetadataEncryptedKey []byte // TotalPlainSize is 0 for a migrated object. TotalPlainSize int64 TotalEncryptedSize int64 // FixedSegmentSize is 0 for a migrated object. FixedSegmentSize int32 Encryption storj.EncryptionParameters // ZombieDeletionDeadline defines when the pending raw object should be deleted from the database. // This is as a safeguard against objects that failed to upload and the client has not indicated // whether they want to continue uploading or delete the already uploaded data. ZombieDeletionDeadline *time.Time }
RawObject defines the full object that is stored in the database. It should be rarely used directly.
type RawSegment ¶
type RawSegment struct { StreamID uuid.UUID Position SegmentPosition CreatedAt time.Time // non-nillable RepairedAt *time.Time ExpiresAt *time.Time RootPieceID storj.PieceID EncryptedKeyNonce []byte EncryptedKey []byte EncryptedSize int32 // size of the whole segment (not a piece) // PlainSize is 0 for a migrated object. PlainSize int32 // PlainOffset is 0 for a migrated object. PlainOffset int64 EncryptedETag []byte Redundancy storj.RedundancyScheme InlineData []byte Pieces Pieces Placement storj.PlacementConstraint }
RawSegment defines the full segment that is stored in the database. It should be rarely used directly.
type RawState ¶
type RawState struct { Objects []RawObject Segments []RawSegment Copies []RawCopy }
RawState contains full state of a table.
type Segment ¶
type Segment RawSegment
Segment segment metadata. TODO define separated struct.
func (Segment) PiecesInAncestorSegment ¶ added in v1.50.1
PiecesInAncestorSegment returns true if remote alias pieces are to be found in an ancestor segment.
type SegmentIterator ¶
type SegmentIterator func(ctx context.Context, segment *LoopSegmentEntry) bool
SegmentIterator returns the next segment.
type SegmentKey ¶
type SegmentKey []byte
SegmentKey is an encoded metainfo key. This is used as the key in pointerdb key-value store.
type SegmentLocation ¶
type SegmentLocation struct { ProjectID uuid.UUID BucketName string ObjectKey ObjectKey Position SegmentPosition }
SegmentLocation is decoded segment key information.
func ParseSegmentKey ¶
func ParseSegmentKey(encoded SegmentKey) (SegmentLocation, error)
ParseSegmentKey parses an segment key into segment location.
func (SegmentLocation) Bucket ¶
func (seg SegmentLocation) Bucket() BucketLocation
Bucket returns bucket location this segment belongs to.
func (SegmentLocation) Encode ¶
func (seg SegmentLocation) Encode() SegmentKey
Encode converts segment location into a segment key.
func (SegmentLocation) Object ¶
func (seg SegmentLocation) Object() ObjectLocation
Object returns the object location associated with this segment location.
func (SegmentLocation) Verify ¶
func (seg SegmentLocation) Verify() error
Verify segment location fields.
type SegmentPosition ¶
SegmentPosition is segment part and index combined.
func SegmentPositionFromEncoded ¶
func SegmentPositionFromEncoded(v uint64) SegmentPosition
SegmentPositionFromEncoded decodes an uint64 into a SegmentPosition.
func (SegmentPosition) Encode ¶
func (pos SegmentPosition) Encode() uint64
Encode encodes a segment position into an uint64, that can be stored in a database.
func (SegmentPosition) Less ¶
func (pos SegmentPosition) Less(b SegmentPosition) bool
Less returns whether pos should before b.
func (*SegmentPosition) Scan ¶
func (params *SegmentPosition) Scan(value interface{}) error
Scan implements sql.Scanner interface.
type SegmentPositionInfo ¶
type SegmentPositionInfo struct { Position SegmentPosition // PlainSize is 0 for a migrated object. PlainSize int32 // PlainOffset is 0 for a migrated object. PlainOffset int64 CreatedAt *time.Time // TODO: make it non-nilable after we migrate all existing segments to have creation time EncryptedETag []byte EncryptedKeyNonce []byte EncryptedKey []byte }
SegmentPositionInfo contains information for segment position.
type StreamIDCursor ¶
StreamIDCursor is a cursor used during iteration through streamIDs of a pending object.
type StreamRange ¶
StreamRange allows to limit stream positions based on the plain offsets.
type TableStats ¶ added in v1.32.2
TableStats contains information about the metabase status.
type UpdateObjectMetadata ¶
type UpdateObjectMetadata struct { ObjectStream EncryptedMetadata []byte EncryptedMetadataNonce []byte EncryptedMetadataEncryptedKey []byte }
UpdateObjectMetadata contains arguments necessary for replacing an object metadata.
type UpdateSegmentPieces ¶
type UpdateSegmentPieces struct { StreamID uuid.UUID Position SegmentPosition OldPieces Pieces NewRedundancy storj.RedundancyScheme NewPieces Pieces NewRepairedAt time.Time // sets new time of last segment repair (optional). }
UpdateSegmentPieces contains arguments necessary for updating segment pieces.
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
Package zombiedeletion contains the functions needed to run zombie objects deletion chore.
|
Package zombiedeletion contains the functions needed to run zombie objects deletion chore. |