zeroclaw-labs/zeroclaw · error
Qdrant set payload failed during migration ({status}): {text
Error message
Qdrant set payload failed during migration ({status}): {text} What it means
During the same startup migration, points whose session_id payload needs sanitizing are rewritten via POST /collections/{c}/points/payload (set payload). This error means the set-payload call returned non-2xx partway through; progress is lost and the whole migration retries on the next startup.
Source
Thrown at crates/zeroclaw-memory/src/qdrant.rs:365
}]
}
});
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 session_id migration")?;
if !resp.status().is_success() {
let status = resp.status();
let text = resp.text().await.unwrap_or_default();
anyhow::bail!("Qdrant set payload failed during migration ({status}): {text}");
}
rewritten += 1;
}
if rewritten > 0 {
::zeroclaw_log::record!(
INFO,
::zeroclaw_log::Event::new(module_path!(), ::zeroclaw_log::Action::Note)
.with_attrs(
::serde_json::json!({"rewritten": rewritten, "collection": self.collection})
),
"Normalized session_id payload values in Qdrant collection to sanitized form"
);
}
Ok(())
}View on GitHub (pinned to 88bb9c8533)
Solutions
- Retry startup — the migration re-scrolls and only rewrites points that still need it (idempotent)
- 429: stagger restarts or raise rate limits so bursts of set-payload calls fit
- 404 on point ids is benign if the points were deleted concurrently; a retry clears it
- Ensure only one instance runs the migration at a time
Defensive patterns
Strategy: retry
Type guard
fn is_migration_set_payload_error(e: &anyhow::Error) -> bool {
e.to_string().starts_with("Qdrant set payload failed during migration")
} Try / catch
match memory.store(k, v).await {
Err(e) if is_migration_set_payload_error(&e) => { tokio::time::sleep(backoff).await; memory.store(k, v).await } // idempotent migration
other => other,
} Prevention
- Run one migrating instance at a time
- Watch for 429s on Qdrant Cloud and add start jitter
- Don't prune points during agent restarts
When it happens
Trigger: Points deleted concurrently between scroll and set-payload (Qdrant 404 on missing point ids); 400 from a malformed filter; 429 rate limiting when many points need rewriting; collection dropped mid-migration.
Common situations: Two instances migrating the same collection simultaneously; Qdrant Cloud rate limits on a collection with many legacy session ids; ops tooling pruning points while agents restart.
Related errors
- Qdrant scroll failed during migration ({status}): {text}
- Qdrant set payload failed during agent rename ({status}): {t
- purge_agent not supported by this memory backend
- Qdrant scroll failed ({status}): {text}
- Qdrant set payload failed ({status}): {text}
AI-assisted analysis of zeroclaw-labs/zeroclaw@88bb9c8533 (2026-08-23).
Data as JSON: /api/errors/b3b2c4726c58cbf3.
Report an issue: GitHub.