-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Add CBT interfaces for block data mover #9716
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
97ffb9e
e855eae
87b5445
2ca4e46
256e106
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| Fix issue #9709, add interfaces for CBT service and CBT bitmap |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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 cbtservice | ||
|
|
||
| import "context" | ||
|
|
||
| // Range defines the range of a change | ||
| type Range struct { | ||
| Offset int64 | ||
| 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 | ||
|
kaovilai marked this conversation as resolved.
|
||
| 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 | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. To maintain consistency with the SnapshotMetadataService specification, should we align the input parameters of Same for the method "GetAllocatedBlocks".
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This was covered in the design perhaps to be abstract just in case.
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is an abstraction provided by Velero, as the design shared by @kaovilai, this abstraction is for the below purpose:
Because of 1, the abstraction just purposefully avoids to use the primatives from Kubernetes upstream, e.g., in the upstream |
||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,55 @@ | ||
| /* | ||
| 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) | ||
|
|
||
| // 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 | ||
| } | ||
|
|
||
| // 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 | ||
|
|
||
| // Snapshot returns snapshot of the bitmap | ||
| Snapshot() 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) | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,49 @@ | ||
| /* | ||
| Copyright The Velero Contributors. | ||
|
|
||
| Licensed under the Apache License, Version 2.0 (the "License"); | ||
|
Lyndon-Li marked this conversation as resolved.
|
||
| 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 | ||
| } | ||
Uh oh!
There was an error while loading. Please reload this page.