Jean-Sébastien Pédron
Jean-Sébastien Pédron
### Why Since the introduction of the first required feature flags, it became more painful for users to upgrade if they did not pay attention to the feature flags states....
## Why The "client" side of `khepri_machine` implemented in `process_sync_command/3` have a retry mechanism if `ra:process_command/3` returns an error such as `noproc`, `nodedown` or `shutdown`. However, this retry mechanism can't...
Passing an anonymous function reference for execution on a remote node may break if the remote node has another version of Erlang or the module hosting the anonymous function. It...
## Why Using `fun()` is fragile if it has to be executed on a remote node. Indeed, the remote node may have another version of the module hosting the function...
### Why Before this change, the anonymous function passed to `khepri_machine:fold/5` was executed by the Ra server process. This had two downsides: * it blocked the Ra server to serve...
### Why There are situations where we need to perform a large number of puts, for instance: * `khepri_mnesia_migration` when it copies tables from Mnesia to Khepri. * RabbitMQ when...
### Why In `khepri_mnesia_migration`, we use the ability to switch Mnesia tables to read-only to prevent further updates at the end of a copy from Mnesia to Khepri. It would...
Expensive queries running in the context of the state machine process (the Ra server) will stall following reads and writes. We should: 1. document this, so users know about this...
When we import definitions in RabbitMQ, we perform many `#put{}` in a row. Currently, Khepri's state machine asks Ra to take a snapshot every 4096 commands. With a large definitions...
## Why ### Node registration After the rework of the peer discovery subsystem in RabbitMQ 3.13.0 to fix cases where clusters would be incorrectly initialized, there were regressions in the...