Skip to content
This repository was archived by the owner on Mar 28, 2020. It is now read-only.

Commit 06fc1a9

Browse files
committed
backup: Use meta/v1.Time instead of time.Time
After I generated the code based on k8s object (zz_generated.deepcopy.go), we happened to be in failing to build. This is because all k8s custom resource's fileds should implement DeepCopyInto but time.Time we added doesn't implement it. For this purpose we should have used meta/v1.Time which is the implementation to implement all necessary function for k8s object and same function of time.Time. And also this commit include some refactoring which is pointed out in code-review
1 parent d519aa7 commit 06fc1a9

5 files changed

Lines changed: 18 additions & 24 deletions

File tree

pkg/apis/etcd/v1beta2/backup_types.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@
1515
package v1beta2
1616

1717
import (
18-
"time"
19-
2018
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2119
)
2220

@@ -117,7 +115,7 @@ type BackupStatus struct {
117115
// EtcdRevision is the revision of etcd's KV store where the backup is performed on.
118116
EtcdRevision int64 `json:"etcdRevision,omitempty"`
119117
// LastSuccessDate indicate the time to get snapshot last time
120-
LastSuccessDate time.Time `json:"lastSuccessDate,omitempty"`
118+
LastSuccessDate metav1.Time `json:"lastSuccessDate,omitempty"`
121119
}
122120

123121
// S3BackupSource provides the spec how to store backups on S3.

pkg/backup/backup_manager.go

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626

2727
"github.com/coreos/etcd/clientv3"
2828
"github.com/sirupsen/logrus"
29+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2930
"k8s.io/client-go/kubernetes"
3031
)
3132

@@ -53,31 +54,32 @@ func NewBackupManagerFromWriter(kubecli kubernetes.Interface, bw writer.Writer,
5354

5455
// SaveSnap uses backup writer to save etcd snapshot to a specified S3 path
5556
// and returns backup etcd server's kv store revision and its version.
56-
func (bm *BackupManager) SaveSnap(ctx context.Context, s3Path string, now time.Time, isPeriodic bool) (int64, string, error) {
57+
func (bm *BackupManager) SaveSnap(ctx context.Context, s3Path string, isPeriodic bool) (int64, string, *metav1.Time, error) {
58+
now := time.Now().UTC()
5759
etcdcli, rev, err := bm.etcdClientWithMaxRevision(ctx)
5860
if err != nil {
59-
return 0, "", fmt.Errorf("create etcd client failed: %v", err)
61+
return 0, "", nil, fmt.Errorf("create etcd client failed: %v", err)
6062
}
6163
defer etcdcli.Close()
6264

6365
resp, err := etcdcli.Status(ctx, etcdcli.Endpoints()[0])
6466
if err != nil {
65-
return 0, "", fmt.Errorf("failed to retrieve etcd version from the status call: %v", err)
67+
return 0, "", nil, fmt.Errorf("failed to retrieve etcd version from the status call: %v", err)
6668
}
6769

6870
rc, err := etcdcli.Snapshot(ctx)
6971
if err != nil {
70-
return 0, "", fmt.Errorf("failed to receive snapshot (%v)", err)
72+
return 0, "", nil, fmt.Errorf("failed to receive snapshot (%v)", err)
7173
}
7274
defer rc.Close()
7375
if isPeriodic {
7476
s3Path = fmt.Sprintf(s3Path+"_v%d_%s", rev, now.Format("2006-01-02-15:04:05"))
7577
}
7678
_, err = bm.bw.Write(ctx, s3Path, rc)
7779
if err != nil {
78-
return 0, "", fmt.Errorf("failed to write snapshot (%v)", err)
80+
return 0, "", nil, fmt.Errorf("failed to write snapshot (%v)", err)
7981
}
80-
return rev, resp.Version, nil
82+
return rev, resp.Version, &metav1.Time{now}, nil
8183
}
8284

8385
// EnsureMaxBackup to ensure the number of snapshot is under maxcount

pkg/controller/backup-operator/abs_backup.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import (
1818
"context"
1919
"crypto/tls"
2020
"fmt"
21-
"time"
2221

2322
api "github.com/coreos/etcd-operator/pkg/apis/etcd/v1beta2"
2423
"github.com/coreos/etcd-operator/pkg/backup"
@@ -41,18 +40,17 @@ func handleABS(ctx context.Context, kubecli kubernetes.Interface, s *api.ABSBack
4140
if tlsConfig, err = generateTLSConfig(kubecli, clientTLSSecret, namespace); err != nil {
4241
return nil, err
4342
}
44-
now := time.Now().UTC()
4543
bm := backup.NewBackupManagerFromWriter(kubecli, writer.NewABSWriter(cli.ABS), tlsConfig, endpoints, namespace)
4644

47-
rev, etcdVersion, err := bm.SaveSnap(ctx, s.Path, now, isPeriodic)
45+
rev, etcdVersion, now, err := bm.SaveSnap(ctx, s.Path, isPeriodic)
4846
if err != nil {
4947
return nil, fmt.Errorf("failed to save snapshot (%v)", err)
5048
}
5149
if maxBackup > 0 {
52-
err := bm.EnsureMaxbackup(ctx, s.Path, maxBackup)
50+
err := bm.EnsureMaxBackup(ctx, s.Path, maxBackup)
5351
if err != nil {
5452
return nil, fmt.Errorf("succeeded in saving snapshot but failed to delete old snapshot (%v)", err)
5553
}
5654
}
57-
return &api.BackupStatus{EtcdVersion: etcdVersion, EtcdRevision: rev, LastSuccessDate: now}, nil
55+
return &api.BackupStatus{EtcdVersion: etcdVersion, EtcdRevision: rev, LastSuccessDate: *now}, nil
5856
}

pkg/controller/backup-operator/gcs_backup.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import (
1818
"context"
1919
"crypto/tls"
2020
"fmt"
21-
"time"
2221

2322
api "github.com/coreos/etcd-operator/pkg/apis/etcd/v1beta2"
2423
"github.com/coreos/etcd-operator/pkg/backup"
@@ -42,18 +41,17 @@ func handleGCS(ctx context.Context, kubecli kubernetes.Interface, s *api.GCSBack
4241
if tlsConfig, err = generateTLSConfig(kubecli, clientTLSSecret, namespace); err != nil {
4342
return nil, err
4443
}
45-
now := time.Now().UTC()
4644
bm := backup.NewBackupManagerFromWriter(kubecli, writer.NewGCSWriter(cli.GCS), tlsConfig, endpoints, namespace)
4745

48-
rev, etcdVersion, err := bm.SaveSnap(ctx, s.Path, now, isPeriodic)
46+
rev, etcdVersion, now, err := bm.SaveSnap(ctx, s.Path, isPeriodic)
4947
if err != nil {
5048
return nil, fmt.Errorf("failed to save snapshot (%v)", err)
5149
}
5250
if maxBackup > 0 {
53-
err := bm.EnsureMaxbackup(ctx, s.Path, maxBackup)
51+
err := bm.EnsureMaxBackup(ctx, s.Path, maxBackup)
5452
if err != nil {
5553
return nil, fmt.Errorf("succeeded in saving snapshot but failed to delete old snapshot (%v)", err)
5654
}
5755
}
58-
return &api.BackupStatus{EtcdVersion: etcdVersion, EtcdRevision: rev, LastSuccessDate: now}, nil
56+
return &api.BackupStatus{EtcdVersion: etcdVersion, EtcdRevision: rev, LastSuccessDate: *now}, nil
5957
}

pkg/controller/backup-operator/s3_backup.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import (
1818
"context"
1919
"crypto/tls"
2020
"fmt"
21-
"time"
2221

2322
api "github.com/coreos/etcd-operator/pkg/apis/etcd/v1beta2"
2423
"github.com/coreos/etcd-operator/pkg/backup"
@@ -43,18 +42,17 @@ func handleS3(ctx context.Context, kubecli kubernetes.Interface, s *api.S3Backup
4342
if tlsConfig, err = generateTLSConfig(kubecli, clientTLSSecret, namespace); err != nil {
4443
return nil, err
4544
}
46-
now := time.Now().UTC()
4745
bm := backup.NewBackupManagerFromWriter(kubecli, writer.NewS3Writer(cli.S3), tlsConfig, endpoints, namespace)
4846

49-
rev, etcdVersion, err := bm.SaveSnap(ctx, s.Path, now, isPeriodic)
47+
rev, etcdVersion, now, err := bm.SaveSnap(ctx, s.Path, isPeriodic)
5048
if err != nil {
5149
return nil, fmt.Errorf("failed to save snapshot (%v)", err)
5250
}
5351
if maxBackup > 0 {
54-
err := bm.EnsureMaxbackup(ctx, s.Path, maxBackup)
52+
err := bm.EnsureMaxBackup(ctx, s.Path, maxBackup)
5553
if err != nil {
5654
return nil, fmt.Errorf("succeeded in saving snapshot but failed to delete old snapshot (%v)", err)
5755
}
5856
}
59-
return &api.BackupStatus{EtcdVersion: etcdVersion, EtcdRevision: rev, LastSuccessDate: now}, nil
57+
return &api.BackupStatus{EtcdVersion: etcdVersion, EtcdRevision: rev, LastSuccessDate: *now}, nil
6058
}

0 commit comments

Comments
 (0)