ClickHouse / ClickHouse/clickhousectl

`cloud udf delete` is blocked while any version is `building`, undocumented; UDF list/delete output differs from every sibling

Open
#854 0 comments 0 reactions 0 assignees View on GitHub
cloud documentation
Dominant language
Rust
Stars
74
Forks
5
Avg merge
2d 11h
Merged PRs (30d)
196

Description

## Validated scope and current-PR plan — 2026-09-11

This section records the QA review and the current decision to finalize existing PRs without opening new PRs. It supersedes the proposed routing/fix suggestions in the original report below; the original observations are retained. Central plan: #757.

### Disposition

Deferred from this existing-PR finalization pass. Keep the issue open; no new PR is requested now. This is not a resolution, a severity downgrade, or a waiver of release acceptance.

### Validation and corrections

Whole-function building precondition is reported live behavior and a reasonable help addition. Empty-state and delete confirmations can be improved locally. Pagination metadata is useful information, not inherently a leak; retain an intelligible count/page indicator. DELETE response JSON overlaps #849/#863 and should follow their output contract decision.

---

## Original QA report

Found in the 2026-09-11 QA sweep of the combined PR stack at [`d2c37f81`](https://github.com/ClickHouse/clickhousectl/commit/d2c37f814fff53fe68d636e34103e2d0550bf84d), top PR #823, installed release build (package version still 0.4.2). Reproduced behaviour only; no implementation included.

Severity: low.

After `udf create` + `udf version create` (both `status: building`), `cloud udf delete ` → `Error: A UDF version is still building and the UDF cannot be deleted`, exit 1, until ~100 s later. The precondition is documented only for `udf version delete` ("versions still building cannot be deleted individually"), not for whole-function `udf delete`, whose CONTEXT says "Deletes every version and detaches the UDF from all services".

Output nits in the same module:
- `udf list` / `version list` / `attachment list` with zero rows print an empty markdown table followed by loose `limit: 100` / `totalRecords: 0` lines; every other empty list prints "No X found". Non-empty lists append the same pagination lines after the table — the only place pagination metadata leaks into the human view.
- `udf delete` / `version delete` print `status: 200` / `requestId: …` (the shared `DeleteResponse` through generic `print_human`) where every sibling prints a sentence. The same `DeleteResponse` pattern backs `settings unset --json` (see #849).

Contributor guide

No contributing guide indexed for this repository

Research direction

Start in the cloud UDF command handlers and the shared DeleteResponse/print_human path mentioned in the report; compare udf list, version list, attachment list, udf delete, and version delete with sibling commands. Check #757, #849, and #863 for the current output-contract decision, then make the whole-function building precondition, empty-state output, pagination display, and delete output consistent with the agreed behavior.

Written by the indexing model from the issue text.

Assessment

Tech stack
clickhouse, rust
Domain
cli, documentation
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.