diff --git a/src/views/backups.html b/src/views/backups.html index 97357971c..e55d8a0a6 100644 --- a/src/views/backups.html +++ b/src/views/backups.html @@ -276,6 +276,14 @@ +
+ +

Multi-part upload part size.

+
+ +
+
+

Number of files to upload in parallel when backing up

diff --git a/src/views/backups.js b/src/views/backups.js index 69c391697..24e5e9114 100644 --- a/src/views/backups.js +++ b/src/views/backups.js @@ -411,6 +411,8 @@ angular.module('Application').controller('BackupsController', ['$scope', '$locat memoryTicks: [], memoryLimit: 400 * 1024 * 1024, + uploadPartSizeTicks: [], + uploadPartSize: 50 * 1024 * 1024, copyConcurrency: '', downloadConcurrency: '', syncConcurrency: '', // sort of similar to upload @@ -431,6 +433,8 @@ angular.module('Application').controller('BackupsController', ['$scope', '$locat $scope.configureBackup.externalDisk = false; $scope.configureBackup.memoryLimit = 400 * 1024 * 1024; + // scaleway only supports 1000 parts per object (https://www.scaleway.com/en/docs/s3-multipart-upload/) + $scope.configureBackup.uploadPartSize = $scope.configureBackup.provider === 'scaleway-objectstorage' ? 100 * 1024 * 1024 : 10 * 1024 * 1024; $scope.configureBackup.downloadConcurrency = $scope.configureBackup.provider === 's3' ? 30 : 10; $scope.configureBackup.syncConcurrency = $scope.configureBackup.provider === 's3' ? 20 : 10; $scope.configureBackup.copyConcurrency = $scope.configureBackup.provider === 's3' ? 500 : 10; @@ -467,6 +471,7 @@ angular.module('Application').controller('BackupsController', ['$scope', '$locat $scope.configureBackup.memoryLimit = $scope.backupConfig.memoryLimit; + $scope.configureBackup.uploadPartSize = $scope.backupConfig.uploadPartSize || ($scope.configureBackup.provider === 'scaleway-objectstorage' ? 100 * 1024 * 1024 : 10 * 1024 * 1024); $scope.configureBackup.downloadConcurrency = $scope.backupConfig.downloadConcurrency || ($scope.backupConfig.provider === 's3' ? 30 : 10); $scope.configureBackup.syncConcurrency = $scope.backupConfig.syncConcurrency || ($scope.backupConfig.provider === 's3' ? 20 : 10); $scope.configureBackup.copyConcurrency = $scope.backupConfig.copyConcurrency || ($scope.backupConfig.provider === 's3' ? 500 : 10); @@ -476,6 +481,12 @@ angular.module('Application').controller('BackupsController', ['$scope', '$locat $scope.configureBackup.memoryTicks.push(i * 1024 * 1024); } + $scope.configureBackup.uploadPartSizeTicks = [ 10 * 1024 * 1024 ]; + for (var j = 32; j <= 128; j *= 2) { // 5 GB is max for s3. but let's keep things practical for now + $scope.configureBackup.uploadPartSizeTicks.push(j * 1024 * 1024); + } + + $('#configureBackupModal').modal('show'); }, @@ -557,6 +568,8 @@ angular.module('Application').controller('BackupsController', ['$scope', '$locat backupConfig.externalDisk = $scope.configureBackup.externalDisk; } + backupConfig.uploadPartSize = $scope.configureBackup.uploadPartSize; + if (backupConfig.format === 'rsync') { backupConfig.downloadConcurrency = $scope.configureBackup.downloadConcurrency; backupConfig.syncConcurrency = $scope.configureBackup.syncConcurrency;