github Altinity/clickhouse-backup v2.8.3
2.8.3

4 hours ago

v2.8.3

NEW FEATURES

  • support tables with local and plain_rewritable disks in one storage policy: ClickHouse rejects FREEZE for them, so create hardlinks the local parts into shadow the way FREEZE does and copies the parts of the plain disks from the bucket, with merges and moves of the table stopped (needs SYSTEM MERGES and SYSTEM MOVES grants, moves are now stopped for every table on a storage policy with plain disks), plain disks in skip_disks are skipped, clickhouse.disk_mapping is applied to the part paths, sync_replicated_tables, freeze_by_part_where and ignore_not_exists_error_during_freeze apply to such tables as they apply to FREEZE, parts on object disks with local metadata (including cache and encrypted wrappers over them) next to plain disks are rejected, default restore of such tables requires ClickHouse 25.4+ (older versions reject ATTACH PART for a storage policy with plain disks, use restore_as_attach there)
  • support Antalya metadata_type=cas disks with use_embedded_backup_restore: true, create_remote no longer fails with disk "cas" ... is not exists locally and restore_remote no longer fails with unsupported <metadata_type>cas</metadata_type>, without embedded mode a table on a CAS disk fails with an explicit error, because FREEZE on CAS leaves no local files to hardlink, fix #1562

IMPROVEMENTS

  • rebase copies parts, archives and object disk blobs of one table in parallel, previously every CopyObject inside a table ran strictly one by one and general.rebase_concurrency limited only the number of tables, now it also limits parallel CopyObject requests per table, so up to rebase_concurrency^2 copies are in flight, rebase logs the required backups chain, rebase_concurrency and max_copy_object on start and rebase table start / rebase table finish with progress, duration, copied_size and object_disk_size for each table at info level, fix #1648
  • update go dependencies: aws-sdk-go-v2, aws-sdk-go-v2/feature/s3/transfermanager 0.5.1, cloud.google.com/go/storage 1.70.0, clickhouse-go/v2 2.50.0, klauspost/pgzip 1.3.0, pkg/sftp 1.13.12, cos-go-sdk-v5 0.7.76, google.golang.org/api 0.309.0 and others

BUG FIXES

  • restore and restore_remote no longer drop and recreate every user-defined SQL function from the backup, previously each function got DROP FUNCTION IF EXISTS + CREATE OR REPLACE FUNCTION (function was unavailable between them) even with --tables for a single table, and silently rolled back definitions changed after the backup; now existing functions are read from system.functions first, a missing function is created with CREATE FUNCTION IF NOT EXISTS, an identical one is skipped without any query (so CREATE FUNCTION / DROP FUNCTION grants are not required), a changed one is kept with a warning and overwritten by atomic CREATE OR REPLACE FUNCTION only with --rm, the same as tables and RBAC objects; functions are restored before tables, so tables and materialized views which use UDF can be created on a clean server; restore --dry-run and restore_remote --dry-run show functions with create, replace, keep_existing or skip_identical for each function, fix #1636
  • FIPS builds no longer overwrite an explicit AWS_USE_FIPS_ENDPOINT, clickhouse-backup-fips set it to true unconditionally at startup, so with a custom s3.endpoint (MinIO, Ceph RGW, other S3-compatible storage) every S3 call failed with S3 ResolveEndpoint: endpoint rule error, A custom endpoint cannot be combined with FIPS and AWS_USE_FIPS_ENDPOINT=false had no effect; it is still true by default when unset, the variable only selects AWS s3-fips.* hostnames and does not affect the FIPS 140-3 crypto module
  • s3.allow_multipart_download now uses byte-range GETs by default, new s3.multipart_download_type (env S3_MULTIPART_DOWNLOAD_TYPE, default range): range requests byte ranges of chunk_size with If-Match set to the multipart object ETag, part keeps the previous partNumber GETs, which send the first part ETag as If-Match and get HTTP 412 PreconditionFailed on Ceph RGW (Hetzner Object Storage) from part 2 on (each part has its own ETag); the setting applies only when multipart download actually runs (allow_multipart_download: true and download_max_bytes_per_second: 0), on other S3-compatible storage (NuObject) part-number downloads failed with unexpected EOF, fix #1632, #1655
  • rebase with remote_storage: azblob no longer fails with BlobNotFound for databases and tables whose names need encoding, such as test-db or the .inner_id. table of a materialized view, the server-side copy source URL is escaped now, fix #1637
  • add s3.timeout (env S3_TIMEOUT, default 30m, empty or 0 disables it) as HTTP response header timeout for S3 requests including object disk connections, previously S3 had no per-request timeout and create_remote could hang forever in CopyObject / UploadPartCopy when S3 accepted the request and never answered, a timed out request is retried on a new connection; timeout already present in configs was silently ignored before, it accepts a duration (30m) or a number of seconds (3000), fix #1645
  • download of a regular (not embedded) backup no longer fails with Chown backup disk: lstat .../<backup>: no such file or directory when running as root with use_embedded_backup_restore: true and clickhouse.embedded_backup_disk configured, fix #1653
  • fix --link-dest quoting in the rsync upload example (test/integration/rsync/upload.sh), rsync reported --link-dest arg does not exist and copied every file instead of hardlinking unchanged parts, rsync calls in upload / download examples use --protect-args

Don't miss a new clickhouse-backup release

NewReleases is sending notifications on new releases.