v2.7.1
NEW FEATURES
- add
--fips-infoapp-level flag — prints binary name, version, git commit, build date, Go version, and the FIPS module build/runtime state (GOFIPS140build setting,GODEBUG fips140default/runtime) then exits, without requiring a Go toolchain, fix #1402 - add Azure AD Workload Identity support for
azblob— whenAZBLOB_USE_MANAGED_IDENTITY=trueand theAZURE_TENANT_ID/AZURE_CLIENT_ID/AZURE_FEDERATED_TOKEN_FILEenv vars are injected (e.g. by the AAD Workload Identity webhook), the federated token is used to authenticate; seeExamples.mdfor deployment, fix #1124
IMPROVEMENTS
- add
general.compression_use_multi_thread(envCOMPRESSION_USE_MULTI_THREAD, defaultfalse),general.compression_threads(envCOMPRESSION_THREADS, default0= auto/GOMAXPROCS) andgeneral.compression_buffer_size(envCOMPRESSION_BUFFER_SIZE, default0) config options to tune per-stream zstd/gzip threading and the compression buffer (zstd encoder window / gzip DEFLATE window / pgzip block size); per-stream compression is now single-threaded by default to avoid CPU over-subscription, sinceupload_concurrency/download_concurrencyalready parallelize across tables, fix #1378 - migrate compression from the archived, frozen
github.com/mholt/archiver/v4 v4.0.0-alpha.8to its maintained successorgithub.com/mholt/archives v0.1.5, removing thereplacedirective pinned in archiver#428 - migrate S3 storage from the deprecated
github.com/aws/aws-sdk-go-v2/feature/s3/managertogithub.com/aws/aws-sdk-go-v2/feature/s3/transfermanager; the forced CRC32aws-chunkedtrailer that broke non-AWS S3-compatible providers is now disabled viaRequestChecksumCalculation=WhenRequired, and the obsoletes3.buffer_size/S3_BUFFER_SIZEoption was removed, fix #1409 - add buffer-size and HTTP-transport tuning for high-bandwidth (10Gbps+) S3/GCS transfers:
general.pipe_buffer_size(envPIPE_BUFFER_SIZE, default 128KB),general.download_copy_buffer_size(envDOWNLOAD_COPY_BUFFER_SIZE),gcs.upload_buffer_size(envGCS_UPLOAD_BUFFER_SIZE),s3.http_write_buffer_size(envS3_HTTP_WRITE_BUFFER_SIZE) ands3.http_read_buffer_size(envS3_HTTP_READ_BUFFER_SIZE), fix #1376 - replace post-hoc sleep-based bandwidth throttling with a token-bucket rate limiter wrapped around the storage
Reader/Writerinterfaces, so the configured limit is enforced continuously during transfer instead of after each chunk, fix #934, #1377 - parallelize
ALTER TABLE ... UNFREEZEafterbackup createinstead of running it inline inside each table goroutine, so an UNFREEZE no longer holds anupload_concurrencyslot and blocks the next table, fix #1381 - add
clickhouse.parts_columns_batch_size(envCLICKHOUSE_PARTS_COLUMNS_BATCH_SIZE, default25) to batch thesystem.partslookups when computinghash_of_all_files, avoidingMax query size exceededfailures on tables with very many parts, fix #1408 - resolve
requireddata parts duringrestorethe same way as duringdownload— hardlink from the required backup on local disk when present, otherwise download the part from remote storage, fix #1023 ResumeOperationsAfterRestartnow ignorescreate.state2/restore.state2files instead of failing the API server startup withunknown command; onlyuploadanddownloadare auto-resumed after a server restart, fix #1083- fail fast with a clear error instead of retrying for ~35s when a remote table metadata
.jsonis missing duringdownload(covers S3NoSuchKey, GCS 404, AzureBlobNotFound, FTP/SFTP not-found) — a missing table file is a permanent broken-backup condition, not a transient one, fix #1379 - emit a clear error on
--resume downloadwhen the local backup exists butdownload.state2is missing (so it is unknown which parts are complete), instead of crashing or silently resuming on top of partial data, fix #1383 - harden FIPS 140-3 verification: native Go
GOFIPS140=v1.0.0checks, ACVP reproducibility tests, outbound S3 TLS rejection checks and container cleanup in CI/CD, fix #1399, #1401, #1404
BUG FIXES
- don't kill
clickhouse-backup serverwithFatal/os.Exitwhen the resumable state DB can't be written or read (e.g.no space left on device); the error now propagates so the server stays alive and returns it to the API client, while the CLI exits with a non-zero code, fix #1172 - fix
backup createfailing withpart "<name>" not found in system.parts ... after FREEZEwhen a ClickHouse cache disk (e.g.s3_cache) wraps an underlying S3 object disk — prefer the underlying disk name over the cache wrapper ingetDisksFromSystemDisks, fix #1396 - fix
--hardlink-exists-filesto also match parts whosehash_of_all_filesis identical but that now live under a renamed table, fix #1398 - fix
--tablecombined with--resumeon incremental backups: recursively downloading a required backup closed the parentb.dstconnection and wiped the resumable state; the connection is now saved/restored, fix #1384 - improve detection when
clickhouse-backupruns on a host whose disks differ fromclickhouse-server, instead of silently warningdoesn't contain tables for restore, fix #1037