Skip to content

Antalya 26.6: Antalya 26.3 port - improvements for cluster requests - #2133

Closed
zvonand wants to merge 2 commits into
antalya-26.6from
feature/antalya-26.6/pr-1687
Closed

Antalya 26.6: Antalya 26.3 port - improvements for cluster requests#2133
zvonand wants to merge 2 commits into
antalya-26.6from
feature/antalya-26.6/pr-1687

Conversation

@zvonand

@zvonand zvonand commented Jul 30, 2026

Copy link
Copy Markdown
Member

Changelog category (leave one):

  • Not for changelog

CI/CD Options

Exclude tests:

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

Regression jobs to run:

  • Fast suites (mostly <1h)
  • Aggregate Functions (2h)
  • Alter (1.5h)
  • Benchmark (30m)
  • ClickHouse Keeper (1h)
  • Iceberg (2h)
  • LDAP (1h)
  • Parquet (1.5h)
  • RBAC (1.5h)
  • SSL Server (1h)
  • S3 (2h)
  • S3 Export (2h)
  • Swarms (30m)
  • Tiered Storage (2h)

Cherry-picked from #1687.


Cherry-picked from #1414, also has changes from #1597.

zvonand added 2 commits July 30, 2026 13:44
…next commit)

---
Original cherry-pick message follows:

Merge pull request #1687 from Altinity/feature/antalya-26.3/pr-1414-1

Antalya 26.3 port - improvements for cluster requests
# Conflicts:
#	src/Common/ProfileEvents.cpp
#	src/Core/Settings.cpp
#	src/Disks/DiskObjectStorage/ObjectStorages/IObjectStorage.cpp
#	src/Storages/ObjectStorage/DataLakes/Iceberg/ManifestFileIterator.cpp
#	src/Storages/ObjectStorage/StorageObjectStorageCluster.cpp
#	src/Storages/ObjectStorage/StorageObjectStorageSource.cpp
#	src/Storages/StorageFileCluster.cpp
#	src/Storages/StorageURLCluster.cpp
#	tests/integration/test_s3_cluster/test.py
#	tests/queries/0_stateless/03413_experimental_settings_cannot_be_enabled_by_default.sql
Kept both sides where antalya-26.6 and the port added independent code
(ProfileEvents rows, settings declarations, obsolete settings, test cases,
experimental-settings exception list).

Adapted for antalya-26.6:
- Dropped the moved local `deserializeFieldFromBinaryRepr` copy in
  ManifestFileIterator.cpp (the port moves it to IcebergFieldParseHelpers);
  the Variant early-return of the local copy is unreachable because the
  call site already skips Variant columns.
- `StorageObjectStorageSource::createReader` on antalya-26.6 uses a
  `while (true)` loop with explicit `continue`/`break` (query condition
  cache handling) instead of the port's `do/while`, so the port's retry
  command handling uses `continue` directly and the `not_a_path` flag is
  not needed.
- Skipped re-adding `extern const SettingsBool input_format_parquet_use_native_reader_v3`
  in StorageObjectStorageSource.cpp: it is an obsolete setting on antalya-26.6.
- `StorageFileCluster`/`StorageURLCluster`: the new `FileTaskIterator`/
  `UrlTaskIterator` classes get virtual columns from the storage metadata
  snapshot (`metadata->virtuals.getSampleBlock(...)`), since
  `getVirtualsList()` no longer exists on antalya-26.6.
- Moved the antalya-26.6 `storage_cluster_read_sleep` failpoint from the
  removed task-iterator lambda into `TaskDistributor::operator()` in
  StorageObjectStorageCluster.cpp.

- `test_read_constant_columns_optimization.py`: the profile-event expectation
  assumed the 26.1 behaviour where every Iceberg data file was fetched twice
  (`expected * 2`) because `ReadFileMetadata` did not use the local file cache.
  On antalya-26.6 each data file is fetched exactly once, so the expectation is
  `expected + 1` (local) / `expected + 4` (cluster, one metadata.json per
  subquery). The per-query read counts the test asserts (7 without the
  optimization; 5/0/4/3/0 with it) are unchanged.
@zvonand zvonand added releasy Created/managed by RelEasy antalya-26.6 ai-resolved Port conflict auto-resolved by Claude labels Jul 30, 2026
@github-actions

Copy link
Copy Markdown

Workflow [PR], commit [315be62]

@ianton-ru ianton-ru self-assigned this Jul 30, 2026
@zvonand

zvonand commented Jul 31, 2026

Copy link
Copy Markdown
Member Author

Superseded: this PR ported a single member of the auto-grp-pr-1687 group in isolation.

Per the port graph (#2048) that group ports as one combined PR covering #1687, #1751, #1991, #1759. The group definition had been lost from the session config, so each member was queued as its own unit — that's now fixed and the combined PR will be opened by the next releasy run.

Closing in favour of the combined port.

@zvonand zvonand closed this Jul 31, 2026
zvonand added a commit to Altinity/RelEasy that referenced this pull request Jul 31, 2026
A group written to the deps overlay was silently deleted from every file
`run` reads on the next `graph discover`, so its members each ported as a
separate PR while the graph report and the issue kept displaying the group.
On antalya-26.6 all six groups were lost this way: #1687 went out alone as
Altinity/ClickHouse#2133 instead of as a 4-PR combined port, #1718 alone
instead of 23, and pr-1843 / pr-1984 were left permanently gated behind
`auto-grp-pr-1718`, a unit that no longer existed.

The bit that distinguishes an overlay group from a hand-curated one didn't
survive the round-trip: `PRGroupConfig.auto_discovered` had nowhere to go in
`FeatureUnit`, so `_build_candidate_unit_set` set `is_user_group` from
`is_group` alone and every overlay group came back marked user-declared.
After that the group belonged to nobody — `_write_session_overlay` skipped it
("user groups live in the main session"), `_reconcile_session_user_groups`
couldn't find it in `pr_sources.groups` and only warned, and
`_collapse_components_to_groups` refused to re-merge its component. The
discover summary reported the loss as `refresh: N removed since last run`,
which reads like PRs landing in target.

Carry the flag through `FeatureUnit.auto_discovered`, and split
`_CandidateUnit.is_group` (cherry-picks several PRs as one) from
`is_user_group` (hand-curated, don't rewrite). Overlay groups are now
`is_group=True, is_user_group=False`, so the trial pick still runs combined
and the overlay writer keeps re-emitting them.

`_reconcile_session_user_groups` now creates a missing session group instead
of warning: the overlay refuses to carry user groups, so skipping left the
group in the report and the issue but in neither file `run` reads. It
inherits `pr_policy.if_exists` rather than pinning PRGroupConfig's "skip".

Group ids get an idempotent `_auto_group_id`. Now that a re-read auto group
can be merged into a larger component again — the intended "the group simply
grows" path, suppressed by this bug — the lead-id scheme would otherwise
produce `auto-grp-auto-grp-pr-1687` and orphan its cache branch and state.

`pr_membership.remove_pr` no longer claims `dropped from group 'X'` for an
overlay group, where `save_session` filters the edit out. The veto is
unaffected; it lands via exclude_prs, which discovery applies to members.

6 tests in tests/test_graph_update.py: the overlay round-trip (auto stays
auto, user groups stay out of the overlay), group creation on reconcile,
and `_auto_group_id`. Reverting just the `is_user_group` line reproduces the
original failure — the group missing from the overlay.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ai-resolved Port conflict auto-resolved by Claude antalya antalya-26.6 releasy Created/managed by RelEasy

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants