diff --git a/changelogs/unreleased/9716-Lyndon-Li‎‎ b/changelogs/unreleased/9716-Lyndon-Li similarity index 100% rename from changelogs/unreleased/9716-Lyndon-Li‎‎ rename to changelogs/unreleased/9716-Lyndon-Li diff --git a/pkg/cbtservice/service.go b/pkg/cbtservice/service.go index 3c9344fbe..96e43b2c4 100644 --- a/pkg/cbtservice/service.go +++ b/pkg/cbtservice/service.go @@ -24,6 +24,18 @@ type Range struct { Length int64 } +// SourceInfo is the information provided to the uploader, the uploader calls CBT service with this information +type SourceInfo struct { + // Snapshot is the identifier of the current snapshot + Snapshot string + + // ChangeID is the identifier associated to the current snapshot that is used as changeID for following backups + ChangeID string + + // VolumeID is the identifier uniquely identifier a volume in the storage to which the CBT is associated + VolumeID string +} + // Service defines the methods for CBT service which could be implemented by Kubernetes SnapshotMetadataService or other customized services type Service interface { // GetAllocatedBlocks enumerates the allocated blocks of the snapshot and call the record callback diff --git a/pkg/uploader/cbt/bitmap.go b/pkg/uploader/cbt/bitmap.go index 8e027cba6..6cf6e61e0 100644 --- a/pkg/uploader/cbt/bitmap.go +++ b/pkg/uploader/cbt/bitmap.go @@ -23,6 +23,15 @@ type Bitmap interface { // Set sets bits within the provided range Set(cbtservice.Range) + // SetFull sets all bits to the bitmap + SetFull() + + // Snapshot returns snapshot of the bitmap + SourceID() string + + // ChangeID returns the changeID of the bitmap + ChangeID() string + // Iterator returns the iterator for the CBT Bitmap Iterator() Iterator } @@ -32,8 +41,8 @@ type Iterator interface { // ChangeID returns the changeID of the bitmap ChangeID() string - // SnapshotID returns snapshotID of the bitmap - SnapshotID() string + // Snapshot returns snapshot of the bitmap + Snapshot() string // BlockSize returns the granularity of the bitmap BlockSize() int diff --git a/pkg/uploader/cbt/set.go b/pkg/uploader/cbt/set.go new file mode 100644 index 000000000..40e6e331c --- /dev/null +++ b/pkg/uploader/cbt/set.go @@ -0,0 +1,49 @@ +/* +Copyright The Velero Contributors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package cbt + +import ( + "context" + + "github.com/vmware-tanzu/velero/pkg/cbtservice" +) + +// SetBitmapOrFull translates the allocated/changed blocks from CBT service to the given bitmap or set the bitmap to full when error happens +func SetBitmapOrFull(ctx context.Context, service cbtservice.Service, bitmap Bitmap) error { + var err error + if bitmap.ChangeID() == "" { + err = setFromAllocatedBlocks(ctx, service, bitmap) + } else { + err = setFromChangedBlocks(ctx, service, bitmap) + } + + if err != nil { + bitmap.SetFull() + } + + return err +} + +// TODO implement in following PRs +func setFromAllocatedBlocks(_ context.Context, _ cbtservice.Service, _ Bitmap) error { + return nil +} + +// TODO implement in following PRs +func setFromChangedBlocks(_ context.Context, _ cbtservice.Service, _ Bitmap) error { + return nil +}