Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more

Adya is a Rust tool described by its author as a way to run database workloads and check the resulting transaction histories in one workflow. It targets teams that want Jepsen Elle-style isolation checking without building their own JVM-centered integration. That is an integration choice, not a claim that Elle cannot be used from non-JVM languages: Jepsen documents a wrapper-based route for those users.

What adya checks—and what it does not

Adya checks what a database did, not what application code or database documentation says it should do. A workload runs transactions and records their inputs and observed results. The checker infers dependencies between transactions, then looks for cycles that violate the requested consistency model. When it reports a violation, it supplies a transaction chain intended to explain the anomaly.

This addresses a gap ordinary unit tests can leave open: concurrent transactions may produce an unexpected state without throwing an error. A test suite can pass while a particular interleaving remains unchecked. History checking makes the observed interleaving the evidence.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

How the history checker works

List-append workload

Adya’s default workload treats each key as a list. Transactions append unique values and read lists; those observations constrain which appends could have occurred before others. The checker builds a transaction dependency graph from the history.

Dependency edges and cycles

  • Write-write (ww): one transaction’s write is ordered relative to another write to the same item.
  • Write-read (wr): a transaction reads a value written by another transaction.
  • Read-write (rw): a transaction reads a value before another transaction writes a conflicting value.

The checker searches for cycles inconsistent with the selected isolation level. For strict-serializability-style models, the article says it also accounts for real-time ordering. A reported cycle is an explanation of why the history cannot satisfy the requested model; it is not a diagnosis of every possible cause in the application.

Why isolation names are not enough

Consider two on-call doctors. Each transaction reads that the other doctor is still on call, then removes itself from the schedule. Both transactions can make a locally reasonable decision, yet the final state leaves nobody on call. This is write skew: a history that snapshot isolation can allow even though it is not serializable.

The author describes PostgreSQL’s REPEATABLE READ as snapshot isolation in this context. That example should not be generalized to every database or version using the same isolation-level label. Isolation behavior depends on the engine, version, and workload, which is why checking observed histories can be more informative than relying on the label alone.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Why a Rust-native workflow can help

Adya is presented as a Rust implementation that combines workload execution and history checking in a CLI. The practical appeal is a single workflow that can fit a Rust-oriented harness or CI job without a JVM-based integration. Its article shows commands such as cargo install adya and adya run, but current package availability, release details, flags, and repository status are not independently established here; treat those commands as examples from the author’s October 2026 article rather than verified current installation instructions.

Elle is not limited to JVM callers. Its official repository describes writing a history to a file or stream and invoking a wrapper program from a non-JVM language. The distinction is therefore workflow friction: adya aims to make running a workload and checking it feel like one Rust-native tool, while Elle’s documented non-JVM path involves an external history and wrapper.

Supported workloads, databases, and trade-offs

Workload coverage

The author reports built-in checkers for list-append and read-write-register workloads. Predicate reads are outside the described scope, as are Elle’s bank, set, and counter checkers. Adya produces textual proofs rather than Graphviz diagrams. If a team’s workload depends on those missing models or on predicate behavior, the article does not establish adya as a substitute for that coverage.

Database connections

The article describes built-in drivers for SQLite, PostgreSQL, and MySQL. For other systems, it describes an exec mode that exchanges JSON lines with a client, including a short Python SQLite example. These are claims in the author’s article; present-day compatibility and exact interfaces should be checked against the project before adoption.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

What Elle contributes

Jepsen’s Elle repository describes list-append and read-write-register checkers, Jepsen history-format input, and a wider anomaly vocabulary. It also cautions that Elle is not complete and recommends manually checking reported anomalies. The broader lesson applies to any checker: an anomaly explanation is evidence to investigate, not an infallible proof about all system behavior.

What the reported comparisons establish

In his October 6, 2026 article, Zayd Mulani reports that adya matched the expected verdicts, anomaly types, and weakest isolation models ruled out across 56 list-append and read-write-register histories shipped with Elle. He also reports an initial comparison on generated histories: Elle completed 34 of 40, and adya agreed with Elle on those 34 completed cases.

These figures are author-reported comparisons, not an independent benchmark or proof of equivalence. The generated-history agreement applies only to the cases Elle completed; it says nothing about the six it did not complete or about workload families outside the stated scope.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

How to read the reported database results

The author says CI tested PostgreSQL 17 and MySQL 8.4 with 4,000 transactions, 10 clients, and 6 hot keys at each isolation level. In that list-append setup, the article reports PostgreSQL READ COMMITTED anomalies when histories were checked for serializability, a G2-item anomaly for PostgreSQL REPEATABLE READ against serializability, and valid histories for PostgreSQL SERIALIZABLE. Its MySQL REPEATABLE READ results include several anomaly classes, including lost updates and partial observation of another transaction’s writes.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Those are outcomes from the author’s versions and workload, not universal guarantees about either database. They should not be used to infer behavior for another engine release, a different workload, or an application’s full transaction patterns. The useful signal is that a checker can expose surprising behavior under a stated test setup; the next step is to examine the exact history and reproduce it in the environment that matters.

A restart experiment is not a general safety guarantee

The article separately reports a PostgreSQL serializable experiment with 6,000 transactions and nine forced restarts: 2,957 commits and 3,043 failures, followed by a clean check of the resulting history. This is one author-reported fault experiment. It does not establish safety for every restart pattern, failure mode, or retry implementation.

What a clean result means for a team

A clean result means no checked anomaly was found in that recorded history under the chosen workload and consistency model. It does not prove the database is correct, prove the application is race-free, or show that untested schedules are safe.

For a more useful signal, teams should vary histories, increase contention, exercise the workload shapes they actually rely on, and inject relevant faults or restarts. Keep the resulting history and any anomaly proof so engineers can inspect the specific transaction relationships. Adya’s value is in making that checking workflow accessible; its narrower workload coverage and the limits of history-based inference still define what the result can support.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Sources

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.