ClickHouse / ClickHouse/clickhouse-cpp

Client not always throws an exception on server error during insert

オープン
#406 コメント 1 件 リアクション 1 件 担当者 0 名 GitHub で見る
bug need-info
主要言語
C
スター
382
フォーク
208
平均マージ
2日 19時間
マージ済み PR(30日)
14

説明

Hello!

I have a `C++` code, which processes some data and repeatedly inserts the results to a clickhouse table. I have discovered that in some cases when insertion fails server-side, the client doesn't throw any exception and silently returns the control (inserts are made synchronously).

The latest server-side error, which haven't been handled by the `C++` client, was caused by insufficient disk space, the stack trace is below:
```
0. DB::Exception::Exception(DB::Exception::MessageMasked&&, int, bool) @ 0x000000000e348c95 in /usr/bin/clickhouse
1. ? @ 0x000000001307a856 in /usr/bin/clickhouse
2. DB::MergeTreeData::reserveSpacePreferringTTLRules(std::shared_ptr const&, unsigned long, DB::MergeTreeDataPartTTLInfos const&, long, unsigned long, bool, std::shared_ptr) const @ 0x0000000014850dbb in /usr/bin/clickhouse
3. DB::MergeTreeDataWriter::writeTempPartImpl(DB::BlockWithPartition&, std::shared_ptr const&, std::shared_ptr, long, bool) @ 0x00000000149f61c6 in /usr/bin/clickhouse
4. DB::MergeTreeSink::consume(DB::Chunk) @ 0x0000000014b818fc in /usr/bin/clickhouse
5. DB::SinkToStorage::onConsume(DB::Chunk) @ 0x0000000014ff6566 in /usr/bin/clickhouse
6. ? @ 0x0000000014f3dbeb in /usr/bin/clickhouse
7. ? @ 0x0000000014f3d91c in /usr/bin/clickhouse
8. DB::ExceptionKeepingTransform::work() @ 0x0000000014f3d1d8 in /usr/bin/clickhouse
9. DB::ExecutionThreadContext::executeTask() @ 0x0000000014d37d89 in /usr/bin/clickhouse
10. DB::PipelineExecutor::executeStepImpl(unsigned long, std::atomic*) @ 0x0000000014d2ea10 in /usr/bin/clickhouse
11. DB::PipelineExecutor::executeStep(std::atomic*) @ 0x0000000014d2e1c8 in /usr/bin/clickhouse
12. DB::PushingPipelineExecutor::push(DB::Chunk) @ 0x0000000014d40d15 in /usr/bin/clickhouse
13. DB::PushingPipelineExecutor::push(DB::Block) @ 0x0000000014d40f06 in /usr/bin/clickhouse
14. DB::TCPHandler::processInsertQuery() @ 0x0000000014cdd32a in /usr/bin/clickhouse
15. DB::TCPHandler::runImpl() @ 0x0000000014cd4760 in /usr/bin/clickhouse
16. DB::TCPHandler::run() @ 0x0000000014cea079 in /usr/bin/clickhouse
17. Poco::Net::TCPServerConnection::start() @ 0x0000000017c2fe34 in /usr/bin/clickhouse
18. Poco::Net::TCPServerDispatcher::run() @ 0x0000000017c31051 in /usr/bin/clickhouse
19. Poco::PooledThread::run() @ 0x0000000017dadd07 in /usr/bin/clickhouse
20. Poco::ThreadImpl::runnableEntry(void*) @ 0x0000000017dab73c in /usr/bin/clickhouse
21. start_thread @ 0x0000000000007fa3 in /usr/lib/x86_64-linux-gnu/libpthread-2.28.so
22. __clone @ 0x00000000000f906f in /usr/lib/x86_64-linux-gnu/libc-2.28.so
```

Is it possible to enable client-side exceptions on any server-side exception?

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

調査の方向性

まず、issue に記載されているサーバー側のディスク容量不足シナリオを使って同期 insert の失敗を再現し、次に C++ クライアントがサーバーの応答をどのように処理するかを追跡します。サーバー側の insert 例外が何も返さずに終了するのではなく呼び出し元に通知されれば完了です。既存のテスト構成がこのケースをサポートしている場合は、回帰テストを追加するか実行してください。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
cpp
領域
databases
issue の種類
バグ
難易度
4/5
見積もり時間
3〜5日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
35/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。