transactions-rust
Distributed ACID transactions are not supported by the Couchbase Rust SDK 1.x — alternatives and workarounds
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Distributed ACID transactions are not supported by the Couchbase Rust SDK 1.x — alternatives and workarounds
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Couchbase SDK error handling — UnambiguousTimeoutException vs AmbiguousTimeoutException, DocumentNotFoundException, CasMismatchException, DurabilityImpossibleException, SDK debug logging, sdk-doctor connectivity diagnostics, retryable vs non-retryable errors, circuit breaker, error best practices
Couchbase SDK patterns for Rust — CAS optimistic locking, retry on CasMismatch, tokio bulk operations with join_all/FuturesUnordered, atomic counters, sub-document (MutateInSpec/LookupInSpec), array operations, exists, replica reads, touch/getAndTouch, preserve_expiry, error handling
Configure and optimize Couchbase SDK connections in Rust — async/tokio cluster setup, singleton pattern, wait_until_ready, timeouts, KV CRUD (upsert/insert/get/replace/remove), expiry, durability, sub-document operations
SQL++ queries with the Couchbase Rust SDK — scope.query, cluster.query, positional and named parameters, scan consistency, deserializing rows into structs, DML (INSERT/UPDATE/DELETE/UPSERT), MutationState RYOW
Testing Couchbase Rust applications — unit testing with mockall, integration testing with testcontainers-rs, scope/collection isolation
Entry point for all Couchbase questions — routes to the right skill based on topic and language. Use for any question about Couchbase SDK connection, querying, search, transactions, analytics, field-level encryption, testing, mobile, caching, eventing, Kafka, XDCR, backup, security, or data modeling.
| name | transactions-rust |
| summary | Distributed ACID transactions are not supported by the Couchbase Rust SDK 1.x — alternatives and workarounds |
| description | Distributed ACID transactions are not supported by the Couchbase Rust SDK 1.x — alternatives and workarounds |
| compatibility | Rust SDK 1.x. Distributed transactions not supported. |
| metadata | {"last_verified":"2026-05","handoff":[{"condition":"user asks about transactions in a supported language","skill":"transactions-python"},{"condition":"user asks about connection setup or SDK configuration","skill":"server-connection-rust"}]} |
Rust SDK 1.x does not support distributed ACID transactions. There is no Transactions API.
Not available. See Alternatives below for single-document atomicity (CAS) and multi-document saga patterns.
Not applicable — transactions are not supported. Use cluster.query() for SQL++ queries. See server-querying-rust.
Since there is no transaction API, there are no TransactionFailed or TransactionExpired errors. Handle CAS conflicts with CasMismatch retries (see Alternatives below).
Option 1 — Optimistic concurrency with CAS:
For single-document atomicity, use Compare-And-Swap (CAS) to detect and retry conflicting writes.
use couchbase::error::ErrorKind;
let max_retries = 5;
for _ in 0..max_retries {
let result = collection.get("account::alice", None).await?;
let cas = result.cas();
let mut doc: serde_json::Value = result.content_as()?;
doc["balance"] = serde_json::json!(doc["balance"].as_i64().unwrap() - 100);
match collection.replace(
"account::alice",
doc,
ReplaceOptions::new().cas(cas),
).await {
Ok(_) => break,
Err(e) if matches!(e.kind(), ErrorKind::CasMismatch) => continue,
Err(e) => return Err(e.into()),
}
}
Option 2 — Sub-document atomic operations:
For incrementing counters or appending to arrays atomically within a single document:
use couchbase::MutateInSpec;
// Atomic decrement — no CAS needed
collection.mutate_in(
"account::alice",
&[
MutateInSpec::decrement("balance", 100, None)?,
],
None,
).await?;
Option 3 — Application-level saga pattern:
For multi-document workflows, implement a saga: write each step with a status field (pending → committed → complete), and use a background task to detect and compensate for incomplete sagas.
Option 4 — Use a supported SDK:
If distributed ACID transactions are a hard requirement, Python, Java, Go, .NET, Node.js, PHP, and Scala SDKs all support them. See the transactions-python skill as a starting point.
Monitor the Couchbase Rust SDK release notes for transaction support in future versions.