Make monitoring RPC methods resistant to single monitorable transaction errors
Summary
In their current state, the monitoring RPC methods either return the values from all the registers they are supposed to read, or from none of the registers.
Indeed, since the tempated RPC migration, utils::readReg
can now throw an exception which is not caught into the monitoring RPC methods. As a consequence, the exception is forwarded to the client code, which catches the exception, but does not retrieve the actual monitorable values.
Different options can be envisioned, among them:
- Each register access is protected in a
try-catch
block. - An alternate version of
utils::readReg
exist to make a read attempt.
In any case, a way to return the failed reads to the caller must designed. Return 0xdeaddead
is not a long term solution since that value as valid as any other. A possibility would be not to filled the returned map with a key corresponding to the failed transaction. The client code will have to be adapted to be able to cope with such cases.
What is the expected correct behavior?
A failing register read (or write) should not fail the whole monitoring "block".