Add snapshot metadata store interface
Signed-off-by: Derek McGowan <derek@mcgstyle.net> (github: dmcgowan)
This commit is contained in:
parent
26fe49a7bc
commit
17e7e70fe2
1 changed files with 69 additions and 0 deletions
69
snapshot/storage/metastore.go
Normal file
69
snapshot/storage/metastore.go
Normal file
|
@ -0,0 +1,69 @@
|
|||
package storage
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/docker/containerd/snapshot"
|
||||
)
|
||||
|
||||
// MetaStore is used to store metadata related to a snapshot driver. The
|
||||
// MetaStore is intended to store metadata related to name, state and
|
||||
// parentage. Using the MetaStore is not required to implement a snapshot
|
||||
// driver but can be used to handle the persistence and transactional
|
||||
// complexities of a driver implementation.
|
||||
type MetaStore interface {
|
||||
// TransactionContext creates a new transaction context.
|
||||
TransactionContext(ctx context.Context, writable bool) (context.Context, Transactor, error)
|
||||
|
||||
// Stat returns the snapshot stat Info directly from
|
||||
// the metadata.
|
||||
Stat(ctx context.Context, key string) (snapshot.Info, error)
|
||||
|
||||
// Walk iterates through all metadata for the stored
|
||||
// snapshots and calls the provided function for each.
|
||||
Walk(ctx context.Context, fn func(context.Context, snapshot.Info) error) error
|
||||
|
||||
// CreateActive creates a new active snapshot transaction referenced by
|
||||
// the provided key. The new active snapshot will have the provided
|
||||
// parent. If the readonly option is given, the active snapshot will be
|
||||
// marked as readonly and can only be removed, and not committed. The
|
||||
// provided context must contain a writable transaction.
|
||||
CreateActive(ctx context.Context, key, parent string, readonly bool) (Active, error)
|
||||
|
||||
// GetActive returns the metadata for the active snapshot transaction
|
||||
// referenced by the given key.
|
||||
GetActive(ctx context.Context, key string) (Active, error)
|
||||
|
||||
// Remove removes a snapshot from the metastore. The provided context
|
||||
// must contain a writable transaction. The string identifier for the
|
||||
// snapshot is returned.
|
||||
Remove(ctx context.Context, key string) (string, error)
|
||||
|
||||
// Commit renames the active snapshot transaction referenced by `key`
|
||||
// as a committed snapshot referenced by `Name`. The resulting snapshot
|
||||
// will be committed and readonly. The `key` reference will no longer
|
||||
// be available for lookup or removal. The returned string identifier
|
||||
// for the committed snapshot is the same identifier of the original
|
||||
// active snapshot.
|
||||
Commit(ctx context.Context, key, name string) (string, error)
|
||||
}
|
||||
|
||||
// Transactor is used to finalize an active transaction.
|
||||
type Transactor interface {
|
||||
// Commit commits any changes made during the transaction.
|
||||
Commit() error
|
||||
|
||||
// Rollback rolls back any changes made during the transaction.
|
||||
Rollback() error
|
||||
}
|
||||
|
||||
// Active hold the metadata for an active snapshot transaction. The ParentIDs
|
||||
// hold the snapshot identifiers for the committed snapshots this active is
|
||||
// based on. The ParentIDs are ordered from the lowest base to highest, meaning
|
||||
// they should be applied in order from the first index to the last index. The
|
||||
// last index should always be considered the active snapshots immediate parent.
|
||||
type Active struct {
|
||||
ID string
|
||||
ParentIDs []string
|
||||
Readonly bool
|
||||
}
|
Loading…
Reference in a new issue