export makeTagKV, fetchPrevSnapshotManifest (#1750)
## Type of change - [x] 🐹 Trivial/Minor ## Issue(s) * #1725
This commit is contained in:
parent
edd0708285
commit
8b2489b60c
@ -42,7 +42,13 @@ func serviceCatTag(p path.Path) string {
|
|||||||
return p.Service().String() + p.Category().String()
|
return p.Service().String() + p.Category().String()
|
||||||
}
|
}
|
||||||
|
|
||||||
func makeTagKV(k string) (string, string) {
|
// MakeTagKV normalizes the provided key to protect it from clobbering
|
||||||
|
// similarly named tags from non-user input (user inputs are still open
|
||||||
|
// to collisions amongst eachother).
|
||||||
|
// Returns the normalized Key plus a default value. If you're embedding a
|
||||||
|
// key-only tag, the returned default value msut be used instead of an
|
||||||
|
// empty string.
|
||||||
|
func MakeTagKV(k string) (string, string) {
|
||||||
return userTagPrefix + k, defaultTagValue
|
return userTagPrefix + k, defaultTagValue
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -53,12 +59,12 @@ func tagsFromStrings(oc *OwnersCats) map[string]string {
|
|||||||
res := make(map[string]string, len(oc.ServiceCats)+len(oc.ResourceOwners))
|
res := make(map[string]string, len(oc.ServiceCats)+len(oc.ResourceOwners))
|
||||||
|
|
||||||
for k := range oc.ServiceCats {
|
for k := range oc.ServiceCats {
|
||||||
tk, tv := makeTagKV(k)
|
tk, tv := MakeTagKV(k)
|
||||||
res[tk] = tv
|
res[tk] = tv
|
||||||
}
|
}
|
||||||
|
|
||||||
for k := range oc.ResourceOwners {
|
for k := range oc.ResourceOwners {
|
||||||
tk, tv := makeTagKV(k)
|
tk, tv := MakeTagKV(k)
|
||||||
res[tk] = tv
|
res[tk] = tv
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -181,13 +187,14 @@ func fetchPrevManifests(
|
|||||||
return manifestsSinceLastComplete(mans), nil
|
return manifestsSinceLastComplete(mans), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// FetchPrevSnapshotManifests returns a set of manifests for complete and maybe
|
// fetchPrevSnapshotManifests returns a set of manifests for complete and maybe
|
||||||
// incomplete snapshots for the given (resource owner, service, category)
|
// incomplete snapshots for the given (resource owner, service, category)
|
||||||
// tuples. Up to two manifests can be returned per tuple: one complete and one
|
// tuples. Up to two manifests can be returned per tuple: one complete and one
|
||||||
// incomplete. An incomplete manifest may be returned if it is newer than the
|
// incomplete. An incomplete manifest may be returned if it is newer than the
|
||||||
// newest complete manifest for the tuple. Manifests are deduped such that if
|
// newest complete manifest for the tuple. Manifests are deduped such that if
|
||||||
// multiple tuples match the same manifest it will only be returned once.
|
// multiple tuples match the same manifest it will only be returned once.
|
||||||
func FetchPrevSnapshotManifests(
|
// External callers can access this via wrapper.FetchPrevSnapshotManifests().
|
||||||
|
func fetchPrevSnapshotManifests(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
sm snapshotManager,
|
sm snapshotManager,
|
||||||
oc *OwnersCats,
|
oc *OwnersCats,
|
||||||
@ -199,10 +206,10 @@ func FetchPrevSnapshotManifests(
|
|||||||
// we can pass in. Can be expanded to return more than the most recent
|
// we can pass in. Can be expanded to return more than the most recent
|
||||||
// snapshots, but may require more memory at runtime.
|
// snapshots, but may require more memory at runtime.
|
||||||
for serviceCat := range oc.ServiceCats {
|
for serviceCat := range oc.ServiceCats {
|
||||||
serviceTagKey, serviceTagValue := makeTagKV(serviceCat)
|
serviceTagKey, serviceTagValue := MakeTagKV(serviceCat)
|
||||||
|
|
||||||
for resourceOwner := range oc.ResourceOwners {
|
for resourceOwner := range oc.ResourceOwners {
|
||||||
resourceOwnerTagKey, resourceOwnerTagValue := makeTagKV(resourceOwner)
|
resourceOwnerTagKey, resourceOwnerTagValue := MakeTagKV(resourceOwner)
|
||||||
|
|
||||||
tags := map[string]string{
|
tags := map[string]string{
|
||||||
serviceTagKey: serviceTagValue,
|
serviceTagKey: serviceTagValue,
|
||||||
|
|||||||
@ -79,7 +79,7 @@ func newManifestInfo(
|
|||||||
structTags := make(map[string]struct{}, len(tags))
|
structTags := make(map[string]struct{}, len(tags))
|
||||||
|
|
||||||
for _, t := range tags {
|
for _, t := range tags {
|
||||||
tk, _ := makeTagKV(t)
|
tk, _ := MakeTagKV(t)
|
||||||
structTags[tk] = struct{}{}
|
structTags[tk] = struct{}{}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -442,7 +442,7 @@ func (suite *SnapshotFetchUnitSuite) TestFetchPrevSnapshots() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
snaps := FetchPrevSnapshotManifests(ctx, msm, test.input)
|
snaps := fetchPrevSnapshotManifests(ctx, msm, test.input)
|
||||||
|
|
||||||
expected := make([]*snapshot.Manifest, 0, len(test.expectedIdxs))
|
expected := make([]*snapshot.Manifest, 0, len(test.expectedIdxs))
|
||||||
for _, i := range test.expectedIdxs {
|
for _, i := range test.expectedIdxs {
|
||||||
@ -532,7 +532,7 @@ func (suite *SnapshotFetchUnitSuite) TestFetchPrevSnapshotsWorksWithErrors() {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
snaps := FetchPrevSnapshotManifests(ctx, msm, input)
|
snaps := fetchPrevSnapshotManifests(ctx, msm, input)
|
||||||
|
|
||||||
// Only 1 snapshot should be chosen because the other two attempts fail.
|
// Only 1 snapshot should be chosen because the other two attempts fail.
|
||||||
// However, which one is returned is non-deterministic because maps are used.
|
// However, which one is returned is non-deterministic because maps are used.
|
||||||
|
|||||||
@ -548,7 +548,7 @@ func (w Wrapper) makeSnapshotWithRoot(
|
|||||||
) (*BackupStats, error) {
|
) (*BackupStats, error) {
|
||||||
var man *snapshot.Manifest
|
var man *snapshot.Manifest
|
||||||
|
|
||||||
prevSnaps := FetchPrevSnapshotManifests(ctx, w.c, oc)
|
prevSnaps := fetchPrevSnapshotManifests(ctx, w.c, oc)
|
||||||
|
|
||||||
bc := &stats.ByteCounter{}
|
bc := &stats.ByteCounter{}
|
||||||
|
|
||||||
@ -782,3 +782,20 @@ func (w Wrapper) DeleteSnapshot(
|
|||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FetchPrevSnapshotManifests returns a set of manifests for complete and maybe
|
||||||
|
// incomplete snapshots for the given (resource owner, service, category)
|
||||||
|
// tuples. Up to two manifests can be returned per tuple: one complete and one
|
||||||
|
// incomplete. An incomplete manifest may be returned if it is newer than the
|
||||||
|
// newest complete manifest for the tuple. Manifests are deduped such that if
|
||||||
|
// multiple tuples match the same manifest it will only be returned once.
|
||||||
|
func (w Wrapper) FetchPrevSnapshotManifests(
|
||||||
|
ctx context.Context,
|
||||||
|
oc OwnersCats,
|
||||||
|
) ([]*snapshot.Manifest, error) {
|
||||||
|
if w.c == nil {
|
||||||
|
return nil, errors.WithStack(errNotConnected)
|
||||||
|
}
|
||||||
|
|
||||||
|
return fetchPrevSnapshotManifests(ctx, w.c, &oc), nil
|
||||||
|
}
|
||||||
|
|||||||
@ -859,7 +859,7 @@ func (suite *KopiaIntegrationSuite) TestBackupCollections() {
|
|||||||
expectedTags := map[string]string{}
|
expectedTags := map[string]string{}
|
||||||
|
|
||||||
for _, k := range baseTagKeys {
|
for _, k := range baseTagKeys {
|
||||||
tk, tv := makeTagKV(k)
|
tk, tv := MakeTagKV(k)
|
||||||
expectedTags[tk] = tv
|
expectedTags[tk] = tv
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user