ClickHouse / ClickHouse/clickhouse-java

DataTypeConverter usage has potential thread-safety issues

未关闭
#2,728 1 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
bug client-api-v2
主要语言
Java
星标
1.6k
派生
637
平均合并
2 天 23 小时
30 天内合并 PR
29

描述

## Description

_This is not an explicit bug report in the sense that I haven't experienced a problem (yet?), it is just something I bumped into while browsing the code_.

`DataTypeConverter` has a [javadoc comment stating that it is not thread safe](https://github.com/ClickHouse/clickhouse-java/blob/main/client-v2/src/main/java/com/clickhouse/client/api/internal/DataTypeConverter.java#L25). For what it's worth, I have also confirmed thread safety problems because I ended up using the `DataTypeConverter.INSTANCE` in production (before I realised that it was labelled as non thread safe) which caused some bugs.

After fixing the bugs in my project, I was curious about the fact that a static singleton `DataTypeConverter.INSTANCE` was even declared in the `clickhouse-java` repo (why have a singleton instance if it is not thread safe, in an otherwise thread safe library?). Of course this class is in a package named `internal`, so it's not really my business... :) Still, I did notice that `DataTypeConverter.INSTANCE` is used in [two](https://github.com/ClickHouse/clickhouse-java/blob/8da0b0c9aa7995b9fa839b56861a28047f71076a/client-v2/src/main/java/com/clickhouse/client/api/data_formats/internal/MapBackedRecord.java#L48) [places](https://github.com/ClickHouse/clickhouse-java/blob/8da0b0c9aa7995b9fa839b56861a28047f71076a/client-v2/src/main/java/com/clickhouse/client/api/data_formats/internal/AbstractBinaryFormatReader.java#L90) which makes me wonder if it could be the source of (other / future / not-yet-encountered) problems..

贡献指南

打开贡献指南

调研方向

先查看 client-v2/src/main/java/com/clickhouse/client/api/internal/DataTypeConverter.java 的 javadoc 和实现,然后检查其在 MapBackedRecord.java 和 AbstractBinaryFormatReader.java 中的使用。跟踪可变状态和现有测试,以确定预期的线程安全契约;完成的标准应包括能够安全测试共享 INSTANCE 的 coverage,或记录其无法共享的原因。

由索引模型根据 Issue 内容生成。

评估

技术栈
java
领域
api, backend
Issue 类型
缺陷
难度
4/5
预计耗时
3-5 天
活跃度
冷清
描述清晰度
需要澄清
新手友好度
38/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。