{"id":20564470,"url":"https://github.com/tarantool/jepsen.tarantool","last_synced_at":"2025-04-14T15:12:52.953Z","repository":{"id":39879267,"uuid":"283785708","full_name":"tarantool/jepsen.tarantool","owner":"tarantool","description":"Jepsen tests for Tarantool","archived":false,"fork":false,"pushed_at":"2023-06-15T07:34:28.000Z","size":79,"stargazers_count":6,"open_issues_count":35,"forks_count":0,"subscribers_count":23,"default_branch":"master","last_synced_at":"2025-04-14T15:12:43.754Z","etag":null,"topics":["consistency","fault-injection","jepsen","jepsen-tests","linearizability","serializable","tarantool"],"latest_commit_sha":null,"homepage":"https://www.tarantool.io/en/","language":"Clojure","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tarantool.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-07-30T13:37:57.000Z","updated_at":"2025-04-06T09:53:14.000Z","dependencies_parsed_at":"2022-08-27T12:51:47.988Z","dependency_job_id":null,"html_url":"https://github.com/tarantool/jepsen.tarantool","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tarantool%2Fjepsen.tarantool","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tarantool%2Fjepsen.tarantool/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tarantool%2Fjepsen.tarantool/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tarantool%2Fjepsen.tarantool/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tarantool","download_url":"https://codeload.github.com/tarantool/jepsen.tarantool/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248904637,"owners_count":21180835,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["consistency","fault-injection","jepsen","jepsen-tests","linearizability","serializable","tarantool"],"created_at":"2024-11-16T04:26:50.959Z","updated_at":"2025-04-14T15:12:52.930Z","avatar_url":"https://github.com/tarantool.png","language":"Clojure","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Tarantool Jepsen Test\n\n[![Building](https://github.com/tarantool/jepsen.tarantool/actions/workflows/build.yaml/badge.svg)](https://github.com/tarantool/jepsen.tarantool/actions/workflows/build.yaml)\n\nThis is a test suite, written using the [Jepsen distributed systems testing\nlibrary](https://jepsen.io), for\n[Tarantool](https://github.com/tarantool/tarantool). It provides a number of\nworkloads, which uses [Elle](https://github.com/jepsen-io/elle) and\n[Knossos](https://github.com/jepsen-io/knossos) to find\ntransactional anomalies up to strict serializability.\n\nWe include a wide variety of faults, including network partitions, process\ncrashes, pauses, clock skew, and membership changes.\n\n## How to use\n\n### Prerequisites\n\nYou'll need a Jepsen cluster running Ubuntu, which you can either [build\nyourself](https://github.com/jepsen-io/jepsen#setting-up-a-jepsen-environment)\nor run in\n[AWS](https://aws.amazon.com/marketplace/pp/B01LZ7Y7U0?qid=1486758124485\u0026sr=0-1\u0026ref_=srh_res_product_title)\nvia Cloudformation.\n\nThe control node needs:\n\n- A JVM with version 1.8 or higher.\n- JNA, so the JVM can talk to your SSH.\n- (optional) Gnuplot, that helps Jepsen renders performance plots.\n- (optional) Graphviz, that helps Jepsen renders transactional anomalies.\n\nThese dependencies you can get (on Ubuntu) via:\n\n```shell\nsudo apt install -y openjdk8-jdk graphviz gnuplot\n```\n\nJepsen will install dependencies (e.g. `git`, build tools, various support\nlibraries) as well as Tarantool itself automatically on all DB nodes\nparticipated in test.\n\n### Usage\n\nTests distributed as a JAR file suitable for running with JVM. Release\narchives with JAR file, shell script for running JAR file, CHANGELOG.md and\nREADME.md are\n[published](https://github.com/tarantool/jepsen.tarantool/releases) for every\nrelease. Before start one can download archive for latest release and unpack\nit.\n\nTo see all options and their default values, try\n\n```sh\n./run-jepsen test --help\n```\n\nTo run test `register` with Tarantool 2.8 10 times during 600 seconds, try:\n\n```sh\n./run-jepsen test --username root --nodes-file nodes --workload register\n                  --version 2.8 --time-limit 600 --test-count 10\n```\n\nTo run test `set` with Tarantool built using source code in master branch\nduring 100 seconds with 20 threads, try:\n\n```sh\n./run-jepsen test --nodes-file node --engine vinyl --workload set\n                  --concurrency 20 --time-limit 100\n```\n\nTo focus on a particular set of faults, use `--nemesis`\n\n```sh\n./run-jepsen test --nemesis partition,kill\n```\n\n### Options\n\n- `--concurrency` - how many workers should we run? Must be an integer,\n  optionally followed by n (e.g. 3n) to multiply by the number of nodes.\n- `--engine` - what Tarantool data engine should we use? Available values are\n  `memtx` and `vinyl`. Learn more about DB engines in Tarantool documentation.\n- `--leave-db-running` - leave the database running at the end of the test, so\n  you can inspect it. Useful for debugging.\n- `--logging-json` - use JSON structured output in the Jepsen log.\n- `--mvcc` - enable MVCC engine, learn more about it in Tarantool\n  [documentation](https://www.tarantool.io/en/doc/latest/book/box/atomic/#atomic-transactional-manager).\n- `--nemesis` - a comma-separated list of nemesis faults or groups of faults to\n  enable. Nemeses groups are: `none` with none nemeses, `standard` includes\n  `partition` and `clock`, `all` includes all nemeses listed below. Available\n  nemeses are:\n\t- `clock` generates a nemesis which manipulates clocks.\n\t- `pause` pauses and resumes a DB's processes using `SIGSTOP` and `SIGCONT` signals.\n\t- `kill` kills a DB's processes using `SIGKILL` signal.\n\t- `partition` splits network connectivity for nodes in a cluster and then recover it.\n- `--nemesis-interval` - how long to wait between nemesis faults.\n- `--node` - node(s) to run test on. Flag may be submitted many times, with one\n  node per flag.\n- `--nodes` - comma-separated list of node hostnames.\n- `--nodes-file` - file containing node hostnames, one per line.\n- `--username` - username for login to remote server via SSH.\n- `--password` - password for sudo access on remote server.\n- `--strict-host-key-checking` - whether to check host keys.\n- `--ssh-private-key` - path to an SSH identity file.\n- `--test-count` - how many times should we repeat a test?\n- `--time-limit` - excluding setup and teardown, how long should a test run\n  for, in seconds?\n- `--version` - what Tarantool version should we test? Option accepts two kind\n  of versions: branch version (for example 2.2) to use a latest version of\n  package from this branch or GIT commit hash to use version built on this\n  commit.\n- `--workload` - test workload to run. Available workloads are:\n    - `bank` simulates transfers between bank accounts. Uses SQL to access to\n      bank accounts.\n    - `bank-multitable` simulates transfers between bank accounts when each\n      account is in a separate space (table). Uses SQL to access to bank accounts.\n    - `bank-lua` simulates transfers between bank accounts. Uses Lua functions\n      to access to bank accounts.\n    - `bank-multitable-lua` simulates transfers between bank accounts when each\n      account is in a separate space (table). Uses Lua functions to access to\n      bank accounts.\n    - `counter-inc` increments a counter.\n    - `register` models a register with read, write and CAS (Compare-And-Set)\n      operations.\n    - `set` inserts a series of unique numbers as separate instances, one per\n      transaction, and attempts to read them back through an index.\n\n## How to build\n\nFor building Jepsen tests locally one need to setup [Leiningen build\nsystem](https://github.com/technomancy/leiningen#installation) and\n[Clojure](https://clojure.org/guides/getting_started).\n\nFor building tests, try:\n\n```sh\nlein deps\nlein compile\n```\n\nFor running tests, try:\n\n```sh\nlein run test --nodes-file nodes --workload register --version 2.8 --time-limit 100\n```\n\n## License\n\nCopyright © 2020-2021 VK Company Limited\n\nThis program and the accompanying materials are made available under the\nterms of the Eclipse Public License 2.0 which is available at\nhttps://www.eclipse.org/legal/epl-2.0.\n\nThis Source Code may also be made available under the following Secondary\nLicenses when the conditions for such availability set forth in the Eclipse\nPublic License, v. 2.0 are satisfied: GNU General Public License as published by\nthe Free Software Foundation, either version 2 of the License, or (at your\noption) any later version, with the GNU Classpath Exception which is available\nat https://www.gnu.org/software/classpath/license.html.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftarantool%2Fjepsen.tarantool","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftarantool%2Fjepsen.tarantool","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftarantool%2Fjepsen.tarantool/lists"}