Documentation ¶
Index ¶
- func FindNonMissingSnapshot(mds Store, targetID snapshot.ID, baseCandidateIDs []snapshot.ID) (*snapshot.ID, blob.ID, error)
- func GetAllVolumes(mds Client) ([]*volume.Volume, error)
- func GetBlobID(mds Store, snapid snapshot.ID) (blob.ID, error)
- func GetBranch(mds Syncable, vsid volumeset.ID, branchid branch.ID) (*branch.Branch, error)
- func GetBranches(mds Syncable, q branch.Query) ([]*branch.Branch, error)
- func GetBushes(mds Store, vsid volumeset.ID) ([]*bush.Bush, error)
- func GetSnapshot(mds Syncable, id snapshot.ID) (*snapshot.Snapshot, error)
- func GetSnapshots(mds Syncable, q snapshot.Query) ([]*snapshot.Snapshot, error)
- func GetSnapshotsByBranch(mds Syncable, q branch.Query) ([]*snapshot.Snapshot, error)
- func GetVolume(mds Client, vid volume.ID) (*volume.Volume, error)
- func GetVolumeSet(mds Syncable, id volumeset.ID) (*volumeset.VolumeSet, error)
- func GetVolumeSetBySnapID(mds Store, sid snapshot.ID) (volumeset.ID, error)
- func GetVolumeSets(mds Syncable, q volumeset.Query) ([]*volumeset.VolumeSet, error)
- func GetVolumes(mds Client, vsid volumeset.ID) ([]*volume.Volume, error)
- func RenameBranch(mds Store, vsid volumeset.ID, oldName, newName string) error
- func RequestBlobDiff(mds Store, targetID snapshot.ID, baseCandidateIDs []snapshot.ID) (*snapshot.ID, blob.ID, blob.ID, error)
- func SnapshotExtend(mds Store, ssid snapshot.ID, parentID *snapshot.ID, blobid blob.ID, ...) (*snapshot.Snapshot, error)
- func SnapshotFork(mds Store, vsid volumeset.ID, ssid snapshot.ID, branchName string, ...) (*snapshot.Snapshot, error)
- func UpdateSnapshot(mds Store, snap *snapshot.Snapshot) error
- func UpdateVolume(mds Client, v *volume.Volume) error
- func UpdateVolumeSet(mds Syncable, vs *volumeset.VolumeSet) error
- func ValidateBranchName(name string) error
- func VolumeSet(mds Syncable, n string, p string, a attrs.Attrs, d string, o, c string) (*volumeset.VolumeSet, error)
- type BranchMetaConflict
- type Client
- type ErrAlreadyHaveBlob
- type ErrBranchNotFound
- type ErrSnapshotImportMismatch
- type ErrSnapshotNotFound
- type ErrVolumeNotFound
- type ErrVolumeSetAlreadyExists
- type ErrVolumeSetNotFound
- type MdsTriplet
- type MdsTuple
- type ResolveStatus
- type Server
- type SnapMetaConflict
- type SnapshotPair
- type Store
- type SyncMode
- type Syncable
- type VSMetaConflict
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func FindNonMissingSnapshot ¶
func FindNonMissingSnapshot( mds Store, targetID snapshot.ID, baseCandidateIDs []snapshot.ID, ) (*snapshot.ID, blob.ID, error)
FindNonMissingSnapshot walks the given snapshot list backwards, returns the first snapshot that the meta data store doesn't have, it can be used as the upload base.
Assumptions: 1. baseCandidateIDs[] is a list of snapshots from oldest to newest 2. If a store has blob A, then it has all blobs older than A
func GetBranches ¶
GetBranches ..
func GetBushes ¶
GetBushes all bushes of a volume set Note: This is slow, since it is not used often, ok to do it this way for now instead of going to DB
func GetSnapshot ¶
GetSnapshot is a wrapper for reading a snapshot by ID.
func GetSnapshots ¶
GetSnapshots gets all the mds's snapshots and filters them based on query.
func GetSnapshotsByBranch ¶
GetSnapshotsByBranch finds all snapshots that belongs to a particular branch. The order will be from tip to the root.
func GetVolumeSet ¶
GetVolumeSet ..
func GetVolumeSetBySnapID ¶
GetVolumeSetBySnapID retrieves a volumeset id by a snapshot id(assume snapshot id is globally unique)
func GetVolumeSets ¶
GetVolumeSets ..
func GetVolumes ¶
GetVolumes calls MDS client's update volumes
func RenameBranch ¶
RenameBranch wraps the MDS's rename name branch
func RequestBlobDiff ¶
func RequestBlobDiff( mds Store, targetID snapshot.ID, baseCandidateIDs []snapshot.ID, ) (*snapshot.ID, blob.ID, blob.ID, error)
RequestBlobDiff asks the MDS to share a blob diff which will produce the blob for a particular snapshot. The MDS can select from a slice of base blobs on which to base the diff. It can also decline to share the diff entirely.
func SnapshotExtend ¶
func SnapshotExtend( mds Store, ssid snapshot.ID, parentID *snapshot.ID, blobid blob.ID, a attrs.Attrs, name string, size uint64, desc string, ) (*snapshot.Snapshot, error)
SnapshotExtend creates a new snapshot and makes it the new tip of an existing branch.
func SnapshotFork ¶
func SnapshotFork( mds Store, vsid volumeset.ID, ssid snapshot.ID, branchName string, parentID *snapshot.ID, blobid blob.ID, a attrs.Attrs, name string, size uint64, desc string, ) (*snapshot.Snapshot, error)
SnapshotFork creates a new snapshot and makes it the tip of the indicated branch name.
func UpdateSnapshot ¶
UpdateSnapshot calls MDS's update snapshot, it might update some of the snapshott's field before calling, for example, set last motified time to current time.
func UpdateVolume ¶
UpdateVolume calls MDS client's update volume
func UpdateVolumeSet ¶
UpdateVolumeSet calls MDS's update volume set, it might update some of the volume set's field before calling, for example, set volume set's last motified time to current time.
Types ¶
type BranchMetaConflict ¶
BranchMetaConflict - array of these is used for reporting conflicts in branch metadata
type Client ¶
type Client interface { Store // ImportVolume ... ImportVolume(v *volume.Volume) error // GetVolume ... GetVolume(vid volume.ID) (*volume.Volume, error) // DeleteVolume ... DeleteVolume(vid volume.ID) error // GetVolumes returns all volumes that belongs to the given volumeset ordered by the // volume's ID in ascending order GetVolumes(vsid volumeset.ID) ([]*volume.Volume, error) // UpdateVolume ... UpdateVolume(v *volume.Volume) error // NumVolumes returns the number of volumes created from the given snapshot NumVolumes(snapid snapshot.ID) (int, error) // NumChildren returns number of snapshots created from the given snapshot NumChildren(snapid snapshot.ID) (int, error) // DeleteSnapshots deletes a series of snapshots DeleteSnapshots(snaps []*snapshot.Snapshot, tip *snapshot.Snapshot) error }
Client supports volume, and it can be used a client like dpcli.
type ErrAlreadyHaveBlob ¶
type ErrAlreadyHaveBlob struct{}
ErrAlreadyHaveBlob is returned when an offer is made for a blob diff but the blob data is already present and the offer is declined.
func (*ErrAlreadyHaveBlob) Error ¶
func (e *ErrAlreadyHaveBlob) Error() string
type ErrBranchNotFound ¶
type ErrBranchNotFound struct{}
ErrBranchNotFound ...
func (*ErrBranchNotFound) Error ¶
func (e *ErrBranchNotFound) Error() string
type ErrSnapshotImportMismatch ¶
type ErrSnapshotImportMismatch struct{}
ErrSnapshotImportMismatch ...
func (*ErrSnapshotImportMismatch) Error ¶
func (e *ErrSnapshotImportMismatch) Error() string
type ErrSnapshotNotFound ¶
type ErrSnapshotNotFound struct{}
ErrSnapshotNotFound ...
func (*ErrSnapshotNotFound) Error ¶
func (e *ErrSnapshotNotFound) Error() string
type ErrVolumeNotFound ¶
type ErrVolumeNotFound struct{}
ErrVolumeNotFound ..
func (*ErrVolumeNotFound) Error ¶
func (e *ErrVolumeNotFound) Error() string
type ErrVolumeSetAlreadyExists ¶
type ErrVolumeSetAlreadyExists struct{}
ErrVolumeSetAlreadyExists ...
func (*ErrVolumeSetAlreadyExists) Error ¶
func (e *ErrVolumeSetAlreadyExists) Error() string
type ErrVolumeSetNotFound ¶
type ErrVolumeSetNotFound struct{}
ErrVolumeSetNotFound ....
func (*ErrVolumeSetNotFound) Error ¶
func (e *ErrVolumeSetNotFound) Error() string
type MdsTriplet ¶
type MdsTriplet struct {
Tgt, Cur, Init Syncable
}
MdsTriplet holds 3 stores for syncs and conflict resolution. Used for push and conflict resolution.
type MdsTuple ¶
type MdsTuple struct {
Tgt, Cur Syncable
}
MdsTuple holds 2 stores for pull operations. Pull has no conflict resolution
type ResolveStatus ¶
type ResolveStatus int
ResolveStatus ..
const ( // NoAction = all three versions are the same, no action required NoAction ResolveStatus = iota // UseCurrent = current has changed while target and initial are not UseCurrent // UseTgtNoConflict = target changed while current and initial are not UseTgtNoConflict // UseTgtConflict = target and current both have changed UseTgtConflict )
type Server ¶
type Server interface { Store // DiskSpaceUsage returns disk space used by all given volume sets DiskSpaceUsage(vsids []volumeset.ID) (uint64, error) }
Server supports disk space usage, likely used by a volume hub server.
type SnapMetaConflict ¶
type SnapMetaConflict struct { Tgt *snapshot.Snapshot `json:"target"` Cur *snapshot.Snapshot `json:"current"` Init *snapshot.Snapshot `json:"init"` }
SnapMetaConflict - array of these is used for reporting conflicts in snap metadata
type SnapshotPair ¶
type SnapshotPair struct { // Cur is the current and latest version of the snapshot Cur *snapshot.Snapshot // Init is the version that Cur is based on Init *snapshot.Snapshot }
SnapshotPair holds a pair of snapshots. It is a helper struct for updating a batch of snapshots.
type Store ¶
type Store interface { Syncable // SetVolumeSetSize updates a volume set's size // Note: Didn't want to overload UpdateVolumeSet() because want this be explicitly called. SetVolumeSetSize(vsid volumeset.ID, size uint64) error // UpdateSnapshot updates one snapshot UpdateSnapshot(snapCur, snapInit *snapshot.Snapshot) (SnapMetaConflict, error) // DeleteVolumeSet irrevocably discards the data associated with the // given unique identifier DeleteVolumeSet(vsid volumeset.ID) error // RenameBranch changes the name of an existing branch. RenameBranch(vsid volumeset.ID, oldName, newName string) error // ImportBush creates a new bush ImportBush(bush *bush.Bush) error // GetBush retrieves a bush by any snapshot id GetBush(snapid snapshot.ID) (*bush.Bush, error) // DeleteBush deletes a bush DeleteBush(root snapshot.ID) error // GetBlobIDs looks up a blob previously associated with a snapshot. If there // is no such association, a nil blob identifier is returned. GetBlobIDs(snapids []snapshot.ID) (map[snapshot.ID]blob.ID, error) // SetBlobIDAndSize sets a snapshot's blob id and disk space used by the blob SetBlobIDAndSize(snapshot.ID, blob.ID, uint64) error }
Store is the basic MDS who supports all interfaces but client side of things (like volume). It can be used by dataplane server.
type Syncable ¶
type Syncable interface { // ImportVolumeSet creates a new volumeset. ImportVolumeSet(vs *volumeset.VolumeSet) error // GetVolumeSets .. GetVolumeSets(q volumeset.Query) ([]*volumeset.VolumeSet, error) // GetTip returns the tip of the named branch, or an error if the branch doesn't exist. GetTip(vsid volumeset.ID, branch string) (*snapshot.Snapshot, error) // GetBranches returns the names of all the branches in the volumeset. GetBranches(q branch.Query) ([]*branch.Branch, error) // ForkBranch creates a new branch with the given snapshots, branch name can be empty. // The new branch is forked off the first snapshot's parent; parent can be nil which means this is a // brand new branch. // A new random branch id is generated. // Assumes the given snapshots belong to the same lineage(snapshots[i] is the parent of snapshots[i-1]). ForkBranch(branchName string, snapshots ...*snapshot.Snapshot) error // ExtendBranch extends an existing branch with the given snapshots. ExtendBranch(snapshots ...*snapshot.Snapshot) error // ImportBranch is similar to ForkBranch() but with a given branch id. ImportBranch(branchID branch.ID, branchName string, snapshots ...*snapshot.Snapshot) error // UpdateVolumeSet updates a volume set's meta data based on the given set of // volume sets. Current is what the caller's current desired value, initial is the caller's // had before the change to current. // Based on the two volume set(or one, initial can be empty), target decides what to do // based on the three way sync protocol, details in postgres or sqlite3 implementation. UpdateVolumeSet(vsCur, vsInit *volumeset.VolumeSet) (VSMetaConflict, error) // PullVolumeSet is almost identical to UpdateVolumeSet except it doesn't actully update target. PullVolumeSet(vsCur, vsInit *volumeset.VolumeSet) (VSMetaConflict, error) // UpdateSnapshots updates an array of snapshots similar to UpdateVolumeSets UpdateSnapshots([]*SnapshotPair) ([]SnapMetaConflict, error) // PullSnapshots is almost identical to UpdateSnapshots except it doesn't actully update target. PullSnapshots([]*SnapshotPair) ([]SnapMetaConflict, error) // GetSnapshots ... GetSnapshots(q snapshot.Query) ([]*snapshot.Snapshot, error) // GetSnapshotIDs returns IDs of all snapshots in a volume set. // Returns empty [] when there is no snapshot in the volume set. GetSnapshotIDs(vsid volumeset.ID) ([]snapshot.ID, error) }
Syncable supports all volumeset related methods and can be used for sync meta data between two meta data storages. This is used by restful MDS to transfer meta from one MDS to another.