ClickHouse / ClickHouse/clickhouse-java

clickhouse-http-client: how do I close the connection in case of an error?

Đang mở
#1,712 3 bình luận 0 reaction 0 người được giao Xem trên GitHub
area:network bug triaged usability
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ả

### When the client cancels the request, the connection to the asynchronous request is not closed

I use **spring-boot** in combination with **clickhouse-http-client** and **Kotlin**
Library Version: **com.clickhouse:clickhouse-http-client:0.6.1**

### Steps to reproduce
1. If the client sends 10 read requests and cancels them, the limit in **max_open_connections** (ClickHouseHttpOption.MAX_OPEN_CONNECTIONS) will be reached, because, in fact, the connection will not be closed by anyone.

### Code example
```kotlin
package com.api.test

import com.clickhouse.client.ClickHouseClient
import com.clickhouse.client.ClickHouseNode
import com.clickhouse.data.ClickHouseFormat
import kotlinx.coroutines.future.await
import org.slf4j.LoggerFactory
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController
import kotlin.coroutines.cancellation.CancellationException

@RestController
@RequestMapping("/test")
class TestApi(
private val clickHouseClient: ClickHouseClient,
private val clickhouseNode: ClickHouseNode,
) {
private val logger = LoggerFactory.getLogger(TestApi::class.java)

@GetMapping("/read")
suspend fun read() {
try {
val response = clickHouseClient.read(clickhouseNode)
.format(ClickHouseFormat.JSON)
.query("""SELECT sleep(3)""".trimIndent())
.execute()
.await()
response.close()
} catch (e: CancellationException) {
logger.error("Error", e)
// How do I close the connection?
}
}
}
```

### Question
ClickHouse has the **cancel_http_readonly_queries_on_client_close** option. But how can I use the library to initiate connection closure instead of waiting for a response? Or maybe I can cancel a previously sent request?

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Hướng nghiên cứu

Bắt đầu bằng cách theo dõi ClickHouseClient.read(...).execute() và đường dẫn await của coroutine được sử dụng trong ví dụ, sau đó kiểm tra cách ClickHouseHttpOption.MAX_OPEN_CONNECTIONS và response.close() được xử lý trong quá trình hủy. Tái hiện các request bị hủy và xác định hành vi dọn dẹp kết nối và truy vấn máy chủ được mong đợi.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
kotlin, spring-boot
Lĩnh vực
backend, databases
Loại issue
Lỗi
Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức độ hoạt động
Đình trệ
Độ rõ ràng
Cần làm rõ
Mức phù hợp với người mới
30/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.