fix: recover failed Gaussian project builds

This commit is contained in:
DCCONSTRUCTIONS
2026-08-26 09:34:23 +03:00
parent cb1e1494af
commit 385082c8ca
10 changed files with 224 additions and 27 deletions
+26 -1
View File
@@ -239,7 +239,7 @@ class SimulationProjectStore:
def begin_build(self, project_id: str) -> dict[str, Any]:
with self._lock:
document = self._read(project_id)
if document["status"] != "uploading":
if document["status"] not in {"uploading", "failed"}:
raise SimulationProjectConflictError("simulation project cannot start a build")
if any(
int(item["uploaded_bytes"]) != int(item["byte_length"])
@@ -247,6 +247,15 @@ class SimulationProjectStore:
):
raise SimulationProjectConflictError("simulation source upload is incomplete")
document["status"] = "queued"
document["provider"] = {
"provider_id": "gaussian-pipeline",
"job_id": None,
"state": None,
"progress": None,
"runtime": None,
}
document["artifacts"] = []
document["world_manifest"] = None
document["error"] = None
document["updated_at_utc"] = utc_now_iso()
self._write(document)
@@ -402,6 +411,22 @@ class SimulationProjectService:
).start()
return len(pending)
def begin_build(self, project_id: str) -> dict[str, Any]:
project = self.store.get(project_id)
if project.get("status") == "failed":
job_id = project["provider"].get("job_id")
if isinstance(job_id, str):
provider = self.provider_factory()
if provider is None:
raise SimulationProjectConflictError(
"Gaussian Pipeline недоступен для повторной сборки."
)
try:
provider.delete_job(job_id)
finally:
provider.close()
return self.store.begin_build(project_id)
def process(self, project_id: str) -> None:
provider: GaussianPipelineGateway | None = None
try: