Hints for Computer System Design
blog.regehr.org
blog.regehr.org
"To use the technique, record every update to an object as a log entry, consisting of the name of the update procedure and its arguments. The procedure must be functional: when applied to the same arguments it must always have the same effect.
In other words, there is no state outside the arguments that affects the operation of the procedure. This means that the (procedure call specified by the) log entry can be re-executed later, and if the object being updated is in the same state as when the update was first done, it will end up in the same state as after the update was first done.
By induction, this means that a sequence of logentries can be re-executed, starting with the same objects, and produce the same objects that were produced in the original execution."