Skip to content

Instantly share code, notes, and snippets.

@nrb
Created May 21, 2018 17:01
Show Gist options
  • Select an option

  • Save nrb/73d54245288d647354827e5862594a82 to your computer and use it in GitHub Desktop.

Select an option

Save nrb/73d54245288d647354827e5862594a82 to your computer and use it in GitHub Desktop.
func (br *backupService) UploadBackup(bucket, backupName string, metadata, backup, log io.Reader) error {
// Uploading the log file is best-effort; if it fails, we log the error but it doesn't impact the
// backup's status.
logKey := getBackupLogKey(backupName, backupName)
if err := br.seekAndPutObject(bucket, logKey, log); err != nil {
br.logger.WithError(err).WithFields(logrus.Fields{
"bucket": bucket,
"key": logKey,
}).Error("Error uploading log file")
}
br.logger.Info("Completed log file upload")
if metadata == nil {
// If we don't have metadata, something failed, and there's no point in continuing. An object
// storage bucket that is missing the metadata file can't be restored, nor can its logs be
// viewed.
br.logger.Debug("Metadata was nil, returning early")
return nil
}
// upload metadata file
metadataKey := getMetadataKey(backupName)
if err := br.seekAndPutObject(bucket, metadataKey, metadata); err != nil {
// failure to upload metadata file is a hard-stop
br.logger.Info("Failed to upload metadata file")
return err
}
br.logger.Info("Completed metadata upload")
if backup != nil {
// upload tar file
if err := br.seekAndPutObject(bucket, getBackupContentsKey(backupName, backupName), backup); err != nil {
// try to delete the metadata file since the data upload failed
deleteErr := br.objectStore.DeleteObject(bucket, metadataKey)
br.logger.Info("Failed to upload backup")
return kerrors.NewAggregate([]error{err, deleteErr})
}
br.logger.Info("Completed backup upload")
}
return nil
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment