From c334dba4451c57bf918dd484b9f5e85514f45475 Mon Sep 17 00:00:00 2001 From: kjuulh Date: Sun, 6 Jul 2025 20:56:42 +0200 Subject: [PATCH] feat: do publish --- Cargo.lock | 2 +- README.md | 29 +++++++---------------------- 2 files changed, 8 insertions(+), 23 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 83a42d8..3647968 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -645,7 +645,7 @@ dependencies = [ [[package]] name = "noleader" -version = "0.1.1" +version = "0.1.2" dependencies = [ "anyhow", "async-nats", diff --git a/README.md b/README.md index a2a4c5f..f28ff02 100644 --- a/README.md +++ b/README.md @@ -22,9 +22,9 @@ This library is still young and the API is subject to change. ## Intended use-case -Noleader is not built for distributed consensus, or fast re-election produces. It take upwards to a minute to get reelected, state is the users responsibility to handle. +Noleader is not built for distributed consensus, or fast re-election procedures. It take upwards to a minute to get re-elected, state is the users responsibility to handle. -Noleader is pretty much just a distributed lock, intended for use-cases where the use wants to only have a single node scheduling work etc. +Noleader is pretty much just a distributed lock, intended for use-cases where the user wants to only have a single node scheduling work etc. Good alternatives are: @@ -97,29 +97,14 @@ async fn main() -> anyhow::Result<()> { } ``` -## API Overview +## Examples -* **`Leader::new(bucket: &str, key: &str, client: async_nats::Client) -> Leader`** - Create a new election participant. -* **`create_bucket(&self) -> anyhow::Result<()>`** - Ensures the KV bucket exists (no-op if already created). -* **`start(&self, token: CancellationToken) -> anyhow::Result<()>`** - Begins the background leader-election loop; renews TTL on success or retries on failure. -* **`do_while_leader(&self, f: F) -> anyhow::Result<()>`** - Runs your closure as long as you hold leadership; cancels immediately on loss. -* **`leader_id(&self) -> Uuid`** - Returns your unique candidate ID. -* **`is_leader(&self) -> Status`** - Returns `Status::Leader` or `Status::Candidate`, taking shutdown into account. +See the examples folder in ./crates/noleader/examples -### Types +## Architecture + +Noleader uses a simple election stealing -```rust -pub enum Status { - Leader, - Candidate, -} -``` ## License