Jetpack adds a 1-RTT fast path to existing consensus protocols
The OSDI '26 paper commits writes in one round trip, finds a data-loss bug in CURP's Raft extension, and pays for portability by sending every command twice.
Why it matters · If you run Raft or Paxos across regions, Jetpack shows how to cut write latency without replacing your consensus engine. It also shows where that approach costs you: duplicate work, reads that still take 2 RTT, and risk during view changes.
Classic leader-based protocols such as Raft, Paxos and Zab need two round trips to commit a command: one from the client to the leader, and one from the leader to its followers. Fast-path protocols like Fast Paxos, EPaxos and SwiftPaxos get this down to one round trip, but the fast path is built into the protocol's design. Production teams can't easily drop a tested consensus engine for one of these. Jetpack (OSDI '26), reviewed by Murat Demirbas and Aleksey Charapko, is a shim layer that adds a 1-RTT fast path to an existing protocol with minimal changes.
How it works
The client sends each command to two paths at once: the fast path and the original consensus path. The fast path checks for key conflicts. If there are none and a supermajority (about 3/4 of nodes) promises to accept the command, it commits in one round trip. To keep everyone in agreement, proposers on the original path promise not to order conflicting commands ahead of fast-committed ones.
Portability has a cost. The original engine doesn't know the fast path exists, so it runs its full replication cycle anyway. There are two logs, every command crosses the network twice, and replicas process each command twice.
Commitment and execution also come apart. A fast commit only confirms durability. The state machine still runs in the order of the slow-path log. That's fine for fire-and-forget PUTs. But if a client issues PUT(key) and then GET(key), the shim sees the unexecuted PUT in its conflict pool and sends the GET down the 2-RTT path. Results stay linearizable, but the read pays full latency. Demirbas ties this to (SOSP '21): a write can be acknowledged before it executes because it returns no state to the client, but a read can't.





