diff --git a/changelogs/unreleased/9716-Lyndon-Li‎‎ b/changelogs/unreleased/9716-Lyndon-Li‎‎ new file mode 100644 index 000000000..5e51e7aaf --- /dev/null +++ b/changelogs/unreleased/9716-Lyndon-Li‎‎ @@ -0,0 +1 @@ +Fix issue #9709, add interfaces for CBT service and CBT bitmap \ No newline at end of file diff --git a/pkg/cbtservice/service.go b/pkg/cbtservice/service.go new file mode 100644 index 000000000..3c9344fbe --- /dev/null +++ b/pkg/cbtservice/service.go @@ -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 +} diff --git a/pkg/uploader/cbt/bitmap.go b/pkg/uploader/cbt/bitmap.go new file mode 100644 index 000000000..8e027cba6 --- /dev/null +++ b/pkg/uploader/cbt/bitmap.go @@ -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) +}