Modern applications, such as social networking systems and e-commerce platforms are centered around using large-scale databases for storing and retrieving data. Accesses to the database are typically enclosed in transactions that allow computations on shared data to be isolated from other concurrent computations and resilient to failures. Modern databases trade isolation for performance. The weaker the isolation level is, the more behaviors a database is allowed to exhibit and it is up to the developer to ensure that their application can tolerate those behaviors. In this work, we propose stateless model checking algorithms for studying correctness of such applications that rely on dynamic partial order reduction. These algorithms work for a number of widely-used weak isolation levels, including Read Committed, Causal Consistency, Snapshot Isolation, and Serializability. We show that they are complete, sound and optimal, and run with polynomial memory consumption in all cases. We report on an implementation of these algorithms in the context of Java Pathfinder applied to a number of challenging applications drawn from the literature of distributed systems and databases.
翻译:现代应用程序,如社交网络系统和电子商务平台,都围绕着使用大规模数据库来存储和检索数据。对数据库的访问通常包含在事务中,使得共享数据上的计算与其他并发计算隔离并具有容错能力。现代数据库为性能而交换了隔离。隔离级别越低,数据库允许的行为越多,应用程序必须确保其能够容忍这些行为。在这项工作中,我们提出了一种无状态模型检查算法,用于研究依赖于动态部分顺序缩减的这种应用程序的正确性。这些算法适用于许多广泛使用的弱隔离级别,包括已提交读取、因果一致性、快照隔离和串行化。我们证明它们是完备的、正确的和最优的,并在所有情况下具有多项式内存消耗。我们在Java Pathfinder的上下文中实现了这些算法,并报告了一些来自分布式系统和数据库文献的具有挑战性的应用程序的实现。