mirror of
https://github.com/logos-blockchain/logos-blockchain-testing.git
synced 2026-04-12 06:03:09 +00:00
65 lines
1.6 KiB
Markdown
65 lines
1.6 KiB
Markdown
|
|
# KV Store Example
|
||
|
|
|
||
|
|
This example runs a small replicated key-value store.
|
||
|
|
|
||
|
|
The usual scenario writes keys through one node and checks that the other nodes
|
||
|
|
eventually return the same values.
|
||
|
|
|
||
|
|
## How TF runs this
|
||
|
|
|
||
|
|
Each example follows the same pattern:
|
||
|
|
|
||
|
|
- TF starts a small deployment of kvstore nodes
|
||
|
|
- a workload writes keys through one node
|
||
|
|
- an expectation keeps reading from all nodes until they agree on the values
|
||
|
|
|
||
|
|
## Scenarios
|
||
|
|
|
||
|
|
- `basic_convergence` runs the convergence check locally
|
||
|
|
- `compose_convergence` runs the same check in Docker Compose
|
||
|
|
- `k8s_convergence` runs it on Kubernetes
|
||
|
|
- `k8s_manual_convergence` starts the nodes through the k8s manual cluster API, restarts one node, and checks convergence again
|
||
|
|
|
||
|
|
## API
|
||
|
|
|
||
|
|
Each node exposes:
|
||
|
|
|
||
|
|
- `PUT /kv/:key` to write a value
|
||
|
|
- `GET /kv/:key` to read a value
|
||
|
|
- `GET /internal/snapshot` to read the local replicated state
|
||
|
|
|
||
|
|
## Run locally
|
||
|
|
|
||
|
|
```bash
|
||
|
|
cargo run -p kvstore-examples --bin basic_convergence
|
||
|
|
```
|
||
|
|
|
||
|
|
## Run with Docker Compose
|
||
|
|
|
||
|
|
```bash
|
||
|
|
cargo run -p kvstore-examples --bin compose_convergence
|
||
|
|
```
|
||
|
|
|
||
|
|
Set `KVSTORE_IMAGE` to override the default compose image tag.
|
||
|
|
|
||
|
|
## Run with Kubernetes
|
||
|
|
|
||
|
|
```bash
|
||
|
|
docker build -t kvstore-node:local -f examples/kvstore/Dockerfile .
|
||
|
|
cargo run -p kvstore-examples --bin k8s_convergence
|
||
|
|
```
|
||
|
|
|
||
|
|
Prerequisites:
|
||
|
|
- `kubectl` configured with a reachable cluster
|
||
|
|
- `helm` installed
|
||
|
|
|
||
|
|
Optional image override:
|
||
|
|
- `KVSTORE_K8S_IMAGE` (falls back to `KVSTORE_IMAGE`, then `kvstore-node:local`)
|
||
|
|
|
||
|
|
## Run with Kubernetes manual cluster
|
||
|
|
|
||
|
|
```bash
|
||
|
|
docker build -t kvstore-node:local -f examples/kvstore/Dockerfile .
|
||
|
|
cargo run -p kvstore-examples --bin k8s_manual_convergence
|
||
|
|
```
|