Abstract

Assume a distributed version implementation of a protocol. Sometimes it is difficult and even impossible to come up with the proper safety properties for that. Instead, we can crosscheck the correctness of distributed implementation against a simpler central implementation of the same protocol. In this way, we do not need another magic language for property specification to understand the properties we need for the system. Moreover, we can implement the central version in the same language and we do not need to learn a new one.

I could not find anything in literature like that for distributed systems. For central systems we have:

Expectations

The inevitable fact is that Exhaustive search is impossible. Hence any random-like heuristic is totally welcome. Because, the possible approach would be random-wise, the evaluation should clarify the usefulness of the system through finding previously reported bugs or in best case finding new ones.

Problem Statement

Assume two implementations of a system; one distributed (D) and one central (C). There are two set of operations into these systems:

No matter what is the representation of the internal data structure, we call two systems equivalent if the following property holds:

Foreach (opList ops in [I,Q]*Q)
{
  dValue = D.ops();
  cValue = S.ops();
  ASSERT(dValue == cValue);
}

For example, chord correspond to a closed link-list in central systems. Then we have

D= Chord
C= closed linked-list
I= insert (join overlay), remove (leave overlay)
Q= getPredecessor, getSuccessor

Possible solutions

Questions

When do a query?

What about node resets

How about abstraction functions

impl vs spec in distributed systems