Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jepsen-io/mongodb
MongoDB Jepsen tests
https://github.com/jepsen-io/mongodb
Last synced: about 1 month ago
JSON representation
MongoDB Jepsen tests
- Host: GitHub
- URL: https://github.com/jepsen-io/mongodb
- Owner: jepsen-io
- License: epl-2.0
- Created: 2016-11-10T17:21:31.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2023-07-24T15:52:06.000Z (over 1 year ago)
- Last Synced: 2024-10-13T14:44:37.781Z (2 months ago)
- Language: Clojure
- Size: 220 KB
- Stars: 24
- Watchers: 8
- Forks: 19
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# jepsen.mongodb
Tests for MongoDB, running on Debian Buster. You want 9 nodes for multi-shard
tests: 3 for the config replica set, and 3 for each of 2 shards.## Usage
```
lein run test-all -w list-append --nodes-file ~/nodes -r 1000 --concurrency 3n --time-limit 120 --max-writes-per-key 128 --read-concern majority --write-concern majority --txn-read-concern snapshot --txn-write-concern majority --nemesis-interval 1 --nemesis partition --test-count 30
```## Workloads
`list-append` performs a mix of non-transactional and transactional appends and reads to documents by primary key.
`list-append-multi-node` tries to do the same, but splitting requests across multiple nodes. This does not work yet, and may never.## Nemeses
`partition`, `kill`, and `pause` create/resolve network partitions,
kill/restart processes with `kill -9`, and pause processes with
`SIGSTOP/SIGCONT`. `clock` adjusts the clock by anywhere from a few millis to
hundreds of seconds, and sometimes strobes the clock rapidly back and forth.
`member` adds and removes nodes dynamically.## Options
See `lein run test --help` for all options.
`--hidden NUM` allows you to designate the first `NUM` nodes in each replica
set as hidden replicas.`--[no-]journal` allows you to force write concern's `journal` flag on or off; otherwise it's left at the client default.
`--lazyfs` mounts Mongo's data directory on the lazyfs filesystem, which means
that process kills not only kill processes, but *also* lose un-fsynced writes.
Helpful for simulating power failures.`--local-proxy PATH/TO/LOCAL/BIN` runs a custom binary on the local control
node, and routes client requests to it rather than remote nodes directly.
`--proxy` does the same, but uploads and runs the proxy on each DB node. This
feature was developed for a Jepsen client whose proxy is not public, but it
ought to work with any proxy which takes the same arguments. See
`jepsen.mongodb.db.local-proxy/start!` for details.`--max-txn-length` and `max-writes-per-key` govern the maximum size of
transactions (e.g. for the list-append workload) and the number of writes to
any single key before choosing a new key.`--nemesis FAULTS` takes a comma-separated list of faults to inject, and
`--nemesis-interval SECONDS` controls roughly how long between nemesis
operations, for each class of fault.These tests automatically set write concern even on read-only
transactions--consistent with MongoDB's documentation. However, doing this is
not intuitive and many guides to Mongo transactions omit it. Use
`--no-read-only-write-concern` to do the obvious, wrong thing and *not* provide
a write concern for read-only transactions. This causes snapshot isolation
violations.`--rate HZ` controls the upper bound on how many operations per second Jepsen
tries to perform.`--read-concern CONCERN` and `--txn-read-concern CONCERN` set the read concern
for single operations and Mongo transactions, respectively. `--write-concern`
and `--txn-write-concern` do the same for write concerns. If omitted, uses
client defaults, which are totally unsafe.`--read-preference PREF` controls whether the client tries to read from
primaries, secondaries, etc.`--[no-]retry-writes` allows you to explicitly choose whether or not to
enable retryable writes at the client level. Note that Mongo ignores this
setting for some transaction features.`--sharded`, if set, runs multiple replica sets, each with 3 replicas. The
first three nodes form one replica set, used for config. The second 3 nodes
form the first data shard, the third 3 nodes form the second data shard, and so
on--you therefore want at least 9 nodes to run a sharded test.This test only performs Mongo transactions if the logical Jepsen transaction
has multiple operations--for instance, a read and a write or three writes.
Single reads and single writes are executed directly, without a Mongo
transaction. Use `--singleton-txns` to force a Mongo transaction for *every*
Jepsen transaction.`-v VERSION` controls which MongoDB version we install and test.
`-w WORKLOAD` tells Jepsen which workload to run: e.g. `list-append`.
## License
Copyright © 2020 Jepsen, LLC
This program and the accompanying materials are made available under the
terms of the Eclipse Public License 2.0 which is available at
http://www.eclipse.org/legal/epl-2.0.This Source Code may also be made available under the following Secondary
Licenses when the conditions for such availability set forth in the Eclipse
Public License, v. 2.0 are satisfied: GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or (at your
option) any later version, with the GNU Classpath Exception which is available
at https://www.gnu.org/software/classpath/license.html.