More efficently(?) check quorum system validity.

This commit is contained in:
Michael Whittaker 2021-01-22 14:51:44 -08:00
parent 7f1a1a3934
commit 68a939b3e6

View file

@ -18,10 +18,12 @@ class QuorumSystem(Generic[T]):
def __init__(self, reads: Optional[Expr[T]] = None, def __init__(self, reads: Optional[Expr[T]] = None,
writes: Optional[Expr[T]] = None) -> None: writes: Optional[Expr[T]] = None) -> None:
if reads is not None and writes is not None: if reads is not None and writes is not None:
# TODO(mwhittaker): Think of ways to make this more efficient. optimal_writes = reads.dual()
assert all(len(r & w) > 0 if not all(optimal_writes.is_quorum(write_quorum)
for (r, w) in itertools.product(reads.quorums(), for write_quorum in writes.quorums()):
writes.quorums())) raise ValueError(
'Not all read quorums intersect all write quorums')
self.reads = reads self.reads = reads
self.writes = writes self.writes = writes
elif reads is not None and writes is None: elif reads is not None and writes is None: