Within a stub, I would execute database I/O using JDBI/JDBC/HikariCP which I believe results in blocking I/O.
From what I understand, the ServerExecutor instance that is passed to NettyServerBuilder is where the stub itself is executed. If I do blocking I/O within that stub I assume other stubs running at that same time are blocked there once the number of threads serving stubs has been exhausted. So the more I research this, the more I am wondering if I should have a separate thread pool for I/IO, which in this case, would mean I would execute the blocking calls in a new executor service and wrap it in a ListeningExecutorService decorator, giving me LFs.
Sorry for the stream of consciousness, trying make sense of what is acceptable to do in the NettyServerBuilder executor (not the ELGs, specifically) vs the need for new executor pools for I/O. I am 95% sure that JDBC I/O is blocking by default, however,
https://impossibl.github.io/pgjdbc-ng/ uses Netty NIO under the hood so maybe it isn't? All of this isn't super well documented so I am spelunking around to figure this stuff out.