use pxar::accessor::{MaybeReady, ReadAt, ReadAtOperation};
use pbs_api_types::{
- BACKUP_ID_SCHEMA, BACKUP_TIME_SCHEMA, BACKUP_TYPE_SCHEMA, Authid, CryptMode, GroupListItem,
- PruneListItem, SnapshotListItem, StorageStatus, Fingerprint, PruneOptions,
+ BACKUP_ID_SCHEMA, BACKUP_TIME_SCHEMA, BACKUP_TYPE_SCHEMA,
+ TRAFFIC_CONTROL_BURST_SCHEMA, TRAFFIC_CONTROL_RATE_SCHEMA,
+ Authid, CryptMode, Fingerprint, GroupListItem, PruneListItem, PruneOptions,
+ SnapshotListItem, StorageStatus,
};
use pbs_client::{
BACKUP_SOURCE_SCHEMA,
complete_archive_name, complete_auth_id, complete_backup_group, complete_backup_snapshot,
complete_backup_source, complete_chunk_size, complete_group_or_snapshot,
complete_img_archive_name, complete_pxar_archive_name, complete_repository, connect,
- extract_repository_from_value,
+ connect_rate_limited, extract_repository_from_value,
key_source::{
crypto_parameters, format_key_source, get_encryption_key_password, KEYFD_SCHEMA,
KEYFILE_SCHEMA, MASTER_PUBKEY_FD_SCHEMA, MASTER_PUBKEY_FILE_SCHEMA,
schema: CHUNK_SIZE_SCHEMA,
optional: true,
},
+ rate: {
+ schema: TRAFFIC_CONTROL_RATE_SCHEMA,
+ optional: true,
+ },
+ burst: {
+ schema: TRAFFIC_CONTROL_BURST_SCHEMA,
+ optional: true,
+ },
"exclude": {
type: Array,
description: "List of paths or patterns for matching files to exclude.",
verify_chunk_size(size)?;
}
+ let rate_limit = param["rate"].as_u64();
+ let bucket_size = param["burst"].as_u64();
+
let crypto = crypto_parameters(¶m)?;
let backup_id = param["backup-id"].as_str().unwrap_or(&proxmox::tools::nodename());
let backup_time = backup_time_opt.unwrap_or_else(epoch_i64);
- let client = connect(&repo)?;
+ let client = connect_rate_limited(&repo, rate_limit, bucket_size)?;
record_repository(&repo);
println!("Starting backup: {}/{}/{}", backup_type, backup_id, BackupDir::backup_time_to_string(backup_time)?);
"###
},
+ rate: {
+ schema: TRAFFIC_CONTROL_RATE_SCHEMA,
+ optional: true,
+ },
+ burst: {
+ schema: TRAFFIC_CONTROL_BURST_SCHEMA,
+ optional: true,
+ },
"allow-existing-dirs": {
type: Boolean,
description: "Do not fail if directories already exists.",
let archive_name = json::required_string_param(¶m, "archive-name")?;
- let client = connect(&repo)?;
+ let rate_limit = param["rate"].as_u64();
+ let bucket_size = param["burst"].as_u64();
+ let client = connect_rate_limited(&repo, rate_limit, bucket_size)?;
record_repository(&repo);
let path = json::required_string_param(¶m, "snapshot")?;