s3 backups: handle CompleteMultipartUpload and AbortMultipartUpload on the panel

This commit is contained in:
Matthew Penner
2020-12-06 13:56:17 -07:00
parent 83f0d2c953
commit ee08829a28
6 changed files with 56 additions and 85 deletions

View File

@@ -3,13 +3,18 @@ package api
import (
"fmt"
"strconv"
"sync"
)
var (
backupUploadIDsMx sync.Mutex
backupUploadIDs = map[string]string{}
)
type BackupRemoteUploadResponse struct {
CompleteMultipartUpload string `json:"complete_multipart_upload"`
AbortMultipartUpload string `json:"abort_multipart_upload"`
Parts []string `json:"parts"`
PartSize int64 `json:"part_size"`
UploadID string `json:"upload_id"`
Parts []string `json:"parts"`
PartSize int64 `json:"part_size"`
}
func (r *Request) GetBackupRemoteUploadURLs(backup string, size int64) (*BackupRemoteUploadResponse, error) {
@@ -28,10 +33,16 @@ func (r *Request) GetBackupRemoteUploadURLs(backup string, size int64) (*BackupR
return nil, err
}
// Store the backup upload id for later use, this is a janky way to be able to use it later with SendBackupStatus.
backupUploadIDsMx.Lock()
backupUploadIDs[backup] = res.UploadID
backupUploadIDsMx.Unlock()
return &res, nil
}
type BackupRequest struct {
UploadID string `json:"upload_id"`
Checksum string `json:"checksum"`
ChecksumType string `json:"checksum_type"`
Size int64 `json:"size"`
@@ -41,6 +52,13 @@ type BackupRequest struct {
// Notifies the panel that a specific backup has been completed and is now
// available for a user to view and download.
func (r *Request) SendBackupStatus(backup string, data BackupRequest) error {
// Set the UploadID on the data.
backupUploadIDsMx.Lock()
if v, ok := backupUploadIDs[backup]; ok {
data.UploadID = v
}
backupUploadIDsMx.Unlock()
resp, err := r.Post(fmt.Sprintf("/backups/%s", backup), data)
if err != nil {
return err