mirror of
https://github.com/ceph/ceph-csi.git
synced 2025-01-17 10:19:30 +00:00
rbd: have GetCreationTime() return a time.Time struct
Do not use protobuf types when there is no need. Just use the standard time.Time format instead. Signed-off-by: Niels de Vos <ndevos@ibm.com>
This commit is contained in:
parent
2fd92573f4
commit
6d1ab1b8d9
@ -520,7 +520,7 @@ func (rs *ReplicationServer) DemoteVolume(ctx context.Context,
|
|||||||
return nil, status.Error(codes.Internal, err.Error())
|
return nil, status.Error(codes.Internal, err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
creationTime, err := rbdVol.GetCreationTime()
|
creationTime, err := rbdVol.GetCreationTime(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.ErrorLog(ctx, err.Error())
|
log.ErrorLog(ctx, err.Error())
|
||||||
|
|
||||||
@ -693,7 +693,7 @@ func (rs *ReplicationServer) ResyncVolume(ctx context.Context,
|
|||||||
ready = checkRemoteSiteStatus(ctx, sts.GetAllSitesStatus())
|
ready = checkRemoteSiteStatus(ctx, sts.GetAllSitesStatus())
|
||||||
}
|
}
|
||||||
|
|
||||||
creationTime, err := rbdVol.GetCreationTime()
|
creationTime, err := rbdVol.GetCreationTime(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, status.Errorf(codes.Internal, "failed to get image info for %s: %s", rbdVol, err.Error())
|
return nil, status.Errorf(codes.Internal, "failed to get image info for %s: %s", rbdVol, err.Error())
|
||||||
}
|
}
|
||||||
@ -717,8 +717,8 @@ func (rs *ReplicationServer) ResyncVolume(ctx context.Context,
|
|||||||
if sErr != nil {
|
if sErr != nil {
|
||||||
return nil, status.Errorf(codes.Internal, "failed to parse image creation time: %s", sErr.Error())
|
return nil, status.Errorf(codes.Internal, "failed to parse image creation time: %s", sErr.Error())
|
||||||
}
|
}
|
||||||
log.DebugLog(ctx, "image %s, savedImageTime=%v, currentImageTime=%v", rbdVol, st, creationTime.AsTime())
|
log.DebugLog(ctx, "image %s, savedImageTime=%v, currentImageTime=%v", rbdVol, st, creationTime)
|
||||||
if req.GetForce() && st.Equal(creationTime.AsTime()) {
|
if req.GetForce() && st.Equal(*creationTime) {
|
||||||
err = mirror.Resync(ctx)
|
err = mirror.Resync(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, getGRPCError(err)
|
return nil, getGRPCError(err)
|
||||||
@ -746,8 +746,8 @@ func (rs *ReplicationServer) ResyncVolume(ctx context.Context,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// timestampToString converts the time.Time object to string.
|
// timestampToString converts the time.Time object to string.
|
||||||
func timestampToString(st *timestamppb.Timestamp) string {
|
func timestampToString(st *time.Time) string {
|
||||||
return fmt.Sprintf("seconds:%d nanos:%d", st.GetSeconds(), st.GetNanos())
|
return fmt.Sprintf("seconds:%d nanos:%d", st.Unix(), st.Nanosecond())
|
||||||
}
|
}
|
||||||
|
|
||||||
// timestampFromString parses the timestamp string and returns the time.Time
|
// timestampFromString parses the timestamp string and returns the time.Time
|
||||||
|
@ -617,7 +617,7 @@ func TestGetGRPCError(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func Test_timestampFromString(t *testing.T) {
|
func Test_timestampFromString(t *testing.T) {
|
||||||
tm := timestamppb.Now()
|
tm := time.Now()
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
@ -627,8 +627,8 @@ func Test_timestampFromString(t *testing.T) {
|
|||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "valid timestamp",
|
name: "valid timestamp",
|
||||||
timestamp: timestampToString(tm),
|
timestamp: timestampToString(&tm),
|
||||||
want: tm.AsTime().Local(),
|
want: tm,
|
||||||
wantErr: false,
|
wantErr: false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -669,8 +669,8 @@ func Test_timestampFromString(t *testing.T) {
|
|||||||
if (err != nil) != tt.wantErr {
|
if (err != nil) != tt.wantErr {
|
||||||
t.Errorf("timestampFromString() error = %v, wantErr %v", err, tt.wantErr)
|
t.Errorf("timestampFromString() error = %v, wantErr %v", err, tt.wantErr)
|
||||||
}
|
}
|
||||||
if !reflect.DeepEqual(got, tt.want) {
|
if !tt.want.Equal(got) {
|
||||||
t.Errorf("timestampFromString() = %v, want %v", got, tt.want)
|
t.Errorf("timestampFromString() = %q, want %q", got, tt.want)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -32,6 +32,7 @@ import (
|
|||||||
"github.com/kubernetes-csi/csi-lib-utils/protosanitizer"
|
"github.com/kubernetes-csi/csi-lib-utils/protosanitizer"
|
||||||
"google.golang.org/grpc/codes"
|
"google.golang.org/grpc/codes"
|
||||||
"google.golang.org/grpc/status"
|
"google.golang.org/grpc/status"
|
||||||
|
"google.golang.org/protobuf/types/known/timestamppb"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -1240,7 +1241,7 @@ func (cs *ControllerServer) CreateSnapshot(
|
|||||||
SizeBytes: vol.VolSize,
|
SizeBytes: vol.VolSize,
|
||||||
SnapshotId: vol.VolID,
|
SnapshotId: vol.VolID,
|
||||||
SourceVolumeId: req.GetSourceVolumeId(),
|
SourceVolumeId: req.GetSourceVolumeId(),
|
||||||
CreationTime: vol.CreatedAt,
|
CreationTime: timestamppb.New(*vol.CreatedAt),
|
||||||
ReadyToUse: true,
|
ReadyToUse: true,
|
||||||
},
|
},
|
||||||
}, nil
|
}, nil
|
||||||
@ -1300,7 +1301,7 @@ func cloneFromSnapshot(
|
|||||||
SizeBytes: rbdSnap.VolSize,
|
SizeBytes: rbdSnap.VolSize,
|
||||||
SnapshotId: rbdSnap.VolID,
|
SnapshotId: rbdSnap.VolID,
|
||||||
SourceVolumeId: rbdSnap.SourceVolumeID,
|
SourceVolumeId: rbdSnap.SourceVolumeID,
|
||||||
CreationTime: rbdSnap.CreatedAt,
|
CreationTime: timestamppb.New(*rbdSnap.CreatedAt),
|
||||||
ReadyToUse: true,
|
ReadyToUse: true,
|
||||||
},
|
},
|
||||||
}, nil
|
}, nil
|
||||||
|
@ -36,8 +36,6 @@ import (
|
|||||||
librbd "github.com/ceph/go-ceph/rbd"
|
librbd "github.com/ceph/go-ceph/rbd"
|
||||||
"github.com/ceph/go-ceph/rbd/admin"
|
"github.com/ceph/go-ceph/rbd/admin"
|
||||||
"github.com/container-storage-interface/spec/lib/go/csi"
|
"github.com/container-storage-interface/spec/lib/go/csi"
|
||||||
"github.com/golang/protobuf/ptypes/timestamp"
|
|
||||||
"google.golang.org/protobuf/types/known/timestamppb"
|
|
||||||
"k8s.io/apimachinery/pkg/util/sets"
|
"k8s.io/apimachinery/pkg/util/sets"
|
||||||
"k8s.io/cloud-provider/volume/helpers"
|
"k8s.io/cloud-provider/volume/helpers"
|
||||||
mount "k8s.io/mount-utils"
|
mount "k8s.io/mount-utils"
|
||||||
@ -138,7 +136,7 @@ type rbdImage struct {
|
|||||||
// fileEncryption provides access to optional VolumeEncryption functions (e.g fscrypt)
|
// fileEncryption provides access to optional VolumeEncryption functions (e.g fscrypt)
|
||||||
fileEncryption *util.VolumeEncryption
|
fileEncryption *util.VolumeEncryption
|
||||||
|
|
||||||
CreatedAt *timestamp.Timestamp
|
CreatedAt *time.Time
|
||||||
|
|
||||||
// conn is a connection to the Ceph cluster obtained from a ConnPool
|
// conn is a connection to the Ceph cluster obtained from a ConnPool
|
||||||
conn *util.ClusterConnection
|
conn *util.ClusterConnection
|
||||||
@ -1595,7 +1593,7 @@ func (rv *rbdVolume) setImageOptions(ctx context.Context, options *librbd.ImageO
|
|||||||
|
|
||||||
// GetCreationTime returns the creation time of the image. if the image
|
// GetCreationTime returns the creation time of the image. if the image
|
||||||
// creation time is not set, it queries the image info and returns the creation time.
|
// creation time is not set, it queries the image info and returns the creation time.
|
||||||
func (ri *rbdImage) GetCreationTime() (*timestamppb.Timestamp, error) {
|
func (ri *rbdImage) GetCreationTime(ctx context.Context) (*time.Time, error) {
|
||||||
if ri.CreatedAt != nil {
|
if ri.CreatedAt != nil {
|
||||||
return ri.CreatedAt, nil
|
return ri.CreatedAt, nil
|
||||||
}
|
}
|
||||||
@ -1648,8 +1646,9 @@ func (ri *rbdImage) getImageInfo() error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
t := time.Unix(tm.Sec, tm.Nsec)
|
t := time.Unix(tm.Sec, tm.Nsec)
|
||||||
ri.CreatedAt = timestamppb.New(t)
|
ri.CreatedAt = &t
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,9 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/container-storage-interface/spec/lib/go/csi"
|
||||||
|
"google.golang.org/protobuf/types/known/timestamppb"
|
||||||
|
|
||||||
"github.com/ceph/ceph-csi/internal/util"
|
"github.com/ceph/ceph-csi/internal/util"
|
||||||
"github.com/ceph/ceph-csi/internal/util/log"
|
"github.com/ceph/ceph-csi/internal/util/log"
|
||||||
)
|
)
|
||||||
@ -118,6 +121,16 @@ func (rbdSnap *rbdSnapshot) toVolume() *rbdVolume {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (rbdSnap *rbdSnapshot) ToCSI(ctx context.Context) (*csi.Snapshot, error) {
|
||||||
|
return &csi.Snapshot{
|
||||||
|
SizeBytes: rbdSnap.VolSize,
|
||||||
|
SnapshotId: rbdSnap.VolID,
|
||||||
|
SourceVolumeId: rbdSnap.SourceVolumeID,
|
||||||
|
CreationTime: timestamppb.New(*rbdSnap.CreatedAt),
|
||||||
|
ReadyToUse: true,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
func undoSnapshotCloning(
|
func undoSnapshotCloning(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
parentVol *rbdVolume,
|
parentVol *rbdVolume,
|
||||||
|
@ -18,9 +18,9 @@ package types
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/container-storage-interface/spec/lib/go/csi"
|
"github.com/container-storage-interface/spec/lib/go/csi"
|
||||||
"google.golang.org/protobuf/types/known/timestamppb"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
//nolint:interfacebloat // more than 10 methods are needed for the interface
|
//nolint:interfacebloat // more than 10 methods are needed for the interface
|
||||||
@ -42,7 +42,8 @@ type Volume interface {
|
|||||||
RemoveFromGroup(ctx context.Context, vg VolumeGroup) error
|
RemoveFromGroup(ctx context.Context, vg VolumeGroup) error
|
||||||
|
|
||||||
// GetCreationTime returns the creation time of the volume.
|
// GetCreationTime returns the creation time of the volume.
|
||||||
GetCreationTime() (*timestamppb.Timestamp, error)
|
GetCreationTime(ctx context.Context) (*time.Time, error)
|
||||||
|
|
||||||
// GetMetadata returns the value of the metadata key from the volume.
|
// GetMetadata returns the value of the metadata key from the volume.
|
||||||
GetMetadata(key string) (string, error)
|
GetMetadata(key string) (string, error)
|
||||||
// SetMetadata sets the value of the metadata key on the volume.
|
// SetMetadata sets the value of the metadata key on the volume.
|
||||||
|
Loading…
Reference in New Issue
Block a user