{"id":13504423,"url":"https://github.com/wepay/waltz","last_synced_at":"2026-01-17T16:31:14.155Z","repository":{"id":35238290,"uuid":"193582925","full_name":"wepay/waltz","owner":"wepay","description":"Waltz is a quorum-based distributed write-ahead log for replicating transactions","archived":false,"fork":false,"pushed_at":"2023-03-29T21:27:48.000Z","size":2323,"stargazers_count":415,"open_issues_count":23,"forks_count":34,"subscribers_count":27,"default_branch":"master","last_synced_at":"2025-03-29T21:32:23.577Z","etag":null,"topics":["database","distributed-ledger","distributed-systems","log","multi-region","quorum","transactional","write-ahead-log"],"latest_commit_sha":null,"homepage":"https://wepay.github.io/waltz/","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wepay.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2019-06-24T21:26:24.000Z","updated_at":"2025-03-17T18:37:34.000Z","dependencies_parsed_at":"2024-01-13T19:20:50.589Z","dependency_job_id":"17c329b4-fc7c-4e3e-9fa6-da666b98127b","html_url":"https://github.com/wepay/waltz","commit_stats":null,"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/wepay/waltz","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wepay%2Fwaltz","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wepay%2Fwaltz/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wepay%2Fwaltz/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wepay%2Fwaltz/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wepay","download_url":"https://codeload.github.com/wepay/waltz/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wepay%2Fwaltz/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28511867,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T13:38:16.342Z","status":"ssl_error","status_checked_at":"2026-01-17T13:37:44.060Z","response_time":85,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["database","distributed-ledger","distributed-systems","log","multi-region","quorum","transactional","write-ahead-log"],"created_at":"2024-08-01T00:00:37.474Z","updated_at":"2026-01-17T16:31:14.123Z","avatar_url":"https://github.com/wepay.png","language":"Java","funding_links":[],"categories":["Components","分布式开发","\u003ca name=\"Java\"\u003e\u003c/a\u003eJava"],"sub_categories":["Vectors"],"readme":"# Waltz\n\nWaltz is a distributed/replicated write ahead log for transactions.\n\n## Documentation\n\nWe have the documention [here](https://wepay.github.io/waltz).\n\n## Building\n\nTo build Waltz:\n\n    ./gradlew clean build\n\n## Testing\n\nTo run a single test class:\n\n    ./gradlew clean :waltz-storage:test -Dtest.single=StorageClientTest\n\nTo run a single test method:\n\n    ./gradlew clean :waltz-storage:test --tests com.wepay.waltz.storage.client.StorageClientTest.testBasicReadWrite\n\n### Smoke test\n\nWaltz also comes with a smoke test that starts:\n\n* 1 ZooKeeper server\n* 2 Waltz clients\n* 3 Waltz servers\n* 3 Waltz storage nodes\n\nIt then sends 1 million transactions while turning the servers on and off at random. Afterwards, it validates that all transactions were received, and that the checksums of the data are identical. It also logs throughput and latency.\n\nTo run smoke tests:\n\n    bin/smoketest.sh\n\nThe smoke test output looks like:\n\n    0001[... .*. *]\n    0002[... .** *]\n    0003[... *** *]\n    0004[..* *** *]\n    0005[*.* *** *]\n    0006[*** *** *] --..-..-..-..-+..-..-+..-..-..-..-+..-..-..-..-..-..-+..+\n    0007[.** *** *] +++-..-..-..-\n    0008[*** *** *] +..-..-\n    0009[*** .** *]\n    0010[*.* .** *] +++..-..-..-..-..-..+-\n    0011[*.* *** *] ..\n    0012[*** *** *] +-..-..-..-+..-+..-..-..-..+-..-\n\nEach state change results in a new line. The first four digits indicate the number of server/storage start/stops that have been triggered so far. The `[... ... .]` portion indicates the state of the server nodes, storage nodes and the zookeeper server, where `*` means that the process is up, and `.` means that it's down. Lastly, the trailing part of the line indicates 1000 writes (`-`), 1000 reads (`.`), and retries (`+`).\n\nA log file (`smoketest.log`) can be found in your home directory.\n\n## Demo app\n\nWaltz comes with a demo app that shows an example account balance database built on top of Waltz. \n\nStart a test Waltz cluster in docker environment.\n\n    bin/test-cluster.sh start\n\nStart a MySQL instance in docker environment.\n\n    bin/demo-bank-db.sh start\n\nRun demo application with simple self-explanatory commands.\n\n    bin/demo-bank-app.sh\n\n## Run Waltz in Docker\n\nWe implemented shell scripts to run a Waltz cluster in local Docker containers for testing purpose.\n\n### Creating the Docker images\n\n    ./gradlew distDocker\n\nThis builds the Docker images.\n\n### Starting test cluster\n\n    bin/test-cluster.sh start \u003c- Start default cluster\n    bin/test-cluster.sh start \u003ccluster_name\u003e \u003c- Start stopped cluster that is been already created\n    bin/test-cluster.sh start \u003ccluster_name\u003e \u003cbase_server_port\u003e \u003cbase_storage_port\u003e \u003c- Start new cluster of one storage \u0026 server node running on provided ports\n\nThis creates a user defined docker network `waltz-network` and \nstarts three container, a zookeeper server, a waltz storage node, and a waltz server node in `waltz-network`.\n\nZookeeper port is 2181 inside `waltz-network` and exposed to the host machine at 42181.\nSo, if you want to run a Waltz application outside of `waltz-network`, use `yourHostName:42181` for `zookeeper.connectString`.\nThe cluster's root ZNode is `/waltz_cluster`. So specify this as `cluster.root`.\n\nIf the Docker images are not built yet, this script builds them.\nHowever, it doesn't automatically build a new images even when the source code is modified. \nYou must rebuild images using `distDocker` gradle task.\n\n### Stopping waltz test cluster\n\n    bin/test-cluster.sh stop \u003c- stop all created clusters\n    bin/test-cluster.sh stop \u003ccluster_name\u003e \u003c- stop cluster with the given cluster name\n\nThis stops waltz containers. You can resume the cluster using `start \u003ccluster_name\u003e` command. All data in zookeeper and storages are preserved.\n\n### Destroying the test cluster\n\n    bin/test-cluster.sh clean \u003c- This will remove all waltz containers including zookeeper, thus removes all data.\n    bin/test-cluster.sh clean \u003ccluster_name\u003e \u003c- This will remove all two containers belonging to the same cluster. Zookeeper stays intact.\n\n### Restarting the test cluster\n\n    bin/test-cluster.sh restart \u003c- This will restart all waltz containers and regenerate config files (equivalent to stop, start).\n    bin/test-cluster.sh restart \u003ccluster_name\u003e \u003c- This will restart all two containers belonging to the same cluster and regenerate config files.\n\n### Setting up the test cluster with multiple partitions.\n\nThe test cluster is set up with a single partition by default.\nIf you want to create the test cluster with multiple partitions,\nthe environment variable WALTZ_TEST_CLUSTER_NUM_PARTITIONS to the desired number of partitions before creating the test cluster.\nFor example, to create the test cluster with five partitions, do the following.\n\n    export WALTZ_TEST_CLUSTER_NUM_PARTITIONS=5\n    bin/test-cluster.sh start\n\n### Running DemoBankApp\n\nFirst create a database. The following command will create a mysql container and the database.\n\n    bin/demo-bank-db.sh start\n\nThen, start the demo application:\n\n    bin/demo-bank-app.sh\n    \nTo stop the MySQL instance:\n\n    bin/demo-bank-db.sh stop\n\nTo remove the database:\n\n    bin/demo-bank-app.sh clean\n\n## Publishing Waltz Docs\n\nGo through website/README.md\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwepay%2Fwaltz","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwepay%2Fwaltz","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwepay%2Fwaltz/lists"}