Skip to content

Repository files navigation

duroxide-sql

⚠️EXPERIMENTAL⚠️

This project is experimental and under active development. It is not recommended for production use. APIs may change without notice, and there may be bugs or missing features.

A MS-SQL/Azure SQL provider implementation for Duroxide, a durable task orchestration framework for Rust.

Features

  • ✅ Full implementation of Provider and ProviderAdmin traits
  • ✅ T-SQL stored procedures for atomic operations
  • ✅ Azure SQL and on-premise MS-SQL support
  • ✅ Connection pooling via bb8 + tiberius
  • ✅ Custom schema support for multi-tenant isolation
  • ✅ Automatic schema migration on startup
  • ✅ Poison message detection with attempt count tracking
  • ✅ Lock renewal for long-running orchestrations and activities

Installation

Add to your Cargo.toml:

[dependencies]
duroxide-sql = { git = "https://github.com/affandar/duroxide-sql" }
duroxide = { git = "https://github.com/affandar/duroxide" }

Usage

use duroxide_sql::MssqlProvider;use duroxide::runtime::Runtime;use std::sync::Arc;#[tokio::main]asyncfnmain() -> anyhow::Result<()>{// Create provider with connection stringlet provider = MssqlProvider::new("server=tcp:myserver.database.windows.net,1433;database=mydb;user=myuser;password=mypass;encrypt=true").await?;// Use with Duroxide runtimelet runtime = Runtime::start_with_store(Arc::new(provider),
activity_registry,
orchestration_registry,).await;Ok(())}

Custom Schema

For multi-tenant isolation or testing:

let provider = MssqlProvider::new_with_schema("server=tcp:myserver.database.windows.net,1433;database=mydb;user=myuser;password=mypass",Some("my_schema"),).await?;

Configuration

Environment VariableDescriptionDefault
DUROXIDE_SQL_POOL_MAXMaximum connection pool size10

Connection String Format

Supports ADO.NET style connection strings:

server=tcp:hostname,port;database=dbname;user=username;password=secret;encrypt=true;trustservercertificate=false

Architecture

This provider uses T-SQL stored procedures for all critical operations to ensure atomicity:

  • sp_fetch_orchestration_item - Fetch + lock orchestration turn
  • sp_ack_orchestration_item - 9-step atomic commit
  • sp_fetch_work_item - Fetch + lock activity
  • sp_ack_worker - Delete + enqueue completion

See IMPLEMENTATION_PLAN.md for detailed architecture.

Testing

Run against Azure SQL:

export DATABASE_URL="server=tcp:myserver.database.windows.net,1433;database=mydb;user=myuser;password=mypass;encrypt=true"
cargo test

License

MIT License - see LICENSE for details.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages