ClickHouse / ClickHouse/clickhouse-cpp

Client not always throws an exception on server error during insert

Offen
#406 1 Kommentar 1 Reaktion 0 zugewiesene Personen Auf GitHub ansehen
bug need-info
Vorherrschende Sprache
C
Sterne
382
Forks
209
Ø Merge
1 T. 22 Std.
Gemergte PRs (30 T.)
13

Beschreibung

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?

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Rechercherichtung

Beginne damit, einen synchronen Insert-Fehler mithilfe des im Issue beschriebenen serverseitigen Szenarios mit unzureichendem Speicherplatz zu reproduzieren, und verfolge anschließend, wie der C++-Client die Serverantwort verarbeitet. Als erledigt gilt die Aufgabe, wenn serverseitige Insert-Ausnahmen an den Aufrufer weitergereicht werden, statt stillschweigend zurückgegeben zu werden; füge einen Regressionstest hinzu oder führe ihn aus, wenn die bestehende Testeinrichtung diesen Fall unterstützt.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
cpp
Bereich
databases
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.