These are chat archives for atomix/atomix
joinis being done inside the bread that also completes the
CompletableFuture. There are two threads in the
CopycatClient, the I/O and event threads. The I/O thread is used for requests and responses, and the event thread is used for events. The event thread can be blocked e.g. if you receive an event and then make a blocking request. In that case Copycat will detect that a future is blocking the thread and complete it on the I/O thread instead. But the same is not true for the I/O thread. If some callback is called on the I/O thread you can't block within that callback. There are just current limitations to where you can block just by the nature of threads. We could start threads just to complete futures, but we'd lose determinism and potentially have to create more threads to complete more blocking futures. There's also some potential for deadlock depending on what the state machine is doing.