From f885c77f4e5c8d792407390396e639f5df15a6e5 Mon Sep 17 00:00:00 2001 From: Niels de Vos Date: Tue, 1 Oct 2024 10:27:03 +0200 Subject: [PATCH 1/2] rbd: use `GetCreationTime()` to build the CSI-Snapshot object Signed-off-by: Niels de Vos --- internal/rbd/rbd_util.go | 4 ++++ internal/rbd/snapshot.go | 7 ++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/internal/rbd/rbd_util.go b/internal/rbd/rbd_util.go index 3b72b7c4c86..d623327a837 100644 --- a/internal/rbd/rbd_util.go +++ b/internal/rbd/rbd_util.go @@ -1641,6 +1641,10 @@ func (ri *rbdImage) GetCreationTime(ctx context.Context) (*time.Time, error) { return nil, err } + if ri.CreatedAt == nil { + return nil, fmt.Errorf("failed to get creation time for image %q", ri) + } + return ri.CreatedAt, nil } diff --git a/internal/rbd/snapshot.go b/internal/rbd/snapshot.go index d0234e8ca58..e903a74f3aa 100644 --- a/internal/rbd/snapshot.go +++ b/internal/rbd/snapshot.go @@ -145,11 +145,16 @@ func (rbdSnap *rbdSnapshot) toVolume() *rbdVolume { } func (rbdSnap *rbdSnapshot) ToCSI(ctx context.Context) (*csi.Snapshot, error) { + created, err := rbdSnap.GetCreationTime(ctx) + if err != nil { + return nil, err + } + return &csi.Snapshot{ SizeBytes: rbdSnap.VolSize, SnapshotId: rbdSnap.VolID, SourceVolumeId: rbdSnap.SourceVolumeID, - CreationTime: timestamppb.New(*rbdSnap.CreatedAt), + CreationTime: timestamppb.New(*created), ReadyToUse: true, }, nil } From a51a6ae43a177008f2f54c82579c201cf1845509 Mon Sep 17 00:00:00 2001 From: Niels de Vos Date: Fri, 4 Oct 2024 12:20:04 +0200 Subject: [PATCH 2/2] rbd: add types.Snapshot interface The rbdSnapshot/rbdImage object implements all functions for a useful Snapshot interface. The rbd.Manager will be able to use this for providing VolumeGroupSnapshot support. Signed-off-by: Niels de Vos --- internal/rbd/types/snapshot.go | 38 ++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 internal/rbd/types/snapshot.go diff --git a/internal/rbd/types/snapshot.go b/internal/rbd/types/snapshot.go new file mode 100644 index 00000000000..90e4ef13e79 --- /dev/null +++ b/internal/rbd/types/snapshot.go @@ -0,0 +1,38 @@ +/* +Copyright 2024 The Ceph-CSI Authors. + +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 types + +import ( + "context" + "time" + + "github.com/container-storage-interface/spec/lib/go/csi" +) + +type Snapshot interface { + journalledObject + + // Destroy frees the resources used by the Snapshot. + Destroy(ctx context.Context) + + // Delete removes the snapshot from the storage backend. + Delete(ctx context.Context) error + + ToCSI(ctx context.Context) (*csi.Snapshot, error) + + GetCreationTime(ctx context.Context) (*time.Time, error) +}