get backup name from restore spec when handling restore DownloadRequests

Signed-off-by: Steve Kriss <steve@heptio.com>
This commit is contained in:
Steve Kriss
2018-04-02 15:34:19 -07:00
parent a2f5e14a32
commit 0d2b49acce
6 changed files with 76 additions and 62 deletions

View File

@@ -47,6 +47,8 @@ type downloadRequestController struct {
downloadRequestClient arkv1client.DownloadRequestsGetter
downloadRequestLister listers.DownloadRequestLister
downloadRequestListerSynced cache.InformerSynced
restoreLister listers.RestoreLister
restoreListerSynced cache.InformerSynced
backupService cloudprovider.BackupService
bucket string
syncHandler func(key string) error
@@ -59,6 +61,7 @@ type downloadRequestController struct {
func NewDownloadRequestController(
downloadRequestClient arkv1client.DownloadRequestsGetter,
downloadRequestInformer informers.DownloadRequestInformer,
restoreInformer informers.RestoreInformer,
backupService cloudprovider.BackupService,
bucket string,
logger logrus.FieldLogger,
@@ -67,6 +70,8 @@ func NewDownloadRequestController(
downloadRequestClient: downloadRequestClient,
downloadRequestLister: downloadRequestInformer.Lister(),
downloadRequestListerSynced: downloadRequestInformer.Informer().HasSynced,
restoreLister: restoreInformer.Lister(),
restoreListerSynced: restoreInformer.Informer().HasSynced,
backupService: backupService,
bucket: bucket,
queue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "downloadrequest"),
@@ -118,7 +123,7 @@ func (c *downloadRequestController) Run(ctx context.Context, numWorkers int) err
defer c.logger.Info("Shutting down DownloadRequestController")
c.logger.Info("Waiting for caches to sync")
if !cache.WaitForCacheSync(ctx.Done(), c.downloadRequestListerSynced) {
if !cache.WaitForCacheSync(ctx.Done(), c.downloadRequestListerSynced, c.restoreListerSynced) {
return errors.New("timed out waiting for caches to sync")
}
c.logger.Info("Caches are synced")
@@ -214,8 +219,24 @@ const signedURLTTL = 10 * time.Minute
func (c *downloadRequestController) generatePreSignedURL(downloadRequest *v1.DownloadRequest) error {
update := downloadRequest.DeepCopy()
var err error
update.Status.DownloadURL, err = c.backupService.CreateSignedURL(downloadRequest.Spec.Target, c.bucket, signedURLTTL)
var (
directory string
err error
)
switch downloadRequest.Spec.Target.Kind {
case v1.DownloadTargetKindRestoreLog, v1.DownloadTargetKindRestoreResults:
restore, err := c.restoreLister.Restores(downloadRequest.Namespace).Get(downloadRequest.Spec.Target.Name)
if err != nil {
return errors.Wrap(err, "error getting Restore")
}
directory = restore.Spec.BackupName
default:
directory = downloadRequest.Spec.Target.Name
}
update.Status.DownloadURL, err = c.backupService.CreateSignedURL(downloadRequest.Spec.Target, c.bucket, directory, signedURLTTL)
if err != nil {
return err
}

View File

@@ -41,7 +41,9 @@ func TestProcessDownloadRequest(t *testing.T) {
phase v1.DownloadRequestPhase
targetKind v1.DownloadTargetKind
targetName string
restore *v1.Restore
expectedError string
expectedDir string
expectedPhase v1.DownloadRequestPhase
expectedURL string
}{
@@ -60,6 +62,7 @@ func TestProcessDownloadRequest(t *testing.T) {
phase: "",
targetKind: v1.DownloadTargetKindBackupLog,
targetName: "backup1",
expectedDir: "backup1",
expectedPhase: v1.DownloadRequestPhaseProcessed,
expectedURL: "signedURL",
},
@@ -69,6 +72,7 @@ func TestProcessDownloadRequest(t *testing.T) {
phase: v1.DownloadRequestPhaseNew,
targetKind: v1.DownloadTargetKindBackupLog,
targetName: "backup1",
expectedDir: "backup1",
expectedPhase: v1.DownloadRequestPhaseProcessed,
expectedURL: "signedURL",
},
@@ -78,6 +82,8 @@ func TestProcessDownloadRequest(t *testing.T) {
phase: "",
targetKind: v1.DownloadTargetKindRestoreLog,
targetName: "backup1-20170912150214",
restore: arktest.NewTestRestore(v1.DefaultNamespace, "backup1-20170912150214", v1.RestorePhaseCompleted).WithBackup("backup1").Restore,
expectedDir: "backup1",
expectedPhase: v1.DownloadRequestPhaseProcessed,
expectedURL: "signedURL",
},
@@ -87,6 +93,8 @@ func TestProcessDownloadRequest(t *testing.T) {
phase: v1.DownloadRequestPhaseNew,
targetKind: v1.DownloadTargetKindRestoreLog,
targetName: "backup1-20170912150214",
restore: arktest.NewTestRestore(v1.DefaultNamespace, "backup1-20170912150214", v1.RestorePhaseCompleted).WithBackup("backup1").Restore,
expectedDir: "backup1",
expectedPhase: v1.DownloadRequestPhaseProcessed,
expectedURL: "signedURL",
},
@@ -98,6 +106,7 @@ func TestProcessDownloadRequest(t *testing.T) {
client = fake.NewSimpleClientset()
sharedInformers = informers.NewSharedInformerFactory(client, 0)
downloadRequestsInformer = sharedInformers.Ark().V1().DownloadRequests()
restoresInformer = sharedInformers.Ark().V1().Restores()
backupService = &arktest.BackupService{}
logger = arktest.NewLogger()
)
@@ -106,6 +115,7 @@ func TestProcessDownloadRequest(t *testing.T) {
c := NewDownloadRequestController(
client.ArkV1(),
downloadRequestsInformer,
restoresInformer,
backupService,
"bucket",
logger,
@@ -130,7 +140,11 @@ func TestProcessDownloadRequest(t *testing.T) {
}
downloadRequestsInformer.Informer().GetStore().Add(downloadRequest)
backupService.On("CreateSignedURL", target, "bucket", 10*time.Minute).Return("signedURL", nil)
if tc.restore != nil {
restoresInformer.Informer().GetStore().Add(tc.restore)
}
backupService.On("CreateSignedURL", target, "bucket", tc.expectedDir, 10*time.Minute).Return("signedURL", nil)
}
// method under test