Skip to content

CAS: packed parts - #2579

Open
k-morozov wants to merge 73 commits into
antalya-26.8from
feature/cas-packed-parts
Open

k-morozov wants to merge 73 commits into
antalya-26.8from
feature/cas-packed-parts

Conversation

@k-morozov

@k-morozov k-morozov commented Oct 15, 2026 •

Copy link
Copy Markdown

Changelog category (leave one):

  • New Feature

Changelog entry (a user-readable short description of the changes that goes to CHANGELOG.md):

Added basic support for Packed parts on CAS disks.

Documentation entry for user-facing changes

...

CI/CD Options

Exclude tests:

  • Fast test
  • Integration Tests
  • Stateless tests
  • Stateful tests
  • Unit tests
  • Performance tests
  • Aarch64 tests
  • All with ASAN
  • All with TSAN
  • All with MSAN
  • All with UBSAN
  • All with Coverage
  • All Regression
  • Disable CI Cache

Regression jobs to run:

  • Fast suites (mostly <1h)
  • Aggregate Functions (2h)
  • Alter (1.5h)
  • Benchmark (30m)
  • CAS (content-addressed storage; Antalya only)
  • ClickHouse Keeper (1h)
  • Iceberg (2h)
  • LDAP (1h)
  • OAuth (5m)
  • Parquet (1.5h)
  • RBAC (1.5h)
  • SSL Server (1h)
  • S3 (2h)
  • S3 Export (2h)
  • Swarms (30m)
  • Tiered Storage (2h)

mkmkme and others added 30 commits October 8, 2026 15:46
…next commit)

---
Original cherry-pick message follows:

Merge pull request #2159 from Altinity/feature/antalya-26.6/CAS

[experimental] CAS (Content-addressed storage) over shared object storage for antalya-26.6
# Conflicts:
#	.github/workflows/fast_builds.yml
#	.github/workflows/master.yml
#	.github/workflows/pull_request.yml
#	.github/workflows/pull_request_community.yml
#	ci/jobs/functional_tests.py
#	ci/jobs/scripts/clickhouse_proc.py
#	ci/jobs/scripts/clickhouse_service.py
#	ci/workflows/pull_request.py
#	ci/workflows/pull_request_community.py
#	ci/workflows/release_branches.py
#	docs/concepts/features/configuration/server-config/storing-data.mdx
#	programs/disks/DisksApp.cpp
#	programs/disks/ICommand.h
#	programs/server/Server.cpp
#	src/Common/FailPoint.cpp
#	src/Common/ThreadStatus.h
#	src/Core/ServerSettings.cpp
#	src/Disks/DiskObjectStorage/DiskObjectStorage.cpp
#	src/Disks/DiskObjectStorage/DiskObjectStorage.h
#	src/Disks/DiskObjectStorage/DiskObjectStorageTransaction.cpp
#	src/Disks/DiskObjectStorage/MetadataStorages/IMetadataStorage.h
#	src/Disks/DiskObjectStorage/MetadataStorages/MetadataStorageFactory.cpp
#	src/Disks/DiskObjectStorage/ObjectStorages/IObjectStorage.h
#	src/Disks/DiskObjectStorage/ObjectStorages/Local/LocalObjectStorage.cpp
#	src/Disks/DiskObjectStorage/ObjectStorages/S3/S3ObjectStorage.cpp
#	src/Disks/DiskObjectStorage/RegisterDiskObjectStorage.cpp
#	src/Disks/IDiskTransaction.h
#	src/IO/ReadPipeline.cpp
#	src/IO/ReadPipeline.h
#	src/IO/S3/copyS3File.cpp
#	src/IO/S3/copyS3File.h
#	src/IO/S3Common.cpp
#	src/IO/WriteBufferFromS3.cpp
#	src/IO/tests/gtest_writebuffer_s3.cpp
#	src/Interpreters/InterpreterSystemQuery.cpp
#	src/Interpreters/ServerAsynchronousMetrics.cpp
#	src/Parsers/ASTSystemQuery.h
#	src/Parsers/tests/gtest_Parser.cpp
#	src/Storages/MergeTree/DataPartStorageOnDiskBase.cpp
#	src/Storages/MergeTree/DataPartStorageOnDiskFull.cpp
#	src/Storages/MergeTree/DataPartsExchange.cpp
#	src/Storages/MergeTree/IMergeTreeDataPart.cpp
#	src/Storages/MergeTree/MergeTask.cpp
#	src/Storages/MergeTree/MergeTreeData.cpp
#	tests/integration/test_replicated_database/test.py
#	tests/queries/0_stateless/02253_empty_part_checksums.sh
#	tests/queries/0_stateless/02254_projection_broken_part.sh
#	tests/queries/0_stateless/02255_broken_parts_chain_on_start.sh
#	tests/queries/0_stateless/02369_lost_part_intersecting_merges.sh
#	tests/queries/0_stateless/02370_lost_part_intersecting_merges.sh
#	tests/queries/0_stateless/02444_async_broken_outdated_part_loading.sh
#	tests/queries/0_stateless/04215_replicated_missing_covered_part_on_start.sh
#	tests/queries/0_stateless/04327_reader_executor_metrics.sql
#	tests/queries/0_stateless/04328_reader_executor_kpi_async_metric.sql
Source PR: #2159

- `.github/workflows/*.yml` are generated: kept at the base version; the
  "Check Workflows" job regenerates them from `ci/workflows/*.py`
  (`python3 -m praktika yaml`), which now include the CAS lanes.
- Stateless tests 02253/02254/02255/02369/02370/02444/04215 stay deleted:
  `antalya-26.8` converted them to integration tests (7f7a30e).
- `ci/defs/altinity_jobs.py`: dropped the duplicated
  `cas_functional_tests_jobs` (already on base from 5aaf212).

Adapted: DiskObjectStorageTransaction - PR's `dispatch` mapped onto base `addOperation` (made eager also for `transactionIsStagingOverlay`), keeps `appliesOperationsEagerly` for in-memory metadata
Adapted: RegisterDiskObjectStorage - `use_fake_transaction` selection dropped, fake transactions were removed on base (c6254c3)
Adapted: copyS3File - `copy_mode` threaded through base `copyS3FileImpl`; ranged copies use `ObjectStorageCopyMode::Default`
Adapted: DataPartStorageOnDiskFull - in-flight reads moved into the base `*Impl` overrides (packed skip-index overlay lives in the base wrapper)
Adapted: MergeTask/IMergeTreeDataPart - `use_parent_transaction` passed to base `getProjectionNoInitialize`
Adapted: DataPartsExchange - kept base `REPLICATION_PROTOCOL_VERSION_WITH_INVALIDATED_SYSTEM_COLUMNS = 10`, negotiation tops out at `WITH_CA_CONFIRM = 11`
Adapted: MergeTreeData - empty covering part already commits its disk transaction on base, PR's CAS-only commit dropped as redundant
Adapted: functional_tests.py - RustFS start folded into base SeaweedFS-based `start`
Source-PR: #2159 (#2159)
…next commit)

---
Original cherry-pick message follows:

Merge pull request #2300 from Altinity/feature/antalya-26.6/CAS-improvements

CAS improvements
# Conflicts:
#	src/Common/ErrorCodes.cpp
#	src/Disks/DiskObjectStorage/ObjectStorages/S3/S3ObjectStorage.cpp
#	src/Disks/DiskObjectStorage/ObjectStorages/S3/S3ObjectStorage.h
#	src/IO/ReadBufferFromS3.cpp
#	src/IO/ReadSettings.h
#	src/IO/S3/tests/TestPocoHTTPServer.h
#	src/IO/WriteSettings.h
- `ErrorCodes.cpp`: kept antalya-26.8 numbering (1009-1018) and the
  `CLICKHOUSE_PARSER_MINIMAL_BUILD` guard; added the PR's
  `CAS_WRITE_UNATTRIBUTED` (1037) and `CAS_DELETE_MARKER` (1038), END = 1038.
  Dropped the PR's comments describing the antalya-26.6 1009-1011 layout,
  which does not exist on antalya-26.8.
- `S3ObjectStorage`: combined the PR's `client_slot`/`client` reference with
  antalya-26.8's `client_restricts_server_credentials`, the iterator's
  `description` with the PR's `attempt_seed`, and antalya-26.8's
  `UnknownSize`-aware size and `object.etag` args with the PR's
  `refresh_callback`.
- `TestPocoHTTPServer.h`: kept `makeMockServerParams` and added the PR's
  dedicated thread pool and destructor.
- Adapted the PR's `S3::setClickhouseAttemptNumber` calls to
  `S3::setClickHouseAttemptNumber`, renamed on antalya-26.8 by e8e1e12.

Adapted: setClickhouseAttemptNumber -> setClickHouseAttemptNumber (renamed by e8e1e12 on antalya-26.8)
Source-PR: #2300 (#2300)
…next commit)

---
Original cherry-pick message follows:

Merge PR #2307 (cas/configurable-mount-lease-timing) into feature/antalya-26.6/CAS-improvements-cicd-fixes

Brings k-morozov's configurable CAS mount lease TTL / renewal period
(#2307) so the heartbeat-model
work can land on top of it while keeping the author's commits intact.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GhVd7eMAWdFubNk4g1B2Tx

# Conflicts:
#	src/Disks/DiskObjectStorage/MetadataStorages/ContentAddressed/ContentAddressedMetadataStorage.cpp

Signed-off-by: Mikhail Filimonov <mfilimonov@altinity.com>

# Conflicts:
#	docs/en/antalya/cas/configuration.md
#	src/Disks/DiskObjectStorage/MetadataStorages/ContentAddressed/ContentAddressedMetadataStorage.cpp
#	src/Disks/DiskObjectStorage/MetadataStorages/ContentAddressed/ContentAddressedMetadataStorage.h
#	src/Disks/DiskObjectStorage/MetadataStorages/ContentAddressed/ContentAddressedSettings.cpp
All changes from #2307 (`mount_lease_ttl_ms` / `mount_renew_period_ms` settings, members, wiring into `PoolConfig`, validation, docs) are already present on the base. The conflicting hunks keep the base side, which has later additions on top of them (`unsafe_remount_no_delay`, the `attempt_timeout_ms` check, `connect_timeout_cap_ms`, and the refined `cas_mount_renew_period_ms` doc text).

Source-PR: #2307 (#2307)
…next commit)

---
Original cherry-pick message follows:

Merge pull request #2349 from Altinity/cas/memworker-split-allocated-source

MemoryWorker: use sanitizer info for allocated counter
# Conflicts:
#	src/Common/MemoryWorker.cpp
Kept the speculative RSS reservation block present on antalya-26.8 and
switched its reads of the former `resident` local to `memory_usage.resident`,
since `getMemoryUsage` now returns `MemoryUsage`.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Source-PR: #2349 (#2349)
…ed-variable

Fix the coverage build: unused variable in gtest_cas_throttling_gate.cpp

Source-PR: #2360 (#2360)
…time-knobs

CI: cap the RustFS blocking-thread pool on the CAS-S3 lanes and collect its log
Source-PR: #2384 (#2384)
…next commit)

---
Original cherry-pick message follows:

Merge pull request #2385 from Altinity/fix/antalya-26.6/lldb-budget-and-sigcont

CI: lldb stack budget by build flavor, and keep lldb's JIT breakpoint out of the server
# Conflicts:
#	ci/tests/test_print_stacktraces.py
#	tests/clickhouse-test
tests/clickhouse-test: applied the PR's lldb budget and JIT-loader flag on
top of the antalya-26.8 shape of get_stacktraces_from_lldb (sudo/shutil.which
lldb path and keep_output_on_error kept; no _ensure_lldb_installed, which
antalya-26.8 does not have). Docstring keeps the 'liveness check' call site
that exists on antalya-26.8.

ci/tests/test_print_stacktraces.py: kept deleted, as on antalya-26.8, where
3a69545 removed all of ci/tests/. The PR's test changes to that file are
therefore not carried over.

Source-PR: #2385 (#2385)
…-on-listing-keys

Temporary workaround: do not probe object-storage listing keys as JSON

Source-PR: #2393 (#2393)
…next commit)

---
Original cherry-pick message follows:

Merge pull request #2292 from Altinity/enable-cas-s3-stress

Enable cas s3 stress
# Conflicts:
#	.github/workflows/master.yml
#	.github/workflows/pull_request.yml
#	ci/tests/test_stress_job.py
Kept the antalya-26.8 `needs` lists of `finish_workflow` in `master.yml` and
`pull_request.yml` and added only the four `stress_test_amd_*_cas_s3_storage`
jobs introduced by the source PR. Kept both `ensure_ripgrep_installed` and
`get_additional_envs` imports in `ci/tests/test_stress_job.py`.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Source-PR: #2292 (#2292)
…-probes-no-list

CAS: answer directory probes inside a part from the part manifest, no LIST per part file
Source-PR: #2440 (#2440)
…val-one-drop-pr

CAS: remove a part with one ref drop
Source-PR: #2452 (#2452)
…meta-delete

CAS GC: delete a condemn marker only for the condemnation that owns it

Source-PR: #2463 (#2463)
…next commit)

---
Original cherry-pick message follows:

Merge pull request #2444 from Altinity/docs/antalya-26.6/metrics-and-events

Document Antalya-only profile events and metrics.
# Conflicts:
#	src/Common/ProfileEvents.cpp
…strictness-pr

CAS: drop KeyStrictness, readers skip unknown ordinary keys
Source-PR: #2455 (#2455)
…ete-key-limit

CAS GC: cut batch deletes to the storage's batch-delete limit

Source-PR: #2484 (#2484)
…ng-after-read

Date a GC mount-token sighting after the read that returned it

Source-PR: #2509 (#2509)
…tinel-boundary

Return the last Indeterminate when a CAS probe pause ends on the deadline

Source-PR: #2510 (#2510)
…next commit)

---
Original cherry-pick message follows:

Merge pull request #2511 from Altinity/fix/antalya-26.6/cas-renewal-memory-guard

Keep the CAS mount lease renewal alive over the server memory limit
# Conflicts:
#	src/Disks/DiskObjectStorage/MetadataStorages/ContentAddressed/Pool/CasMountRuntime.cpp
Kept both includes: `Common/ProfileEvents.h` from antalya-26.8 and `Common/LockMemoryExceptionInThread.h` from the source PR.

Source-PR: #2511 (#2511)
…r-time-budget

CAS GC: batch the namespace janitor's deletes under a soft time budget

Source-PR: #2483 (#2483)
@zvonand zvonand added the forwardport This is a frontport of code that existed in previous Antalya versions label Oct 16, 2026
@k-morozov k-morozov closed this Oct 16, 2026
@k-morozov k-morozov reopened this Oct 16, 2026
@github-actions

github-actions Bot commented Oct 16, 2026 •

Copy link
Copy Markdown

Workflow [PR], commit [267672c]

zvonand and others added 2 commits October 16, 2026 16:41
`AlterDropPartitionExecutor` (#2533) called
`getManifestFileEntriesHandle` and `generateManifestList` without the `ExternalStorageCache`
argument added by #2551. Pass the cache of
`IcebergMetadata` to the executor.
Add CAS disk to existing backup tests

Source-PR: #2437 (#2437)
@k-morozov
k-morozov changed the base branch from antalya-26.8 to feature/antalya-26.8/auto-grp-pr-2159 October 19, 2026 11:22
@k-morozov
k-morozov changed the base branch from feature/antalya-26.8/auto-grp-pr-2159 to antalya-26.8 October 19, 2026 11:33
Signed-off-by: Konstantin Morozov <just.morozov.k@gmail.com>

# Conflicts:
#	programs/local/LocalServer.cpp
#	programs/server/Server.cpp
#	src/Common/ErrorCodes.cpp
#	src/Common/FailPoint.cpp
#	src/Core/ServerSettings.cpp
#	src/Interpreters/InterpreterSystemQuery.cpp
#	src/Storages/ObjectStorage/DataLakes/Iceberg/AlterDropPartitionExecutor.cpp
#	src/Storages/ObjectStorage/DataLakes/Iceberg/AlterDropPartitionExecutor.h
#	src/Storages/ObjectStorage/DataLakes/Iceberg/IcebergMetadata.cpp
…acked-parts

Signed-off-by: Konstantin Morozov <just.morozov.k@gmail.com>

# Conflicts:
#	.github/workflows/master.yml
#	.github/workflows/pull_request.yml
Signed-off-by: Konstantin Morozov <just.morozov.k@gmail.com>
@k-morozov
k-morozov marked this pull request as ready for review October 22, 2026 20:22

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

antalya antalya-26.8 Session label (releasy session config) CAS forwardport This is a frontport of code that existed in previous Antalya versions

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants