add cbt interfaces

Signed-off-by: Lyndon-Li <lyonghui@vmware.com>
This commit is contained in:
Lyndon-Li
2026-04-13 16:28:28 +08:00
parent eaef4ead42
commit 97ffb9eaaf
3 changed files with 81 additions and 0 deletions

View File

@@ -0,0 +1 @@
Fix issue #9709, add interfaces for CBT service and CBT bitmap

34
pkg/cbtservice/service.go Normal file
View File

@@ -0,0 +1,34 @@
/*
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 cbtservice
import "context"
// Range defines the range of a change
type Range struct {
Offset int64
Length int64
}
// 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
GetAllocatedBlocks(ctx context.Context, snapshot string, record func([]Range) error) error
// GetChangedBlocks enumerates the changed blocks of the snapshot since PIT of changeID and call the record callback
GetChangedBlocks(ctx context.Context, snapshot string, changeID string, record func([]Range) error) error
}

View File

@@ -0,0 +1,46 @@
/*
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 "github.com/vmware-tanzu/velero/pkg/cbtservice"
// Bitmap defines the methods to store and iterate the CBT bitmap
type Bitmap interface {
// Set sets bits within the provided range
Set(cbtservice.Range)
// Iterator returns the iterator for the CBT Bitmap
Iterator() Iterator
}
// Iterator defines the methods to iterate the CBT bitmap and query the associated information
type Iterator interface {
// ChangeID returns the changeID of the bitmap
ChangeID() string
// SnapshotID returns snapshotID of the bitmap
SnapshotID() string
// BlockSize returns the granularity of the bitmap
BlockSize() int
// Count returns the toal number of count in the bitmap
Count() uint64
// Next returns the offset of the next set block and whether it comes to the end of the iteration
Next() (int64, bool)
}