% -*- TeX-master: "report.tex"; TeX-PDF-mode: t -*-

Systems that use distributed transactions, such as distributed
databases and transactional file systems, often sacrifice full
serializability for performance. Unfortunately, this optimization
makes it extremely difficult to reason about the correctness of the
system. In this paper, we argued that similar performance benefits
can be attained by weakening \textit{causality} in lieu of abandoning
serializability, thus maintaining the correctness of the system.

Our system provides a global serial ordering of transactions, but
weakens causality by allowing read-only transactions to run on stale
data. The stale data is guaranteed to be no older than some
user-defined $\epsilon$ before the beginning of the
transaction. Local causality is maintained by ensuring read-only
transactions observe all previous, locally committed read/write
transactions. Finally, our system ensures that read-only transactions
never abort, conflict, or block, yielding vastly improved performance for
workloads that are heavily read-only.

We implemented our system using an OCC-like protocol with active
aborts for read/write transactions, and our optimized protocol for
read-only transactions. We compared our system's performance to
conventional OCC,
which provides both global serializability and global causality. Our
experiments using the Auspex traces showed that our system does indeed
significantly out-perform conventional OCC
without having to sacrifice global serializability.
