Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
240 commits
Select commit Hold shift + click to select a range
de43e2a
merge fallout
bluestreak01 Feb 14, 2026
dee93bd
tidy
bluestreak01 Feb 14, 2026
ab2f5b5
move client test
bluestreak01 Feb 14, 2026
73ee623
more tidy
bluestreak01 Feb 14, 2026
49ecfa7
ilpv4 -> QWP (QuestDB Wire Protocol)
bluestreak01 Feb 14, 2026
10c306a
tidy
bluestreak01 Feb 14, 2026
f12a6f9
wip
bluestreak01 Feb 15, 2026
d442198
wip2
bluestreak01 Feb 15, 2026
ea798b8
wip3
bluestreak01 Feb 15, 2026
3e444a0
wip4
bluestreak01 Feb 15, 2026
dd4bb62
wip 5
bluestreak01 Feb 16, 2026
f609b5a
wip 9
bluestreak01 Feb 22, 2026
eb9531d
wip 11
bluestreak01 Feb 22, 2026
7f16328
wip 12
bluestreak01 Feb 22, 2026
8795081
move test workloads/benchmarks to the client maven module
jerrinot Feb 23, 2026
992cd8e
wip 13
bluestreak01 Feb 23, 2026
eacff2d
Merge branch 'jh_experiment_new_ilp' of https://github.com/questdb/ja…
bluestreak01 Feb 23, 2026
332b66f
Fix pong frame clobbering in-progress send buffer
mtopolnik Feb 24, 2026
82955d0
Fix buffer overrun in WebSocket close frame
mtopolnik Feb 24, 2026
8439f45
Echo close frame on WebSocket close (RFC 6455)
mtopolnik Feb 24, 2026
c41aa58
Add WebSocket fragmentation support (RFC 6455)
mtopolnik Feb 24, 2026
8457d1b
Cap recv buffer growth to prevent OOM
mtopolnik Feb 24, 2026
1dc87d7
Use ephemeral ports in WebSocket builder tests
mtopolnik Feb 24, 2026
00c145b
Auto-cleanup test code
mtopolnik Feb 24, 2026
dbca590
Don't default QUESTDB_RUNNING to true
mtopolnik Feb 24, 2026
34cc154
Fix case-sensitive header check in WebSocket handshake
mtopolnik Feb 24, 2026
2834b03
Use bulk copyMemory for WebSocket I/O
mtopolnik Feb 24, 2026
6a94139
Fix delta dict corruption on send failure
mtopolnik Feb 24, 2026
6d7a104
Fix TYPE_CHAR validation in QwpColumnDef
mtopolnik Feb 24, 2026
bed5c32
Throw LineSenderException for token in ws/wss config
mtopolnik Feb 24, 2026
924e26a
Fix racy batch ID counter in MicrobatchBuffer
mtopolnik Feb 24, 2026
34e0cf7
Throw on buffer overflow in QwpBitWriter and Gorilla encoder
mtopolnik Feb 24, 2026
ba49b6b
Add NativeBufferWriter tests
mtopolnik Feb 24, 2026
21aa7bb
Fix stale array offsets after cancelRow truncation
mtopolnik Feb 24, 2026
1ef6d9e
Pass auto-flush config to sync-mode WebSocket sender
mtopolnik Feb 24, 2026
38d96c7
Add DECIMAL64/128/256 to isFixedWidthType and getFixedTypeSize
mtopolnik Feb 24, 2026
e65c882
Pool ArrayCapture to eliminate per-row allocations
mtopolnik Feb 24, 2026
4c0c2ff
Remove dead parseBuffer allocation in ResponseReader
mtopolnik Feb 24, 2026
f71a1ee
Auto-clean up QwpBitReader
mtopolnik Feb 24, 2026
b85d890
Sort members alphabetically, remove section headings
mtopolnik Feb 25, 2026
6e13959
Fix Gorilla encoder bucket boundaries
mtopolnik Feb 25, 2026
b8514c0
Remove unused opcode param from beginFrame()
mtopolnik Feb 25, 2026
7a87c76
Use correct default port for WebSocket protocol
mtopolnik Feb 25, 2026
a274be5
Fix inc() not adding key to list
mtopolnik Feb 25, 2026
7d003e0
Validate low surrogate in UTF-8 encoding
mtopolnik Feb 25, 2026
11326f1
Eliminate hot-path allocations in waitForAck
mtopolnik Feb 25, 2026
5f54bc3
Wait for server ACKs on close() in async mode
mtopolnik Feb 25, 2026
b34ba1e
Add GEOHASH support to QWP table buffers
mtopolnik Feb 25, 2026
cf64a41
Use ChaCha20 CSPRNG for WebSocket masking keys
mtopolnik Feb 25, 2026
b6609cd
Simplify QwpBitReader.alignToByte()
mtopolnik Feb 25, 2026
8d16e0f
Fix putUtf8() lone surrogate encoding mismatch
mtopolnik Feb 25, 2026
9254ebf
Fix addSymbol() null on non-nullable columns
mtopolnik Feb 25, 2026
391fce4
Fix addNull() for array types on non-nullable columns
mtopolnik Feb 25, 2026
a92e7b4
Fix sendCloseFrame/sendPing clobbering sendBuffer
mtopolnik Feb 25, 2026
c627823
Fix WebSocketSendBuffer.grow() integer overflow
mtopolnik Feb 25, 2026
4f4f28b
Fix readFrom() leaking stale error messages
mtopolnik Feb 25, 2026
c984919
Fix reset() to clear all table buffers
mtopolnik Feb 25, 2026
93dce20
Fix ensureBits() 64-bit buffer overflow
mtopolnik Feb 25, 2026
1180216
Add bounds check to NativeBufferWriter.skip()
mtopolnik Feb 25, 2026
c55d982
Invalidate cached timestamp columns on flush
mtopolnik Feb 25, 2026
ecb595f
Fix putBlockOfBytes() long-to-int overflow
mtopolnik Feb 25, 2026
542a667
Merge sender state tests into one class
mtopolnik Feb 25, 2026
243c03e
Remove unused sendQueueCapacity parameter
mtopolnik Feb 26, 2026
c58b7cd
Clarify wire vs buffer type size javadoc
mtopolnik Feb 26, 2026
408c889
Round out GEOHASH support
mtopolnik Feb 26, 2026
11a416c
Deduplicate column encoding in QwpWebSocketEncoder
mtopolnik Feb 26, 2026
bde1a51
Delete WebSocketChannel and ResponseReader
mtopolnik Feb 26, 2026
f304d31
Detect decimal overflow on rescale in QwpTableBuffer
mtopolnik Feb 26, 2026
1e452c6
Port QwpGorillaEncoder tests from core
mtopolnik Feb 26, 2026
ec56390
Explain precondition in gorilla encoder
mtopolnik Feb 26, 2026
c81c80f
Add bounds assertion to jumpTo()
mtopolnik Feb 26, 2026
99876bc
Avoid BigDecimal allocation in decimalColumn
mtopolnik Feb 26, 2026
a999a90
Remove redundant local variable
mtopolnik Feb 26, 2026
19ac1c6
Fix UUID storage allocation in QwpTableBuffer
mtopolnik Feb 26, 2026
c1500f8
Delete unused getSymbolsInRange()
mtopolnik Feb 26, 2026
2a11d37
Move GlobalSymbolDictionaryTest to client
mtopolnik Feb 26, 2026
8630ead
Move DeltaSymbolDictionaryTest to client
mtopolnik Feb 26, 2026
793f6f6
Move 5 pure client tests to client submodule
mtopolnik Feb 26, 2026
233f4ed
Port 5 QWP protocol tests from core
mtopolnik Feb 26, 2026
2ee3ac0
Use VarHandle for InFlightWindow statistics
mtopolnik Feb 26, 2026
8a6cbe8
Replace busy-wait with monitor wait in close()
mtopolnik Feb 26, 2026
e153806
Validate Upgrade and Connection headers in WS handshake
mtopolnik Feb 26, 2026
859c7cb
Use SecureRnd for WebSocket handshake key
mtopolnik Feb 26, 2026
9e91498
Clean up client QwpConstants
mtopolnik Feb 26, 2026
e6ef8e8
Remove serverMode from client WebSocketFrameParser
mtopolnik Feb 26, 2026
44f4db0
Style cleanup in Sender
mtopolnik Feb 26, 2026
6867c50
Delete unused code
mtopolnik Feb 26, 2026
099c183
Clean up WebSocketClientFactory
mtopolnik Feb 26, 2026
254c7c3
Fix copyright year
mtopolnik Feb 26, 2026
2a14356
Delete duplicate method utf8Length()
mtopolnik Feb 26, 2026
a8fa836
Add async mode integration tests
mtopolnik Feb 27, 2026
266abfb
Add cancelRow unit tests to QwpWebSocketSenderTest
mtopolnik Feb 27, 2026
3ab006b
Add assertMemoryLeak to client tests
mtopolnik Feb 27, 2026
874d3cf
Add column type mismatch tests
mtopolnik Feb 27, 2026
3e6bdd4
Reject HTTP-specific builder options for WebSocket
mtopolnik Feb 27, 2026
6d30696
Replace Thread.sleep with thread state checks
mtopolnik Feb 27, 2026
33e5796
Add sleep to stress test acker spin loop
mtopolnik Feb 27, 2026
932cafe
Document TOCTOU race in findUnusedPort()
mtopolnik Feb 27, 2026
8e721ef
Bump javadoc plugin source level to Java 17
mtopolnik Feb 27, 2026
2703bf4
Upgrade Java 11 references to Java 17
mtopolnik Feb 27, 2026
ecc73b6
Switch CI to clone jh_experiment_new_ilp branch
mtopolnik Feb 27, 2026
a870977
Merge branch 'main' into jh_experiment_new_ilp
mtopolnik Feb 27, 2026
19eabb0
Fix client artifact ID in CI version overrides
mtopolnik Feb 27, 2026
afc654f
Fix CI client version override for property refs
mtopolnik Feb 27, 2026
90d9361
Enable HTTP server in CI configs
mtopolnik Feb 27, 2026
596d65c
Use packed format for nullable GeoHash columns
mtopolnik Feb 27, 2026
cef8bd3
Fix sed portability for macOS CI runners
mtopolnik Feb 27, 2026
7a39452
Rename CI job to clarify it runs server tests
mtopolnik Feb 27, 2026
ea391bd
Remove dead recursive Net.send(long, long, int)
mtopolnik Mar 2, 2026
2072222
Fix native memory leak in WebSocketClient constructor
mtopolnik Mar 2, 2026
dd2cc0b
Fix sendQueue leak on close when flush fails
mtopolnik Mar 2, 2026
937295c
Fix final field init in WebSocketClient constructor
mtopolnik Mar 2, 2026
0cbba88
Fix receiveFrame() throwing instead of returning false
mtopolnik Mar 2, 2026
fb7fc75
Validate WebSocket payload length before cast
mtopolnik Mar 2, 2026
42472ac
Fix buffer growth integer overflow in WebSocketClient
mtopolnik Mar 2, 2026
63f8f17
Fix array dimension product integer overflow
mtopolnik Mar 2, 2026
b84b690
Avoid int overflow issue with array ingestion
mtopolnik Mar 2, 2026
c8e0c57
Remove unused QwpVarint class and tests
mtopolnik Mar 3, 2026
7f2ac45
Stop masking real I/O errors as timeouts
mtopolnik Mar 3, 2026
710537a
Add tests for recvOrTimeout error handling
mtopolnik Mar 3, 2026
e1dc5a3
Remove unused classes and their tests
mtopolnik Mar 3, 2026
efa92e3
Delete QwpBitReader and its test
mtopolnik Mar 3, 2026
2589cf4
Delete unused classes and their tests
mtopolnik Mar 3, 2026
ec13a3f
Delete unused methods and their tests
mtopolnik Mar 3, 2026
8e77d28
Delete unused methods and their tests
mtopolnik Mar 3, 2026
8d61c15
Remove unused RSS memory limit mechanism
mtopolnik Mar 3, 2026
80f720c
Delete dead external-buffer mechanism
mtopolnik Mar 3, 2026
3f38d62
Fix native memory leaks on allocation failure
mtopolnik Mar 3, 2026
31bc092
Fix lone surrogate hash mismatch with wire encoding
mtopolnik Mar 3, 2026
dc6833c
Delete unused code
mtopolnik Mar 3, 2026
53e4481
Use enhanced switch
mtopolnik Mar 3, 2026
b2cd9a8
Simplify websocket handshake code
mtopolnik Mar 3, 2026
99b7552
Code style, remove dead code
mtopolnik Mar 3, 2026
5df3ca5
Delete dead code, enhanced switch, auto-reorder
mtopolnik Mar 3, 2026
159ee3d
Enhanced switch
mtopolnik Mar 3, 2026
73e8986
Delete unused code
mtopolnik Mar 3, 2026
eceded1
Code style
mtopolnik Mar 3, 2026
054c532
Cache Maven dependencies in CI pipeline
mtopolnik Mar 3, 2026
04bf6c4
Ensure QuestDB cleanup runs on test failure
mtopolnik Mar 3, 2026
5df8140
Fix Maven cache on Windows CI agents
mtopolnik Mar 3, 2026
f401d8e
wip: udp sender
jerrinot Mar 4, 2026
c9a0d04
Add byte-based auto-flush to QWP sender
mtopolnik Mar 4, 2026
3457d8e
iteration #3
jerrinot Mar 4, 2026
1002c26
Magic bytes: ILP4 -> QWP1
mtopolnik Mar 4, 2026
6f566ad
iteration #4
jerrinot Mar 4, 2026
6e4d100
iteration #5
jerrinot Mar 4, 2026
c49d75d
Magic bytes change fallout
mtopolnik Mar 5, 2026
8094d57
Improve error message
mtopolnik Mar 5, 2026
c14b33f
Merge remote-tracking branch 'origin/jh_experiment_new_ilp' into jh_e…
jerrinot Mar 5, 2026
b923ec2
update magic
jerrinot Mar 5, 2026
fc2ace3
Add Sender.builder(WEBSOCKET) E2E test
mtopolnik Mar 5, 2026
6739bc0
Validate table and column names in QwpWebSocketSender
mtopolnik Mar 5, 2026
4fa6e68
Wrap NumericException on decimal rescale
mtopolnik Mar 5, 2026
e9111bd
Handle edge cases for canceling and replaying rows.
jerrinot Mar 5, 2026
872f63e
Merge remote-tracking branch 'origin/jh_experiment_new_ilp' into jh_e…
jerrinot Mar 5, 2026
0c20920
reduce allocations
jerrinot Mar 5, 2026
3de3e23
delta datagram size estimation
jerrinot Mar 6, 2026
ff16385
Add WebSocket auth header support for QWP ingestion
mtopolnik Mar 6, 2026
34b4a11
optimize column lookup performance
jerrinot Mar 6, 2026
a32a771
optimize datagram size tracking and null padding
jerrinot Mar 6, 2026
0cee86f
add tests for sender behavior with omitted columns and packet limits
jerrinot Mar 6, 2026
8bc30e2
Fix asserted error message
mtopolnik Mar 6, 2026
8d32ed0
Reject token in WebSocket config strings
mtopolnik Mar 6, 2026
80e65fb
Fix error message asssertion
mtopolnik Mar 6, 2026
716f0a3
allow mid-row schema changes
jerrinot Mar 6, 2026
cb37f52
Merge remote-tracking branch 'origin/jh_experiment_new_ilp' into jh_e…
jerrinot Mar 6, 2026
05c2595
wip: less copying
jerrinot Mar 6, 2026
fa6223d
wip: less copying, part 2
jerrinot Mar 6, 2026
5fd10f6
cleanup
jerrinot Mar 6, 2026
ea83e18
ILP v4 -> QWP v1
mtopolnik Mar 6, 2026
2133063
better row rollback and optimize array staging
jerrinot Mar 6, 2026
9f888b9
reduce allocations when sending symbols
jerrinot Mar 6, 2026
cdd00e6
Merge remote-tracking branch 'origin/jh_experiment_new_ilp' into jh_e…
jerrinot Mar 6, 2026
872e0c7
optimizations
jerrinot Mar 7, 2026
6fb1a25
remove estimator bandaid
jerrinot Mar 9, 2026
877ac06
Rebuild CXX libraries
Mar 9, 2026
174cbac
test client support udp
jerrinot Mar 9, 2026
5084b8c
optimization
jerrinot Mar 9, 2026
45e662d
Auto-reorganize code
mtopolnik Mar 10, 2026
7306114
Remove LONG array support in QwpTableBuffer + auto-reorganize
mtopolnik Mar 10, 2026
d67c81e
Make all column types >= 32 bits use null bitmap
mtopolnik Mar 10, 2026
8e55257
Lint
mtopolnik Mar 10, 2026
77e1259
Javadoc
mtopolnik Mar 10, 2026
78c9f22
Auto-reorganize code
mtopolnik Mar 10, 2026
5e0fb30
Remove unused method hasInProgressRow
mtopolnik Mar 10, 2026
bc2334d
Simple refactoring
mtopolnik Mar 10, 2026
749a53f
Remove QwpTableBuffer designation as public API
mtopolnik Mar 10, 2026
44e31b7
Let QwpTableBuffer handle addSymbol fully
mtopolnik Mar 10, 2026
dd6b212
Move QwpSenderTest to server-side, make it self-contained
mtopolnik Mar 11, 2026
2821d91
Remove unmasking logic (only needed on server)
mtopolnik Mar 12, 2026
415fa9c
Move tests using mock websocket server to client module
mtopolnik Mar 12, 2026
755ff35
Move tests that need running server to core module
mtopolnik Mar 12, 2026
58df95f
Remove external server setup from CI and tests
mtopolnik Mar 12, 2026
ca47633
Add test verifying global auto-flush accumulation across tables
mtopolnik Mar 13, 2026
999464c
Allow timestamp-only rows in QWP UDP sender
mtopolnik Mar 13, 2026
6fd5b61
Drain all buffered ACKs per I/O loop iteration
mtopolnik Mar 13, 2026
c33eea9
fast defaults for qwp client
jerrinot Mar 13, 2026
a1850ca
Downgrade java-questdb-client to Java 11
mtopolnik Mar 13, 2026
6452bd3
Fix awaitEmpty() race in InFlightWindow
mtopolnik Mar 13, 2026
8fb0553
Refactor WebSocketSender API to unify connection methods
jerrinot Mar 13, 2026
491a029
Merge remote-tracking branch 'origin/jh_experiment_new_ilp' into jh_e…
jerrinot Mar 13, 2026
a38487c
remove blocking waits from websocket ACK drain
jerrinot Mar 13, 2026
862798c
Fix "an QWP" grammar in Javadoc comment
mtopolnik Mar 16, 2026
893841b
Replace /** with /*+ in license header opening lines
mtopolnik Mar 17, 2026
6fb4de0
Replace CharSequence.isEmpty() with length check
mtopolnik Mar 17, 2026
466e275
Merge branch 'main' into jh_experiment_new_ilp
mtopolnik Mar 17, 2026
e4d86dc
Fix resource leak in WebSocketClient subclass constructors
mtopolnik Mar 17, 2026
8d8713e
Track pending bytes incrementally in sendRow()
mtopolnik Mar 17, 2026
65270d6
Fix integer overflow in ensureCapacity() doubling
mtopolnik Mar 17, 2026
decf797
Fix buffer0 leak in QwpWebSocketSender constructor
mtopolnik Mar 17, 2026
50d3d0a
Fix native memory leak in QwpUdpSender constructor
mtopolnik Mar 17, 2026
d76aa02
Remove redundant toString() in string/symbol columns
mtopolnik Mar 17, 2026
61980ee
Fix WebSocket mask key byte order
mtopolnik Mar 17, 2026
34b2439
Fix resource leaks in QwpWebSocketSender
mtopolnik Mar 18, 2026
60d578d
Rename SEGMENT_SIZE and reorder methods
mtopolnik Mar 18, 2026
5d041c5
Avoid per-byte ensureCapacity in UTF-8 encoding
mtopolnik Mar 18, 2026
1d33006
Case-insensitive column names
mtopolnik Mar 19, 2026
7fbfff5
Pre-pad new columns for existing rows
mtopolnik Mar 19, 2026
a55d3b9
Fix duplicate column behavior
mtopolnik Mar 19, 2026
7c7c4a3
Fix non-ASCII column name case insensitivity
mtopolnik Mar 19, 2026
5b1070b
Fix caught exception type in rollback test
mtopolnik Mar 19, 2026
d46895e
do not account for pending bytes when auto-flushing bytes is disabled
jerrinot Mar 20, 2026
53609ce
Avoid String allocation in column name validation
mtopolnik Mar 20, 2026
0053579
Recreate table in benchmark
mtopolnik Mar 20, 2026
96021be
Validate only new column names
mtopolnik Mar 20, 2026
42ba7cf
the fast path can be faster
jerrinot Mar 20, 2026
45749d8
--no-drop
jerrinot Mar 20, 2026
12ca3bb
@NotNull annotation on isValidColumnName
mtopolnik Mar 20, 2026
c8e2fc2
Move column name validation into QwpTableBuffer
mtopolnik Mar 20, 2026
52a5c16
hello darkness (aka java logging APIs) my old friend...
jerrinot Mar 20, 2026
9b49eed
reduce allocation pressure
jerrinot Mar 20, 2026
8afd5f6
dead code removed
jerrinot Mar 20, 2026
aa55767
Renaem nullable -> use/hasNullBitmap
mtopolnik Mar 20, 2026
970d717
implement support for storing global-symbol-IDs-only in QwpTableBuffer
jerrinot Mar 20, 2026
46765ef
Merge remote-tracking branch 'origin/jh_experiment_new_ilp' into jh_e…
jerrinot Mar 20, 2026
3fa1a07
revert accidentally commited experiment
jerrinot Mar 20, 2026
6d029fe
Encode null presence inline in column data
mtopolnik Mar 21, 2026
504721d
Remove dead TYPE_MASK and TYPE_NULLABLE_FLAG
mtopolnik Mar 21, 2026
8c72f27
Merge remote-tracking branch 'origin/jh_experiment_new_ilp' into jh_e…
mtopolnik Mar 22, 2026
50e89f8
Merge fallout
mtopolnik Mar 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions TODO.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# TODO

## QWP UDP Sender

### Documented limitation: mixing `atNow()` with `atMicros()` / `atNanos()`

Current behavior in `QwpUdpSender` is to reject this pattern once committed rows already exist for the table:

1. Write row(s) with `atNow()` (server-assigned designated timestamp).
2. Start a later row and finish it with `atMicros()` or `atNanos()`.

The sender throws:

- `schema change in middle of row is not supported`

Why this happens:

- `atNow()` does not write the designated timestamp column.
- `atMicros()` / `atNanos()` writes designated timestamp into the empty-name column (`""`).
- With committed rows already present, introducing this column is treated as schema evolution.
- The UDP incremental-estimate policy forbids schema changes in the middle of an in-progress row.

Current workaround:

- Use one designated timestamp strategy consistently per table stream:
- always `atNow()`, or
- always `atMicros()` / `atNanos()`.

Future fix options:

- Add explicit support for switching designated timestamp strategy mid-stream by pre-materializing designated timestamp schema state, or
- Harmonize designated timestamp handling so `atNow()` and `atMicros()` / `atNanos()` do not diverge schema shape.
18 changes: 0 additions & 18 deletions ci/confs/authenticated/authDb.txt

This file was deleted.

Loading