Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
M5
-
None
Description
Multi-master support in the C++ client has introduced a fair amount of RPC-related tech debt. There's a lot of duplication in the handling of timeouts, retries, and error conditions. The various callbacks are also tricky to follow and error prone. Now that the code has settled and we understand what's painful about it, we're in a better position to fix it.
Here's a high-level design idea: there should only be one RPC class that's responsible for RPC delivery end-to-end, including retries, leader master discovery, etc. Within that class there should be a single callback that's reused for every asynchronous function, and there should be a separate state machine that tracks the ongoing status of the RPC. Per-RPC specialization should be as minimal as possible, via templates on the PBs, callbacks, or, worst case, subclassing.
Attachments
Issue Links
- relates to
-
KUDU-687 ksck should work against multi-master
- Resolved