This repository holds a simple leader-followers key-value store by using hashicorp/raft.
raftkv
provides gRPC and HTTP APIs. Please take a look API Reference.
docker compose up
Set a key-value to a leader.
curl -XPOST 'localhost:50002/v1/set' \
--data-raw '{
"key": "programming_language",
"value": "golang"
}'
Get a value from a follower. You will get "golang" from followers. It means a leader propagates the value to followers.
curl -XGET 'localhost:50102/v1/get/programming_language'
curl -XGET 'localhost:50202/v1/get/programming_language'
Delete a key-value. You will get "not found" errors from followers.
curl -XDELETE 'localhost:50002/v1/delete/programming_language'
curl -XGET 'localhost:50102/v1/get/programming_language'
curl -XGET 'localhost:50202/v1/get/programming_language'
{"code":5, "message":"not found", "details":[]}
{"code":5, "message":"not found", "details":[]}
If you try to set or delete a key-value to a follower, you will get an error.
localhost:50102
is an address for a follower at this time and you can replace it with localhost:50201
too.
See the docker-compose.yaml in detail.
curl -XPOST 'localhost:50102/v1/set' \
--data-raw '{
"key": "programming_language",
"value": "golang"
}'
curl -XDELETE 'localhost:50102/v1/delete/programming_language'
{"code":13, "message":"non-leader can't set key=programming_language, value=golang", "details":[]}
{"code":13, "message":"non-leader can't delete a value associated to programming_language", "details":[]}