You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
add gcs.parallel_upload for parallel composite uploads of large files
Files bigger than gcs.parallel_upload_min_size (default 1GB) upload to GCS
as multiple parallel parts via a dedicated gRPC client and compose into the
final object, using the experimental EnableParallelUpload writer surface
from cloud.google.com/go/storage v1.62+.
Single-stream uploads of 100GB+ parts were the bottleneck for large-table
backups (12h+), see #1028.
- parallel_upload_part_size (0 = SDK default 16MiB, min 5MiB) and
parallel_upload_max_concurrency (0 = SDK default min(4+CPU/2, 16))
- rejected together with endpoint, force_http and encryption_key: PCU works
only via gRPC to storage.googleapis.com and Compose requires the same CSEK
for source parts and destination
- retry policy set client-level: part uploads create fresh ObjectHandles,
per-object Retryer does not cover them
- UploadPath now passes the real file size to PutFile so the min_size
threshold works for uncompressed uploads
- TestGCSParallelUpload runs against the real bucket with GCS_ENCRYPTION_KEY
unset per command (run.sh exports it globally for CSEK coverage in TestGCS)
Copy file name to clipboardExpand all lines: ChangeLog.md
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,5 +1,6 @@
1
1
# v2.8.0
2
2
NEW FEATURES
3
+
- add `gcs.parallel_upload` (env `GCS_PARALLEL_UPLOAD`, default `false`, experimental) with `gcs.parallel_upload_part_size`, `gcs.parallel_upload_max_concurrency` and `gcs.parallel_upload_min_size` (default 1GB) — files bigger than `parallel_upload_min_size` upload to GCS as multiple parallel parts via gRPC client and compose into the final object; not compatible with `endpoint`, `force_http`, `encryption_key`, fix [#1028](https://github.com/Altinity/clickhouse-backup/issues/1028)
3
4
- add `general.disable_environment_override` (settable ONLY in the config file, no environment variable name on purpose, default `false`) — when `true`, config values come only from the config file: all environment variables and the `--env` CLI flag are ignored during config loading; protects against accidental overrides such as Kubernetes service-discovery variables, fix [#1079](https://github.com/Altinity/clickhouse-backup/issues/1079)
Copy file name to clipboardExpand all lines: ReadMe.md
+7Lines changed: 7 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -367,6 +367,13 @@ gcs:
367
367
client_pool_size: 500# GCS_CLIENT_POOL_SIZE, default max(upload_concurrency, download concurrency) * 3, should be at least 3 times bigger than `UPLOAD_CONCURRENCY` or `DOWNLOAD_CONCURRENCY` in each upload and download case to avoid stuck
368
368
delete_concurrency: 50# GCS_DELETE_CONCURRENCY, how many objects delete in parallel during clean/delete operations
369
369
upload_buffer_size: 131072# GCS_UPLOAD_BUFFER_SIZE, io.CopyBuffer size in bytes feeding the GCS object writer, default 128KB; raise (e.g. 1048576 = 1MB) on high-bandwidth networks, see https://github.com/Altinity/clickhouse-backup/issues/1376
370
+
# GCS_PARALLEL_UPLOAD, experimental: upload files bigger than `parallel_upload_min_size` as multiple parts in parallel and compose them into the final object, see https://github.com/Altinity/clickhouse-backup/issues/1028
371
+
# requires direct gRPC connection to storage.googleapis.com, not compatible with `endpoint`, `force_http` and `encryption_key`
372
+
# temporary parts are written to the `gcs-go-sdk-pu-tmp/` prefix in the bucket root and deleted after compose; setup a bucket lifecycle rule for this prefix to clean up leftovers after crashes
373
+
parallel_upload: false
374
+
parallel_upload_part_size: 0# GCS_PARALLEL_UPLOAD_PART_SIZE, size in bytes of each part uploaded in parallel, default 16MiB, minimum 5MiB
375
+
parallel_upload_max_concurrency: 0# GCS_PARALLEL_UPLOAD_MAX_CONCURRENCY, how many parts of one file upload in parallel, default min(4 + CPU/2, 16); total concurrent streams = upload_concurrency * parallel_upload_max_concurrency
376
+
parallel_upload_min_size: 1073741824# GCS_PARALLEL_UPLOAD_MIN_SIZE, files smaller than this size in bytes use the regular single-stream upload, default 1GB
370
377
# GCS_OBJECT_LABELS, allow setup metadata for each object during upload, use {macro_name} from system.macros and {backupName} for current backup name
371
378
# The format for this env variable is "key1:value1,key2:value2". For YAML please continue using map syntax
0 commit comments