fix: бесконечный цикл сборки — idempotency guard через last-built-s3key аннотацию
Проблема: upload handler сбрасывал phase в Pending ПОСЛЕ того как контроллер уже выставил Building → бесконечный цикл (94 job'а). Решение: - controllers/function_controller.go: startBuild сначала ставит аннотацию last-built-s3key = spec.S3Key (idempotency guard), потом status. Reconcile стартует сборку только если spec.S3Key != last-built-s3key. - handler/upload.go: убран Status().Update() — контроллер сам управляет фазой. - builder.go: IsAlreadyExists при создании job не ошибка (parallel reconcile).
This commit is contained in:
@@ -121,6 +121,11 @@ func (b *Builder) Build(ctx context.Context, namespace, funcName, s3Key string)
|
||||
}
|
||||
|
||||
if err := b.client.Create(ctx, job); err != nil {
|
||||
// Если job с таким именем уже существует (два reconcile в одну секунду) —
|
||||
// возвращаем имя, контроллер будет следить за ним как обычно
|
||||
if errors.IsAlreadyExists(err) {
|
||||
return jobName, nil
|
||||
}
|
||||
return "", fmt.Errorf("create build job: %w", err)
|
||||
}
|
||||
return jobName, nil
|
||||
|
||||
Reference in New Issue
Block a user