snapshot

package
v0.9.1 Latest Latest
Warning

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

Go to latest
Published: Oct 14, 2021 License: Apache-2.0 Imports: 15 Imported by: 9

Documentation

Overview

Package snapshot manages metadata about snapshots stored in repository.

Index

Constants

View Source
const (
	UsernameLabel = "username"
	HostnameLabel = "hostname"
	PathLabel     = "path"
)

Manifest labels identifying snapshots.

View Source
const ManifestType = "snapshot"

ManifestType is the value of the "type" label for snapshot manifests.

Variables

View Source
var ErrSnapshotNotFound = errors.Errorf("snapshot not found")

ErrSnapshotNotFound is returned when a snapshot is not found.

Functions

func GroupBySource

func GroupBySource(manifests []*Manifest) [][]*Manifest

GroupBySource returns a slice of slices, such that each result item contains manifests from a single source.

func ListSnapshotManifests

func ListSnapshotManifests(ctx context.Context, rep repo.Repository, src *SourceInfo, tags map[string]string) ([]manifest.ID, error)

ListSnapshotManifests returns the list of snapshot manifests for a given source or all sources if nil.

func SaveSnapshot

func SaveSnapshot(ctx context.Context, rep repo.RepositoryWriter, man *Manifest) (manifest.ID, error)

SaveSnapshot persists given snapshot manifest and returns manifest ID.

Types

type DirEntry

type DirEntry struct {
	Name        string               `json:"name,omitempty"`
	Type        EntryType            `json:"type,omitempty"`
	Permissions Permissions          `json:"mode,omitempty"`
	FileSize    int64                `json:"size,omitempty"`
	ModTime     time.Time            `json:"mtime,omitempty"`
	UserID      uint32               `json:"uid,omitempty"`
	GroupID     uint32               `json:"gid,omitempty"`
	ObjectID    object.ID            `json:"obj,omitempty"`
	DirSummary  *fs.DirectorySummary `json:"summ,omitempty"`
}

DirEntry represents a directory entry as stored in JSON stream.

type DirManifest

type DirManifest struct {
	StreamType string               `json:"stream"` // legacy
	Entries    []*DirEntry          `json:"entries"`
	Summary    *fs.DirectorySummary `json:"summary"`
}

DirManifest represents serialized contents of a directory. The entries are sorted lexicographically and summary only refers to properties of entries, so directory with the same contents always serializes to exactly the same JSON.

type EntryType

type EntryType string

EntryType is a type of a filesystem entry.

const (
	EntryTypeUnknown   EntryType = ""  // unknown type
	EntryTypeFile      EntryType = "f" // file
	EntryTypeDirectory EntryType = "d" // directory
	EntryTypeSymlink   EntryType = "s" // symbolic link
)

Supported entry types.

type HasDirEntry added in v0.4.0

type HasDirEntry interface {
	DirEntry() *DirEntry
}

HasDirEntry is implemented by objects that have a DirEntry associated with them.

type HasDirEntryOrNil added in v0.9.0

type HasDirEntryOrNil interface {
	DirEntryOrNil(ctx context.Context) (*DirEntry, error)
}

HasDirEntryOrNil is implemented by objects that may have a DirEntry stored in the object's corresponding shallow placeholder file.

type Manifest

type Manifest struct {
	ID     manifest.ID `json:"id"`
	Source SourceInfo  `json:"source"`

	Description string    `json:"description"`
	StartTime   time.Time `json:"startTime"`
	EndTime     time.Time `json:"endTime"`

	Stats            Stats  `json:"stats,omitempty"`
	IncompleteReason string `json:"incomplete,omitempty"`

	RootEntry *DirEntry `json:"rootEntry"`

	RetentionReasons []string `json:"-"`

	Tags map[string]string `json:"tags,omitempty"`
}

Manifest represents information about a single point-in-time filesystem snapshot.

func FindSnapshotsByRootObjectID added in v0.7.2

func FindSnapshotsByRootObjectID(ctx context.Context, rep repo.Repository, rootID object.ID) ([]*Manifest, error)

FindSnapshotsByRootObjectID returns the list of matching snapshots for a given rootID.

func ListSnapshots

func ListSnapshots(ctx context.Context, rep repo.Repository, si SourceInfo) ([]*Manifest, error)

ListSnapshots lists all snapshots for a given source.

func LoadSnapshot added in v0.4.0

func LoadSnapshot(ctx context.Context, rep repo.Repository, manifestID manifest.ID) (*Manifest, error)

LoadSnapshot loads and parses a snapshot with a given ID.

func LoadSnapshots

func LoadSnapshots(ctx context.Context, rep repo.Repository, manifestIDs []manifest.ID) ([]*Manifest, error)

LoadSnapshots efficiently loads and parses a given list of snapshot IDs.

func SortByTime

func SortByTime(manifests []*Manifest, reverse bool) []*Manifest

SortByTime returns a slice of manifests sorted by start time.

func (*Manifest) RootObjectID

func (m *Manifest) RootObjectID() object.ID

RootObjectID returns the ID of a root object.

type Permissions

type Permissions int

Permissions encapsulates UNIX permissions for a filesystem entry.

func (Permissions) MarshalJSON

func (p Permissions) MarshalJSON() ([]byte, error)

MarshalJSON emits permissions as octal string.

func (*Permissions) UnmarshalJSON

func (p *Permissions) UnmarshalJSON(b []byte) error

UnmarshalJSON parses octal permissions string from JSON.

type SourceInfo

type SourceInfo struct {
	Host     string `json:"host"`
	UserName string `json:"userName"`
	Path     string `json:"path"`
}

SourceInfo represents the information about snapshot source.

func ListSources

func ListSources(ctx context.Context, rep repo.Repository) ([]SourceInfo, error)

ListSources lists all snapshot sources in a given repository.

func ParseSourceInfo

func ParseSourceInfo(path, hostname, username string) (SourceInfo, error)

ParseSourceInfo parses a given path in the context of given hostname and username and returns SourceInfo. The path may be bare (in which case it's interpreted as local path and canonicalized) or may be 'username@host:path' where path, username and host are not processed.

func (SourceInfo) String

func (ssi SourceInfo) String() string

type Stats

type Stats struct {
	// keep all int64 aligned because they will be atomically updated
	TotalFileSize         int64 `json:"totalSize"`
	ExcludedTotalFileSize int64 `json:"excludedTotalSize"`

	// keep all int32 aligned because they will be atomically updated
	TotalFileCount int32 `json:"fileCount"`
	CachedFiles    int32 `json:"cachedFiles"`
	NonCachedFiles int32 `json:"nonCachedFiles"`

	TotalDirectoryCount int32 `json:"dirCount"`

	ExcludedFileCount int32 `json:"excludedFileCount"`
	ExcludedDirCount  int32 `json:"excludedDirCount"`

	IgnoredErrorCount int32 `json:"ignoredErrorCount"`
	ErrorCount        int32 `json:"errorCount"`
}

Stats keeps track of snapshot generation statistics.

func (*Stats) AddExcluded

func (s *Stats) AddExcluded(md fs.Entry)

AddExcluded adds the information about excluded file to the statistics.

Directories

Path Synopsis
Package policy implements management of snapshot policies.
Package policy implements management of snapshot policies.
Package restore manages restoring filesystem snapshots.
Package restore manages restoring filesystem snapshots.
Package snapshotfs implements virtual filesystem on top of snapshots in repo.Repository.
Package snapshotfs implements virtual filesystem on top of snapshots in repo.Repository.
Package snapshotgc implements garbage collection of contents that are no longer referenced through snapshots.
Package snapshotgc implements garbage collection of contents that are no longer referenced through snapshots.
Package snapshotmaintenance provides helpers to run snapshot GC and low-level repository snapshotmaintenance.
Package snapshotmaintenance provides helpers to run snapshot GC and low-level repository snapshotmaintenance.

Jump to

Keyboard shortcuts

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