questdb / questdb/java-questdb-client
1 million of district symbols limit
Nobody has claimed this yet.
- Dominant language
- Java
- Stars
- 10
- Forks
- 6
- Avg merge
- 6h 40m
- Merged PRs (30d)
- 2
Description
To reproduce
Review point M6 in https://github.com/questdb/java-questdb-client/pull/66#issuecomment-5183155169 is very valid
M6 — At the 1M cap, the error message's remedy is not performable through SenderPool (out-of-diff). getOrAddSymbol says "close this sender and build a new one", but PooledSender.close() (:153) gives the delegate back rather than closing it, and reset() does not clear globalSymbolDictionary. A delegate that hit the cap is handed to the next borrower still full, throwing on every new symbol value. Only incidental reapIdle recovers it.
QuestDB version:
latest
OS, in case of Docker specify Docker and the Host OS:
any
File System, in case of Docker specify Host File System:
any
Full Name:
Alex Pelagenko
Affiliation:
QuestDB
Have you followed Linux, MacOs kernel configuration steps to increase Maximum open files and Maximum virtual memory areas limit?
- Yes, I have
Additional context
No response
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Read PooledSender.close() around line 153, then trace reset(), globalSymbolDictionary, and getOrAddSymbol through SenderPool. Reproduce the 1M-symbol-cap path and verify that a delegate borrowed after close/reset can accept new symbol values without relying on incidental reapIdle, while preserving the documented remedy.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java
- Domain
- api, backend
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 68/100