diff --git a/pkg/apis/etcd/v1beta2/backup_types.go b/pkg/apis/etcd/v1beta2/backup_types.go index 621dbf964..90790c201 100644 --- a/pkg/apis/etcd/v1beta2/backup_types.go +++ b/pkg/apis/etcd/v1beta2/backup_types.go @@ -15,8 +15,6 @@ package v1beta2 import ( - "time" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -117,7 +115,7 @@ type BackupStatus struct { // EtcdRevision is the revision of etcd's KV store where the backup is performed on. EtcdRevision int64 `json:"etcdRevision,omitempty"` // LastSuccessDate indicate the time to get snapshot last time - LastSuccessDate time.Time `json:"lastSuccessDate,omitempty"` + LastSuccessDate metav1.Time `json:"lastSuccessDate,omitempty"` } // S3BackupSource provides the spec how to store backups on S3. diff --git a/pkg/backup/backup_manager.go b/pkg/backup/backup_manager.go index 07186a7c4..1abebd2e9 100644 --- a/pkg/backup/backup_manager.go +++ b/pkg/backup/backup_manager.go @@ -26,6 +26,7 @@ import ( "github.com/coreos/etcd/clientv3" "github.com/sirupsen/logrus" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes" ) @@ -53,21 +54,22 @@ func NewBackupManagerFromWriter(kubecli kubernetes.Interface, bw writer.Writer, // SaveSnap uses backup writer to save etcd snapshot to a specified S3 path // and returns backup etcd server's kv store revision and its version. -func (bm *BackupManager) SaveSnap(ctx context.Context, s3Path string, now time.Time, isPeriodic bool) (int64, string, error) { +func (bm *BackupManager) SaveSnap(ctx context.Context, s3Path string, isPeriodic bool) (int64, string, *metav1.Time, error) { + now := time.Now().UTC() etcdcli, rev, err := bm.etcdClientWithMaxRevision(ctx) if err != nil { - return 0, "", fmt.Errorf("create etcd client failed: %v", err) + return 0, "", nil, fmt.Errorf("create etcd client failed: %v", err) } defer etcdcli.Close() resp, err := etcdcli.Status(ctx, etcdcli.Endpoints()[0]) if err != nil { - return 0, "", fmt.Errorf("failed to retrieve etcd version from the status call: %v", err) + return 0, "", nil, fmt.Errorf("failed to retrieve etcd version from the status call: %v", err) } rc, err := etcdcli.Snapshot(ctx) if err != nil { - return 0, "", fmt.Errorf("failed to receive snapshot (%v)", err) + return 0, "", nil, fmt.Errorf("failed to receive snapshot (%v)", err) } defer rc.Close() if isPeriodic { @@ -75,9 +77,9 @@ func (bm *BackupManager) SaveSnap(ctx context.Context, s3Path string, now time.T } _, err = bm.bw.Write(ctx, s3Path, rc) if err != nil { - return 0, "", fmt.Errorf("failed to write snapshot (%v)", err) + return 0, "", nil, fmt.Errorf("failed to write snapshot (%v)", err) } - return rev, resp.Version, nil + return rev, resp.Version, &metav1.Time{now}, nil } // EnsureMaxBackup to ensure the number of snapshot is under maxcount diff --git a/pkg/controller/backup-operator/abs_backup.go b/pkg/controller/backup-operator/abs_backup.go index edb6bc775..c1c9c786d 100644 --- a/pkg/controller/backup-operator/abs_backup.go +++ b/pkg/controller/backup-operator/abs_backup.go @@ -18,7 +18,6 @@ import ( "context" "crypto/tls" "fmt" - "time" api "github.com/coreos/etcd-operator/pkg/apis/etcd/v1beta2" "github.com/coreos/etcd-operator/pkg/backup" @@ -41,18 +40,17 @@ func handleABS(ctx context.Context, kubecli kubernetes.Interface, s *api.ABSBack if tlsConfig, err = generateTLSConfig(kubecli, clientTLSSecret, namespace); err != nil { return nil, err } - now := time.Now().UTC() bm := backup.NewBackupManagerFromWriter(kubecli, writer.NewABSWriter(cli.ABS), tlsConfig, endpoints, namespace) - rev, etcdVersion, err := bm.SaveSnap(ctx, s.Path, now, isPeriodic) + rev, etcdVersion, now, err := bm.SaveSnap(ctx, s.Path, isPeriodic) if err != nil { return nil, fmt.Errorf("failed to save snapshot (%v)", err) } if maxBackup > 0 { - err := bm.EnsureMaxbackup(ctx, s.Path, maxBackup) + err := bm.EnsureMaxBackup(ctx, s.Path, maxBackup) if err != nil { return nil, fmt.Errorf("succeeded in saving snapshot but failed to delete old snapshot (%v)", err) } } - return &api.BackupStatus{EtcdVersion: etcdVersion, EtcdRevision: rev, LastSuccessDate: now}, nil + return &api.BackupStatus{EtcdVersion: etcdVersion, EtcdRevision: rev, LastSuccessDate: *now}, nil } diff --git a/pkg/controller/backup-operator/gcs_backup.go b/pkg/controller/backup-operator/gcs_backup.go index 30cb5d715..1f1f5a921 100644 --- a/pkg/controller/backup-operator/gcs_backup.go +++ b/pkg/controller/backup-operator/gcs_backup.go @@ -18,7 +18,6 @@ import ( "context" "crypto/tls" "fmt" - "time" api "github.com/coreos/etcd-operator/pkg/apis/etcd/v1beta2" "github.com/coreos/etcd-operator/pkg/backup" @@ -42,18 +41,17 @@ func handleGCS(ctx context.Context, kubecli kubernetes.Interface, s *api.GCSBack if tlsConfig, err = generateTLSConfig(kubecli, clientTLSSecret, namespace); err != nil { return nil, err } - now := time.Now().UTC() bm := backup.NewBackupManagerFromWriter(kubecli, writer.NewGCSWriter(cli.GCS), tlsConfig, endpoints, namespace) - rev, etcdVersion, err := bm.SaveSnap(ctx, s.Path, now, isPeriodic) + rev, etcdVersion, now, err := bm.SaveSnap(ctx, s.Path, isPeriodic) if err != nil { return nil, fmt.Errorf("failed to save snapshot (%v)", err) } if maxBackup > 0 { - err := bm.EnsureMaxbackup(ctx, s.Path, maxBackup) + err := bm.EnsureMaxBackup(ctx, s.Path, maxBackup) if err != nil { return nil, fmt.Errorf("succeeded in saving snapshot but failed to delete old snapshot (%v)", err) } } - return &api.BackupStatus{EtcdVersion: etcdVersion, EtcdRevision: rev, LastSuccessDate: now}, nil + return &api.BackupStatus{EtcdVersion: etcdVersion, EtcdRevision: rev, LastSuccessDate: *now}, nil } diff --git a/pkg/controller/backup-operator/s3_backup.go b/pkg/controller/backup-operator/s3_backup.go index 0a73ede7f..190916c17 100644 --- a/pkg/controller/backup-operator/s3_backup.go +++ b/pkg/controller/backup-operator/s3_backup.go @@ -18,7 +18,6 @@ import ( "context" "crypto/tls" "fmt" - "time" api "github.com/coreos/etcd-operator/pkg/apis/etcd/v1beta2" "github.com/coreos/etcd-operator/pkg/backup" @@ -43,18 +42,17 @@ func handleS3(ctx context.Context, kubecli kubernetes.Interface, s *api.S3Backup if tlsConfig, err = generateTLSConfig(kubecli, clientTLSSecret, namespace); err != nil { return nil, err } - now := time.Now().UTC() bm := backup.NewBackupManagerFromWriter(kubecli, writer.NewS3Writer(cli.S3), tlsConfig, endpoints, namespace) - rev, etcdVersion, err := bm.SaveSnap(ctx, s.Path, now, isPeriodic) + rev, etcdVersion, now, err := bm.SaveSnap(ctx, s.Path, isPeriodic) if err != nil { return nil, fmt.Errorf("failed to save snapshot (%v)", err) } if maxBackup > 0 { - err := bm.EnsureMaxbackup(ctx, s.Path, maxBackup) + err := bm.EnsureMaxBackup(ctx, s.Path, maxBackup) if err != nil { return nil, fmt.Errorf("succeeded in saving snapshot but failed to delete old snapshot (%v)", err) } } - return &api.BackupStatus{EtcdVersion: etcdVersion, EtcdRevision: rev, LastSuccessDate: now}, nil + return &api.BackupStatus{EtcdVersion: etcdVersion, EtcdRevision: rev, LastSuccessDate: *now}, nil } diff --git a/pkg/controller/backup-operator/sync.go b/pkg/controller/backup-operator/sync.go index 2b7013052..b2a65e41a 100644 --- a/pkg/controller/backup-operator/sync.go +++ b/pkg/controller/backup-operator/sync.go @@ -74,11 +74,7 @@ func (b *Backup) processItem(key string) error { if eb.DeletionTimestamp != nil { b.deletePeriodicBackupRunner(eb.ObjectMeta.UID) - err := b.removeFinalizerOfPeriodicBackup(eb) - if err != nil { - return err - } - return nil + return b.removeFinalizerOfPeriodicBackup(eb) } isPeriodic := isPeriodicBackup(&eb.Spec) @@ -168,10 +164,7 @@ func (b *Backup) removeFinalizerOfPeriodicBackup(eb *api.EtcdBackup) error { } metadata.SetFinalizers(finalizers) _, err = b.backupCRCli.EtcdV1beta2().EtcdBackups(b.namespace).Update(ebNew.(*api.EtcdBackup)) - if err != nil { - return err - } - return nil + return err } func (b *Backup) periodicRunnerFunc(ctx context.Context, t *time.Ticker, eb *api.EtcdBackup) {