fix(models): let a snapshot race resolve to the version that won

Two sends of the same request can both miss the content-hash lookup and race to
insert. The unique index settles it; the loser wants exactly what the winner
wrote, not an error that costs its response a version link.
This commit is contained in:
Gregory Schier
2026-09-05 21:24:41 -07:00
parent e47088b507
commit 646f5a09b0
2 changed files with 17 additions and 6 deletions
@@ -50,11 +50,22 @@ impl<'a> ClientDb<'a> {
workspace_id: request.workspace_id().to_string(),
model_type: request.model_type().to_string(),
model_id: request.id().to_string(),
content_hash,
content_hash: content_hash.clone(),
document,
reason,
..Default::default()
})?;
});
let version = match version {
Ok(version) => version,
// Two sends of the same request can both miss the lookup above and
// race to insert. The unique index settles it, and the loser wants
// exactly what the winner wrote.
Err(err) => match self.find_version_by_hash(request.id(), &content_hash) {
Some(existing) => return Ok(existing),
None => return Err(err),
},
};
self.prune_model_versions(request.id())?;