ClickHouse / ClickHouse/clickhouse-java
[client-v2, jdbc-v2] Make execution TIMEOUT error optionally retriable
- Ngôn ngữ chính
- Java
- Star
- 1.6k
- Fork
- 636
- Merge trung bình
- 2 ngày 23 giờ
- Pull request đã merge (30 ngày)
- 29
Mô tả
## Description
Current `159, TIMEOUT_EXCEEDED` is retried unconditionally. It should be a dedicated failure cause selectable per operation because different queries need different behavior:
| Query Type | Scenario | Retriable? | Recommended Action |
| :--- | :--- | :---: | :--- |
| **`SELECT`** | Pure read operations | **Yes** | Retry with exponential backoff or redirect to a replica node. |
| **`SELECT`** | Heavy unoptimized query hitting `max_execution_time` | **No** | Do not retry under identical settings. Increase `max_execution_time` or rewrite query. |
| **`INSERT`** | MergeTree tables with deduplication active (`insert_deduplicate = 1`) | **Yes** | Safe to retry using the exact same data block structure. |
| **`INSERT`** | Tables without block deduplication | **No** | **Unsafe.** Partial blocks may have been written; retrying risks duplicate rows. Check table state first. |
| **`DDL / Mutations`** | `ALTER`, `OPTIMIZE`, or background mutations | **No** | Inspect system tables (`system.mutations`, `system.merges`) before re-executing. |
Hướng dẫn đóng góp
Hướng nghiên cứu
Bắt đầu bằng cách lần theo việc xử lý TIMEOUT_EXCEEDED trong client-v2 và jdbc-v2, đặc biệt là cách lỗi 159 hiện được thử lại. So sánh việc xử lý các thao tác SELECT, INSERT và DDL hoặc các mutation, sau đó xác định lựa chọn retry theo từng thao tác nên nằm ở đâu. Được xem là hoàn tất khi hành vi retry sau timeout có thể khác nhau tùy thao tác và phản ánh các khác biệt về tính an toàn được mô tả trong bảng.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- java
- Lĩnh vực
- api, databases
- Loại issue
- Tính năng
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Sôi nổi
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 48/100