add cbt interfaces

Signed-off-by: Lyndon-Li <lyonghui@vmware.com>
This commit is contained in:
Lyndon-Li
2026-04-14 15:42:24 +08:00
parent 87b5445aac
commit 2ca4e46327
4 changed files with 72 additions and 2 deletions

View File

@@ -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

View File

@@ -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

49
pkg/uploader/cbt/set.go Normal file
View File

@@ -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
}