Documentation ¶
Overview ¶
Package content implements repository support for content-addressable storage.
Index ¶
- Constants
- Variables
- func CreateHashAndEncryptor(f *FormattingOptions) (hashing.HashFunc, encryption.Encryptor, error)
- func ValidatePrefix(prefix ID) error
- type CachingOptions
- type CompactOptions
- type Format
- type FormattingOptions
- type ID
- type IDRange
- type IndexBlobInfo
- type IndexBlobReader
- type Info
- type IterateCallback
- type IterateOptions
- type IteratePackOptions
- type IteratePacksCallback
- type ManagerOptions
- type PackInfo
- type Reader
- type SessionID
- type SessionInfo
- type SessionOptions
- type SharedManager
- type Stats
- func (s *Stats) DecryptedBytes() int64
- func (s *Stats) EncryptedBytes() int64
- func (s *Stats) HashedContent() (count uint32, bytes int64)
- func (s *Stats) InvalidContents() uint32
- func (s *Stats) ReadContent() (count uint32, bytes int64)
- func (s *Stats) Reset()
- func (s *Stats) ValidContents() uint32
- func (s *Stats) WrittenContent() (count uint32, bytes int64)
- type WriteManager
- func (bm *WriteManager) Close(ctx context.Context) error
- func (bm *WriteManager) CompactIndexes(ctx context.Context, opt CompactOptions) error
- func (bm *WriteManager) ContentFormat() FormattingOptions
- func (bm *WriteManager) ContentInfo(ctx context.Context, contentID ID) (Info, error)
- func (bm *WriteManager) DecryptBlob(ctx context.Context, blobID blob.ID) ([]byte, error)
- func (bm *WriteManager) DeleteContent(ctx context.Context, contentID ID) error
- func (bm *WriteManager) DisableIndexFlush(ctx context.Context)
- func (bm *WriteManager) EnableIndexFlush(ctx context.Context)
- func (bm *WriteManager) Flush(ctx context.Context) error
- func (bm *WriteManager) GetContent(ctx context.Context, contentID ID) (v []byte, err error)
- func (bm *WriteManager) IterateContents(ctx context.Context, opts IterateOptions, callback IterateCallback) error
- func (bm *WriteManager) IteratePacks(ctx context.Context, options IteratePackOptions, callback IteratePacksCallback) error
- func (bm *WriteManager) IterateUnreferencedBlobs(ctx context.Context, blobPrefixes []blob.ID, parallellism int, ...) error
- func (bm *WriteManager) ListActiveSessions(ctx context.Context) (map[SessionID]*SessionInfo, error)
- func (bm *WriteManager) RecoverIndexFromPackBlob(ctx context.Context, packFile blob.ID, packFileLength int64, commit bool) ([]Info, error)
- func (bm *WriteManager) Refresh(ctx context.Context) (bool, error)
- func (bm *WriteManager) Revision() int64
- func (bm *WriteManager) RewriteContent(ctx context.Context, contentID ID) error
- func (bm *WriteManager) SyncMetadataCache(ctx context.Context) error
- func (bm *WriteManager) UndeleteContent(ctx context.Context, contentID ID) error
- func (bm *WriteManager) WriteContent(ctx context.Context, data []byte, prefix ID) (ID, error)
Constants ¶
const ( PackBlobIDPrefixRegular blob.ID = "p" PackBlobIDPrefixSpecial blob.ID = "q" FormatLogModule = "kopia/format" )
Prefixes for pack blobs.
const BlobIDPrefixSession blob.ID = "s"
BlobIDPrefixSession is the prefix for blob IDs indicating active sessions. Each blob ID will consist of {sessionID}.{suffix}.
Variables ¶
var AllIDs = IDRange{"", maxIDCharacterPlus1}
AllIDs is an IDRange that contains all valid IDs.
var AllNonPrefixedIDs = IDRange{"0", "g"}
AllNonPrefixedIDs is an IDRange that contains all valid IDs non-prefixed IDs ('0' .. 'f').
var AllPrefixedIDs = IDRange{"g", maxIDCharacterPlus1}
AllPrefixedIDs is an IDRange that contains all valid IDs prefixed IDs ('g' .. 'z').
var ErrContentNotFound = errors.New("content not found")
ErrContentNotFound is returned when content is not found.
var PackBlobIDPrefixes = []blob.ID{ PackBlobIDPrefixRegular, PackBlobIDPrefixSpecial, }
PackBlobIDPrefixes contains all possible prefixes for pack blobs.
Functions ¶
func CreateHashAndEncryptor ¶
func CreateHashAndEncryptor(f *FormattingOptions) (hashing.HashFunc, encryption.Encryptor, error)
CreateHashAndEncryptor returns new hashing and encrypting functions based on the specified formatting options.
func ValidatePrefix ¶ added in v0.6.0
ValidatePrefix returns an error if a given prefix is invalid.
Types ¶
type CachingOptions ¶
type CachingOptions struct { CacheDirectory string `json:"cacheDirectory,omitempty"` MaxCacheSizeBytes int64 `json:"maxCacheSize,omitempty"` MaxMetadataCacheSizeBytes int64 `json:"maxMetadataCacheSize,omitempty"` MaxListCacheDurationSec int `json:"maxListCacheDuration,omitempty"` HMACSecret []byte `json:"-"` }
CachingOptions specifies configuration of local cache.
func (*CachingOptions) CloneOrDefault ¶ added in v0.6.0
func (c *CachingOptions) CloneOrDefault() *CachingOptions
CloneOrDefault returns a clone of the caching options or empty options for nil.
type CompactOptions ¶
type CompactOptions struct { MaxSmallBlobs int AllIndexes bool DropDeletedBefore time.Time DropContents []ID }
CompactOptions provides options for compaction.
type Format ¶
type Format struct { Version byte // format version number must be 0x01 KeySize byte // size of each key in bytes EntrySize uint16 // size of each entry in bytes, big-endian EntryCount uint32 // number of sorted (key,value) entries that follow Entries []struct { Key []byte // key bytes (KeySize) Entry entry } ExtraData []byte // extra data }
Format describes a format of a single pack index. The actual structure is not used, it's purely for documentation purposes. The struct is byte-aligned.
type FormattingOptions ¶
type FormattingOptions struct { Version int `json:"version,omitempty"` // version number, must be "1" Hash string `json:"hash,omitempty"` // identifier of the hash algorithm used Encryption string `json:"encryption,omitempty"` // identifier of the encryption algorithm used HMACSecret []byte `json:"secret,omitempty"` // HMAC secret used to generate encryption keys MasterKey []byte `json:"masterKey,omitempty"` // master encryption key (SIV-mode encryption only) MaxPackSize int `json:"maxPackSize,omitempty"` // maximum size of a pack object }
FormattingOptions describes the rules for formatting contents in repository.
func (*FormattingOptions) GetEncryptionAlgorithm ¶ added in v0.5.2
func (f *FormattingOptions) GetEncryptionAlgorithm() string
GetEncryptionAlgorithm implements encryption.Parameters.
func (*FormattingOptions) GetHashFunction ¶ added in v0.5.2
func (f *FormattingOptions) GetHashFunction() string
GetHashFunction implements hashing.Parameters.
func (*FormattingOptions) GetHmacSecret ¶ added in v0.8.0
func (f *FormattingOptions) GetHmacSecret() []byte
GetHmacSecret implements hashing.Parameters.
func (*FormattingOptions) GetMasterKey ¶ added in v0.5.2
func (f *FormattingOptions) GetMasterKey() []byte
GetMasterKey implements encryption.Parameters.
type ID ¶
type ID string
ID is an identifier of content in content-addressable storage.
type IDRange ¶ added in v0.6.0
IDRange represents a range of IDs.
func PrefixRange ¶ added in v0.6.0
PrefixRange returns ID range that contains all IDs with a given prefix.
type IndexBlobInfo ¶
IndexBlobInfo is an information about a single index blob managed by Manager.
type IndexBlobReader ¶ added in v0.8.0
type IndexBlobReader interface { ParseIndexBlob(ctx context.Context, blobID blob.ID) ([]Info, error) DecryptBlob(ctx context.Context, blobID blob.ID) ([]byte, error) IndexBlobs(ctx context.Context, includeInactive bool) ([]IndexBlobInfo, error) }
IndexBlobReader defines content read API.
type Info ¶
type Info struct { ID ID `json:"contentID"` Length uint32 `json:"length"` TimestampSeconds int64 `json:"time"` PackBlobID blob.ID `json:"packFile,omitempty"` PackOffset uint32 `json:"packOffset,omitempty"` Deleted bool `json:"deleted"` FormatVersion byte `json:"formatVersion"` }
Info is an information about a single piece of content managed by Manager.
type IterateCallback ¶
IterateCallback is the function type used as a callback during content iteration.
type IterateOptions ¶
IterateOptions contains the options used for iterating over content.
type IteratePackOptions ¶
type IteratePackOptions struct { IncludePacksWithOnlyDeletedContent bool IncludeContentInfos bool Prefixes []blob.ID }
IteratePackOptions are the options used to iterate over packs.
type IteratePacksCallback ¶
IteratePacksCallback is the function type used as callback during pack iteration.
type ManagerOptions ¶ added in v0.6.0
type ManagerOptions struct { RepositoryFormatBytes []byte TimeNow func() time.Time // Time provider // contains filtered or unexported fields }
ManagerOptions are the optional parameters for manager creation.
func (*ManagerOptions) CloneOrDefault ¶ added in v0.8.0
func (o *ManagerOptions) CloneOrDefault() *ManagerOptions
CloneOrDefault returns a clone of provided ManagerOptions or default empty struct if nil.
type Reader ¶ added in v0.8.0
type Reader interface { ContentFormat() FormattingOptions GetContent(ctx context.Context, id ID) ([]byte, error) ContentInfo(ctx context.Context, id ID) (Info, error) IterateContents(ctx context.Context, opts IterateOptions, callback IterateCallback) error IteratePacks(ctx context.Context, opts IteratePackOptions, callback IteratePacksCallback) error ListActiveSessions(ctx context.Context) (map[SessionID]*SessionInfo, error) }
Reader defines content read API.
type SessionID ¶ added in v0.8.0
type SessionID string
SessionID represents identifier of a session.
func SessionIDFromBlobID ¶ added in v0.8.0
SessionIDFromBlobID returns session ID from a given blob ID or empty string if it's not a session blob ID.
type SessionInfo ¶ added in v0.8.0
type SessionInfo struct { ID SessionID `json:"id"` StartTime time.Time `json:"startTime"` CheckpointTime time.Time `json:"checkpointTime"` User string `json:"username"` Host string `json:"hostname"` }
SessionInfo describes a particular session and is persisted in Session blob.
type SessionOptions ¶ added in v0.8.0
SessionOptions specifies session options.
type SharedManager ¶ added in v0.8.0
type SharedManager struct { // contains filtered or unexported fields }
SharedManager is responsible for read-only access to committed data.
func NewSharedManager ¶ added in v0.8.0
func NewSharedManager(ctx context.Context, st blob.Storage, f *FormattingOptions, caching *CachingOptions, opts *ManagerOptions) (*SharedManager, error)
NewSharedManager returns SharedManager that is used by SessionWriteManagers on top of a repository.
func (*SharedManager) IndexBlobs ¶ added in v0.8.0
func (sm *SharedManager) IndexBlobs(ctx context.Context, includeInactive bool) ([]IndexBlobInfo, error)
IndexBlobs returns the list of active index blobs.
func (*SharedManager) ParseIndexBlob ¶ added in v0.8.0
ParseIndexBlob loads entries in a given index blob and returns them.
type Stats ¶
type Stats struct {
// contains filtered or unexported fields
}
Stats exposes statistics about content operation.
func (*Stats) DecryptedBytes ¶
DecryptedBytes returns the approximate total number of decrypted bytes.
func (*Stats) EncryptedBytes ¶
EncryptedBytes returns the approximate total number of decrypted bytes.
func (*Stats) HashedContent ¶ added in v0.6.0
HashedContent returns the approximate hashed content count and their total size in bytes.
func (*Stats) InvalidContents ¶
InvalidContents returns the approximate count of invalid contents found.
func (*Stats) ReadContent ¶ added in v0.6.0
ReadContent returns the approximate read content count and their total size in bytes.
func (*Stats) ValidContents ¶
ValidContents returns the approximate count of valid contents found.
func (*Stats) WrittenContent ¶ added in v0.6.0
WrittenContent returns the approximate written content count and their total size in bytes.
type WriteManager ¶ added in v0.8.0
type WriteManager struct { // contains filtered or unexported fields }
WriteManager builds content-addressable storage with encryption, deduplication and packaging on top of BLOB store.
func NewManager ¶
func NewManager(ctx context.Context, st blob.Storage, f *FormattingOptions, caching *CachingOptions, options *ManagerOptions) (*WriteManager, error)
NewManager creates new content manager with given packing options and a formatter.
func NewWriteManager ¶ added in v0.8.0
func NewWriteManager(sm *SharedManager, options SessionOptions) *WriteManager
NewWriteManager returns a session write manager.
func (*WriteManager) Close ¶ added in v0.8.0
func (bm *WriteManager) Close(ctx context.Context) error
Close closes the content manager.
func (*WriteManager) CompactIndexes ¶ added in v0.8.0
func (bm *WriteManager) CompactIndexes(ctx context.Context, opt CompactOptions) error
CompactIndexes performs compaction of index blobs ensuring that # of small index blobs is below opt.maxSmallBlobs.
func (*WriteManager) ContentFormat ¶ added in v0.8.0
func (bm *WriteManager) ContentFormat() FormattingOptions
ContentFormat returns formatting options.
func (*WriteManager) ContentInfo ¶ added in v0.8.0
ContentInfo returns information about a single content.
func (*WriteManager) DecryptBlob ¶ added in v0.8.0
DecryptBlob returns the contents of an encrypted blob that can be decrypted (n,m,l).
func (*WriteManager) DeleteContent ¶ added in v0.8.0
func (bm *WriteManager) DeleteContent(ctx context.Context, contentID ID) error
DeleteContent marks the given contentID as deleted.
NOTE: To avoid race conditions only contents that cannot be possibly re-created should ever be deleted. That means that contents of such contents should include some element of randomness or a contemporaneous timestamp that will never reappear.
func (*WriteManager) DisableIndexFlush ¶ added in v0.8.0
func (bm *WriteManager) DisableIndexFlush(ctx context.Context)
DisableIndexFlush increments the counter preventing automatic index flushes.
func (*WriteManager) EnableIndexFlush ¶ added in v0.8.0
func (bm *WriteManager) EnableIndexFlush(ctx context.Context)
EnableIndexFlush decrements the counter preventing automatic index flushes. The flushes will be reenabled when the index drops to zero.
func (*WriteManager) Flush ¶ added in v0.8.0
func (bm *WriteManager) Flush(ctx context.Context) error
Flush completes writing any pending packs and writes pack indexes to the underlying storage. Any pending writes completed before Flush() has started are guaranteed to be committed to the repository before Flush() returns.
func (*WriteManager) GetContent ¶ added in v0.8.0
GetContent gets the contents of a given content. If the content is not found returns ErrContentNotFound.
func (*WriteManager) IterateContents ¶ added in v0.8.0
func (bm *WriteManager) IterateContents(ctx context.Context, opts IterateOptions, callback IterateCallback) error
IterateContents invokes the provided callback for each content starting with a specified prefix and possibly including deleted items.
func (*WriteManager) IteratePacks ¶ added in v0.8.0
func (bm *WriteManager) IteratePacks(ctx context.Context, options IteratePackOptions, callback IteratePacksCallback) error
IteratePacks invokes the provided callback for all pack blobs.
func (*WriteManager) IterateUnreferencedBlobs ¶ added in v0.8.0
func (bm *WriteManager) IterateUnreferencedBlobs(ctx context.Context, blobPrefixes []blob.ID, parallellism int, callback func(blob.Metadata) error) error
IterateUnreferencedBlobs returns the list of unreferenced storage blobs.
func (*WriteManager) ListActiveSessions ¶ added in v0.8.0
func (bm *WriteManager) ListActiveSessions(ctx context.Context) (map[SessionID]*SessionInfo, error)
ListActiveSessions returns a set of all active sessions in a given storage.
func (*WriteManager) RecoverIndexFromPackBlob ¶ added in v0.8.0
func (bm *WriteManager) RecoverIndexFromPackBlob(ctx context.Context, packFile blob.ID, packFileLength int64, commit bool) ([]Info, error)
RecoverIndexFromPackBlob attempts to recover index blob entries from a given pack file. Pack file length may be provided (if known) to reduce the number of bytes that are read from the storage.
func (*WriteManager) Refresh ¶ added in v0.8.0
func (bm *WriteManager) Refresh(ctx context.Context) (bool, error)
Refresh reloads the committed content indexes.
func (*WriteManager) Revision ¶ added in v0.8.0
func (bm *WriteManager) Revision() int64
Revision returns data revision number that changes on each write or refresh.
func (*WriteManager) RewriteContent ¶ added in v0.8.0
func (bm *WriteManager) RewriteContent(ctx context.Context, contentID ID) error
RewriteContent causes reads and re-writes a given content using the most recent format.
func (*WriteManager) SyncMetadataCache ¶ added in v0.8.0
func (bm *WriteManager) SyncMetadataCache(ctx context.Context) error
SyncMetadataCache synchronizes metadata cache with metadata blobs in storage.
func (*WriteManager) UndeleteContent ¶ added in v0.8.0
func (bm *WriteManager) UndeleteContent(ctx context.Context, contentID ID) error
UndeleteContent rewrites the content with the given ID if the content exists and is mark deleted. If the content exists and is not marked deleted, this operation is a no-op.
func (*WriteManager) WriteContent ¶ added in v0.8.0
WriteContent saves a given content of data to a pack group with a provided name and returns a contentID that's based on the contents of data written.
Source Files ¶
- blob_crypto.go
- builder.go
- caching_options.go
- committed_content_index.go
- committed_content_index_disk_cache.go
- committed_content_index_mem_cache.go
- committed_read_manager.go
- content_cache.go
- content_cache_data.go
- content_cache_metadata.go
- content_cache_passthrough.go
- content_formatting_options.go
- content_id_to_bytes.go
- content_index_reader.go
- content_index_recovery.go
- content_manager.go
- content_manager_indexes.go
- content_manager_iterate.go
- content_manager_lock_free.go
- content_manager_metrics.go
- content_manager_own_writes.go
- content_reader.go
- format.go
- index.go
- index_blob_manager.go
- info.go
- list_cache.go
- merged.go
- sessions.go
- stats.go