An open API service indexing awesome lists of open source software.

https://github.com/alexheretic/dynamodb-lease

Dynamodb distributed lock client for Rust
https://github.com/alexheretic/dynamodb-lease

Last synced: 3 days ago
JSON representation

Dynamodb distributed lock client for Rust

Awesome Lists containing this project

README

        

# dynamodb-lease
Client that acquires distributed locks in dynamodb that expire (aka "leases").
Uses [aws-sdk-dynamodb](https://github.com/awslabs/aws-sdk-rust/tree/main/sdk/dynamodb)
& [tokio](https://github.com/tokio-rs/tokio).

[![Crates.io](https://img.shields.io/crates/v/dynamodb-lease.svg)](https://crates.io/crates/dynamodb-lease)
[![Docs.rs](https://docs.rs/dynamodb-lease/badge.svg)](https://docs.rs/dynamodb-lease)

```rust
let client = dynamodb_lease::Client::builder()
.table_name("example-leases")
.lease_ttl_seconds(60)
.build_and_check_db(dynamodb_client)
.await?;

// acquire a lease for "important-job-123"
// waits for any other holders to release if necessary
let lease = client.acquire("important-job-123").await?;

// `lease` periodically extends itself in a background tokio task

// until dropped others will not be able to acquire this lease
assert!(client.try_acquire("important-job-123").await?.is_none());

// Dropping the lease will asynchronously release it, so others may acquire it
drop(lease);
```

See the [design doc](./DESIGN.md) & source for how it works under the hood.

## Test
Run `scripts/init-test.sh` to ensure dynamodb-local is running on 8000.

```sh
cargo test
```

### AWS setup
You may also need to setup some aws config, e.g.
- setup `~/.aws/config`
```
[default]
region = eu-west-1
```
- setup `~/.aws/credentials` with fakes values
```
[default]
aws_access_key_id=12341234
aws_secret_access_key=12341234
```