fix(evidence): reconcile generations safely
This commit is contained in:
@@ -92,9 +92,16 @@ class CorpusPipeline:
|
||||
return protected
|
||||
|
||||
def gc(self, *, workspace_root: Path, dry_run: bool = False) -> dict:
|
||||
generations = self.store.list_generations()
|
||||
published = self.store.published_generations()
|
||||
list_vectors = getattr(self.vector_store, "list_evidence_generations", None)
|
||||
vector_generations = set(list_vectors("evidence")) if list_vectors else set()
|
||||
generations = sorted(set(published) | vector_generations)
|
||||
protected = self._protected_generations(workspace_root)
|
||||
keep = set(generations[-self.retain_published_generations:]) | protected
|
||||
active = self.store.active_generation()
|
||||
rollback_count = self.retain_published_generations - 1
|
||||
rollback = [generation for generation in published if generation != active]
|
||||
keep = ({active} if active else set()) | set(rollback[-rollback_count:] if rollback_count else ())
|
||||
keep |= protected
|
||||
evicted, failures = [], []
|
||||
for generation in generations:
|
||||
if generation in keep:
|
||||
@@ -108,7 +115,8 @@ class CorpusPipeline:
|
||||
failures.append({"generation": generation, "error": "vector cleanup failed"})
|
||||
continue
|
||||
try:
|
||||
self.store.discard(generation)
|
||||
if generation in self.store.list_generations():
|
||||
self.store.discard(generation)
|
||||
evicted.append(generation)
|
||||
except Exception:
|
||||
failures.append({"generation": generation, "error": "filesystem cleanup failed"})
|
||||
@@ -131,7 +139,11 @@ class CorpusPipeline:
|
||||
with self.store.writer_lock():
|
||||
return self._run(dry_run=dry_run, resume=resume)
|
||||
|
||||
def run_as_job(
|
||||
def run_as_job(self, **kwargs) -> PipelineResult:
|
||||
with self.store.writer_lock():
|
||||
return self._run_as_job(**kwargs)
|
||||
|
||||
def _run_as_job(
|
||||
self,
|
||||
*,
|
||||
workspace_id: str,
|
||||
|
||||
Reference in New Issue
Block a user