"The .join() That Should Be a Bug"
Summary
Kronotop explains a two-model approach to handling thousands of connections by keeping network I/O non-blocking on a small Netty-based connection layer while offloading blocking I/O to virtual threads. The post highlights how CompletableFuture.supplyAsync().thenAcceptAsync() enables waiting on FoundationDB and disk without tying up real threads, and why the .join() on a virtual thread is intentional, not a bug. It includes code examples and discusses transaction scope, error handling, and how this architecture achieves scalability.