From 81879fba7bae21c95c405b8c54547fa5564a845b Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Wed, 28 Oct 2026 00:38:32 -0700 Subject: [PATCH] vector: preserve typed error chains in lease pin/release (#12153) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit vector: keep typed error chains in lease pin/release Error::msg discarded the source chain — denied() could not downcast to object_store::PermissionDenied, so try_pin surfaced the error instead of degrading to an unleased query and read-only credentials broke GetVectors/QueryVectors. Plain ? preserves the chain. --- seaweed-vector/crates/core/src/maintenance.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/seaweed-vector/crates/core/src/maintenance.rs b/seaweed-vector/crates/core/src/maintenance.rs index b75b521330..d3a95567b2 100644 --- a/seaweed-vector/crates/core/src/maintenance.rs +++ b/seaweed-vector/crates/core/src/maintenance.rs @@ -67,8 +67,7 @@ pub async fn pin(dataset: &Dataset) -> Result { dataset .tags() .create(&tag, Ref::Version(None, Some(version))) - .await - .map_err(anyhow::Error::msg)?; + .await?; // A cleanup that listed tags before this create can still reclaim the // version; fail the read now rather than mid-query. if dataset.checkout_version(version).await.is_err() { @@ -109,7 +108,7 @@ fn denied(err: &anyhow::Error) -> bool { } async fn release(dataset: &Dataset, tag: &str) -> Result<()> { - dataset.tags().delete(tag).await.map_err(anyhow::Error::msg) + Ok(dataset.tags().delete(tag).await?) } fn untrack(tag: &str) {