For complex services, logging is an integral part of many middleware aspects, especially, transactions and monitoring. In the event of a failure, the log allows us to deduce the cause of failure (diagnosis), recover by compensating the logged actions (atomicity), etc. However, for heterogeneous services, logging all the actions is often impracticable due to privacy/security constraints. Also, logging is expensive in terms of both time and space. Thus, we are interested in determining a small number of actions that needs to be logged, to know with certainty the actual sequence of executed actions from any given partial log. We propose two heuristics to determine such a small set of transitions, with services modeled as finite state machines. The first one is based on (Positive) discrimination of transitions, using every observation to know (discriminate) that a maximal number of transitions occurred. We characterize it algebraically, giving a very fast algorithm. The second algorithm, the distinguishing algorithm, uses every observation to maximize the number of transitions which are ensured not to have occurred. We show experimentally that the second algorithm gives much more accurate results than the first one, although it is also slower (but still fast enough).
['Debmalya Biswas', 'Thomas Gazagnaire', 'Blaise Genest']
Small Logs for Transactional Services: Distinction is Much More Accurate than (Positive) Discrimination