Skip to content

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

Open
@Valeronik

Description

@Valeronik

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

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?

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugnetworknetwork and IO related issuestriagedIssue is triagedusabilitywhat affects usability of the client

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions