Turning Adversaries into Friends: Simplified, Made Constructive, and Extended

A liveness contract is an agreement between the specifier of a system and a task to solve, and the programmer who makes her living by delivering protocols. In a shared-memory system, a liveness contract specifies infinite suffixes of executions in which the programmer is required to solve a distributed task. If the behavior of the system does not comply with the specification, no output is required. A convenient way to describe a large class of liveness contracts was recently proposed by Delporte et al. For a system Π of n processes, an adversary is a set A of subsets of Π. The system is required to make progress only in executions in which the set of correct processes is in A. Given an adversary A and a task T, should the programmer sign the contract? Can she deliver? In this paper, we give a very simple resolution of this question for colorless tasks that contrasts with more involved arguments of the original paper of Delpote et al. More importantly, our resolution is constructive -- it tells the programmer how to use A to solve T, when it is solvable. Our framework naturally generalizes to systems enriched with more powerful objects than read-write registers. We determine necessary and sufficient conditions for an adversary A to solve consensus using j-process consensus objects and read-write registers, which resolves an open question raised recently by Taubenfeld.

[1]  Marcos K. Aguilera,et al.  Distributed Computing and Networking , 2011, Lecture Notes in Computer Science.

[2]  Petr Kuznetsov,et al.  L-Resilient Adversaries and Hitting Sets , 2010, ArXiv.

[3]  Rachid Guerraoui,et al.  Generalizing State Machine Replication , 2010 .

[4]  Gadi Taubenfeld,et al.  The Computational Structure of Progress Conditions , 2010, DISC.

[5]  Maurice Herlihy,et al.  Subconsensus Tasks: Renaming Is Weaker Than Set Agreement , 2006, DISC.

[6]  Mark Moir,et al.  Obstruction-Free Step Complexity: Lock-Free DCAS as an Example , 2005, DISC.

[7]  Maurice Herlihy,et al.  The decidability of distributed decision tasks (extended abstract) , 1997, STOC '97.

[8]  Mark Moir,et al.  Obstruction-Free Algorithms Can Be Practically Wait-Free , 2005, DISC.

[9]  Eli Gafni,et al.  Structured derivations of consensus algorithms for failure detectors , 1998, PODC '98.

[10]  Sam Toueg,et al.  The weakest failure detector for solving consensus , 1996, JACM.

[11]  Eli Gafni,et al.  Round-by-round fault detectors (extended abstract): unifying synchrony and asynchrony , 1998, PODC '98.

[12]  Petr Kuznetsov,et al.  On set consensus numbers , 2011, Distributed Computing.

[13]  Nancy A. Lynch,et al.  Impossibility of distributed consensus with one faulty process , 1985, JACM.

[14]  Sam Toueg,et al.  Unreliable failure detectors for reliable distributed systems , 1996, JACM.

[15]  Michel Raynal,et al.  Simultaneous Consensus Tasks: A Tighter Characterization of Set-Consensus , 2006, ICDCN.

[16]  Rachid Guerraoui,et al.  The disagreement power of an adversary , 2011, Distributed Computing.

[17]  Eli Gafni,et al.  Generalized FLP impossibility result for t-resilient asynchronous computations , 1993, STOC.

[18]  Michel Raynal,et al.  On asymmetric progress conditions , 2010, PODC '10.

[19]  Richard M. Karp,et al.  Reducibility Among Combinatorial Problems , 1972, 50 Years of Integer Programming.

[20]  Maurice Herlihy,et al.  The topology of shared-memory adversaries , 2010, PODC '10.

[21]  Eli Gafni,et al.  Round-by-Round Fault Detectors: Unifying Synchrony and Asynchrony (Extended Abstract). , 1998, PODC 1998.

[22]  Piotr Zielinski Anti-Ω: the weakest failure detector for set agreement , 2008, PODC '08.

[23]  Nancy A. Lynch,et al.  The BG distributed simulation algorithm , 2001, Distributed Computing.

[24]  Eli Gafni,et al.  Three-Processor Tasks Are Undecidable , 1999, SIAM J. Comput..