mirror of
https://github.com/neondatabase/neon.git
synced 2026-01-14 08:52:56 +00:00
- Use postgres_backend_async throughout safekeeper. - Use Framed in postgres_backend_async, it allows polling interface and takes some logic. - Do read-write from single task in walsender. The latter turned out to be more complicated than I initially expected due to 1) borrow checking and 2) anon Future types. 1) required SendRc<Refcell<...>> construct just to satisfy the checker; 2) is currently done via boxing futures, which is a pointless heap allocation in active path. I'll probably try to workaround 2) with transmute, but it made me wonder whether socket split, like it was done previously, would be better. It is also messy though: - we need to manage two tasks, properly join them and should on exit/error should join pgbackend back to leave it in valid state; pgbackend itself must swell a bit to provide splitted interface. - issues with tls - tokio::io::split has pointless mutex inside fixing walreceiver and proxy is not done yet