  Context: Concurrent objects with asynchronous messaging are an increasingly
popular way to structure highly available, high performance, large-scale
software systems. To ensure data-consistency and support synchronization
between objects such systems often use distributed transactions with Two-Phase
Locking (2PL) for concurrency control and Two-Phase commit (2PC) as atomic
commitment protocol. Inquiry In highly available, high-throughput systems, such
as large banking infrastructure, however, 2PL becomes a bottleneck when objects
are highly contended, when an object is queuing a lot of messages because of
locking.
  Approach: In this paper we introduce Path-Sensitive Atomic Commit (PSAC) to
address this situation. We start from message handlers (or methods), which are
decorated with pre- and post-conditions, describing their guards and effect.
  Knowledge: This allows the PSAC lock mechanism to check whether the effect of
two incoming messages at the same time are independent, and to avoid locking if
this is the case. As a result, more messages are directly accepted or rejected,
and higher overall throughput is obtained.
  Grounding: We have implemented PSAC for a state machine-based DSL called
Rebel, on top of a runtime based on the Akka actor framework. Our performance
evaluation shows that PSAC exhibits the same scalability and latency
characteristics as standard 2PL/2PC, and obtains up to 1.8 times median higher
throughput in congested scenarios.
  Importance: We believe PSAC is a step towards enabling organizations to build
scalable distributed applications, even if their consistency requirements are
not embarrassingly parallel.
