Merge pull request #970 from u5surf/issue-967

create a struct for multiple return of same type in restore_contoroll…
This commit is contained in:
KubeKween
2018-10-23 06:55:25 -07:00
committed by GitHub
+25 -23
View File
@@ -26,15 +26,6 @@ import (
"sort"
jsonpatch "github.com/evanphx/json-patch"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
apierrors "k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/labels"
"k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/util/sets"
"k8s.io/client-go/tools/cache"
api "github.com/heptio/ark/pkg/apis/ark/v1"
arkv1client "github.com/heptio/ark/pkg/generated/clientset/versioned/typed/ark/v1"
informers "github.com/heptio/ark/pkg/generated/informers/externalversions/ark/v1"
@@ -47,6 +38,13 @@ import (
"github.com/heptio/ark/pkg/util/collections"
kubeutil "github.com/heptio/ark/pkg/util/kube"
"github.com/heptio/ark/pkg/util/logging"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
apierrors "k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/labels"
"k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/util/sets"
"k8s.io/client-go/tools/cache"
)
// nonRestorableResources is a blacklist for the restoration process. Any resources
@@ -85,6 +83,10 @@ type restoreController struct {
newBackupStore func(*api.BackupStorageLocation, persistence.ObjectStoreGetter, logrus.FieldLogger) (persistence.BackupStore, error)
}
type restoreResult struct {
warnings, errors api.RestoreResult
}
func NewRestoreController(
namespace string,
restoreInformer informers.RestoreInformer,
@@ -233,20 +235,20 @@ func (c *restoreController) processRestore(key string) error {
log.Debug("Running restore")
// execution & upload of restore
restoreWarnings, restoreErrors, restoreFailure := c.runRestore(
restoreRes, restoreFailure := c.runRestore(
restore,
actions,
info,
pluginManager,
)
restore.Status.Warnings = len(restoreWarnings.Ark) + len(restoreWarnings.Cluster)
for _, w := range restoreWarnings.Namespaces {
restore.Status.Warnings = len(restoreRes.warnings.Ark) + len(restoreRes.warnings.Cluster)
for _, w := range restoreRes.warnings.Namespaces {
restore.Status.Warnings += len(w)
}
restore.Status.Errors = len(restoreErrors.Ark) + len(restoreErrors.Cluster)
for _, e := range restoreErrors.Namespaces {
restore.Status.Errors = len(restoreRes.errors.Ark) + len(restoreRes.errors.Cluster)
for _, e := range restoreRes.errors.Namespaces {
restore.Status.Errors += len(e)
}
@@ -488,7 +490,7 @@ func (c *restoreController) runRestore(
actions []restore.ItemAction,
info backupInfo,
pluginManager plugin.Manager,
) (api.RestoreResult, api.RestoreResult, error) {
) (restoreResult, error) {
var restoreWarnings, restoreErrors api.RestoreResult
var restoreFailure error
logFile, err := ioutil.TempFile("", "")
@@ -503,7 +505,7 @@ func (c *restoreController) runRestore(
WithError(errors.WithStack(err)).
Error("Error creating log temp file")
restoreErrors.Ark = append(restoreErrors.Ark, err.Error())
return restoreWarnings, restoreErrors, restoreFailure
return restoreResult{warnings: restoreWarnings, errors: restoreErrors}, restoreFailure
}
gzippedLogFile := gzip.NewWriter(logFile)
// Assuming we successfully uploaded the log file, this will have already been closed below. It is safe to call
@@ -526,7 +528,7 @@ func (c *restoreController) runRestore(
log.WithError(err).Error("Error downloading backup")
restoreErrors.Ark = append(restoreErrors.Ark, err.Error())
restoreFailure = err
return restoreWarnings, restoreErrors, restoreFailure
return restoreResult{warnings: restoreWarnings, errors: restoreErrors}, restoreFailure
}
defer closeAndRemoveFile(backupFile, c.logger)
@@ -535,7 +537,7 @@ func (c *restoreController) runRestore(
log.WithError(errors.WithStack(err)).Error("Error creating results temp file")
restoreErrors.Ark = append(restoreErrors.Ark, err.Error())
restoreFailure = err
return restoreWarnings, restoreErrors, restoreFailure
return restoreResult{warnings: restoreWarnings, errors: restoreErrors}, restoreFailure
}
defer closeAndRemoveFile(resultsFile, c.logger)
@@ -544,7 +546,7 @@ func (c *restoreController) runRestore(
log.WithError(errors.WithStack(err)).Error("Error fetching volume snapshots")
restoreErrors.Ark = append(restoreErrors.Ark, err.Error())
restoreFailure = err
return restoreWarnings, restoreErrors, restoreFailure
return restoreResult{warnings: restoreWarnings, errors: restoreErrors}, restoreFailure
}
// Any return statement above this line means a total restore failure
@@ -560,7 +562,7 @@ func (c *restoreController) runRestore(
// Reset the offset to 0 for reading
if _, err = logFile.Seek(0, 0); err != nil {
restoreErrors.Ark = append(restoreErrors.Ark, fmt.Sprintf("error resetting log file offset to 0: %v", err))
return restoreWarnings, restoreErrors, restoreFailure
return restoreResult{warnings: restoreWarnings, errors: restoreErrors}, restoreFailure
}
if err := info.backupStore.PutRestoreLog(restore.Spec.BackupName, restore.Name, logFile); err != nil {
@@ -576,19 +578,19 @@ func (c *restoreController) runRestore(
if err := json.NewEncoder(gzippedResultsFile).Encode(m); err != nil {
log.WithError(errors.WithStack(err)).Error("Error encoding restore results")
return restoreWarnings, restoreErrors, restoreFailure
return restoreResult{warnings: restoreWarnings, errors: restoreErrors}, restoreFailure
}
gzippedResultsFile.Close()
if _, err = resultsFile.Seek(0, 0); err != nil {
log.WithError(errors.WithStack(err)).Error("Error resetting results file offset to 0")
return restoreWarnings, restoreErrors, restoreFailure
return restoreResult{warnings: restoreWarnings, errors: restoreErrors}, restoreFailure
}
if err := info.backupStore.PutRestoreResults(restore.Spec.BackupName, restore.Name, resultsFile); err != nil {
log.WithError(errors.WithStack(err)).Error("Error uploading results file to backup storage")
}
return restoreWarnings, restoreErrors, restoreFailure
return restoreResult{warnings: restoreWarnings, errors: restoreErrors}, restoreFailure
}
func downloadToTempFile(