zeroclaw-labs/zeroclaw · error

Qdrant set payload failed during agent rename ({status}): {t

Error message

Qdrant set payload failed during agent rename ({status}): {text}

What it means

QdrantMemory::rename_agent scrolls points whose agent_id payload equals the old alias and rewrites them to the new alias via set-payload. This error means that set-payload call returned non-2xx partway through the rename.

Source

Thrown at crates/zeroclaw-memory/src/qdrant.rs:867

        }
        let body = serde_json::json!({
            "payload": { "agent_id": to },
            "filter": Self::must_filter(&[("agent_id", from)]),
        });
        let resp = self
            .request(
                reqwest::Method::POST,
                &format!("/collections/{}/points/payload", self.collection),
            )
            .query(&[("wait", "true")])
            .json(&body)
            .send()
            .await
            .context("failed to set payload during Qdrant agent rename")?;
        if !resp.status().is_success() {
            let status = resp.status();
            let text = resp.text().await.unwrap_or_default();
            anyhow::bail!("Qdrant set payload failed during agent rename ({status}): {text}");
        }
        Ok(matches)
    }

    async fn count_agent(&self, agent_alias: &str) -> Result<usize> {
        // Qdrant keys memory points by the alias in the `agent_id` payload field,
        // so `rename_agent` re-points exactly the points `list_for_agents` returns;
        // residue is that match count.
        Ok(self
            .list_for_agents(&[agent_alias], None, None)
            .await?
            .len())
    }

    async fn count(&self) -> Result<usize> {
        self.ensure_initialized().await?;

        let resp = self

View on GitHub (pinned to 88bb9c8533)

Solutions

  1. Retry rename_agent — it re-scrolls and rewrites whatever still matches (idempotent)
  2. 404: recreate the collection and restart so init re-runs
  3. Avoid concurrent forget/purge on the same agent during a rename
  4. 5xx: wait for readyz then retry
Defensive patterns

Strategy: retry

Validate before calling

// Skip renames that cannot matter
if memory.count_agent(from).await? == 0 { return Ok(0); } // nothing to re-point

Type guard

fn is_rename_set_payload_error(e: &anyhow::Error) -> bool {
    e.to_string().starts_with("Qdrant set payload failed during agent rename")
}

Try / catch

match memory.rename_agent(from, to).await {
    Err(e) if is_rename_set_payload_error(&e) => { sleep(backoff).await; memory.rename_agent(from, to).await } // idempotent re-scroll+rewrite
    other => other,
}

Prevention

When it happens

Trigger: 404 collection missing; 400 from an empty/invalid match list; concurrent deletes removing points between scroll and set-payload; 5xx.

Common situations: Renaming an agent while its memories are being purged; renaming against a dropped collection; Qdrant briefly unavailable mid-rename.

Related errors


AI-assisted analysis of zeroclaw-labs/zeroclaw@88bb9c8533 (2026-08-23). Data as JSON: /api/errors/12ffcecf8b1b38ed. Report an issue: GitHub.