A technique is described for guaranteeing recovery in a computer system
comprising of recovery contracts with a plurality of obligations for a
message exchange between a first component and a second component. Three
forms of contract are described, governing interactions between three
types of components. Each contract is bilateral, i.e. between a first
component and a second component. The first and second components have
mutual agreement on when the contract will be released to facilitate log
truncation, and independent and/or autonomous recovery.