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:
@@ -175,14 +175,6 @@ func (h *Handler) UploadCode(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
// Сбрасываем phase в Pending чтобы контроллер начал сборку
|
||||
fn.Status.Phase = slessv1alpha1.FunctionPhasePending
|
||||
fn.Status.Message = "code uploaded, build queued"
|
||||
if err := h.K8s.Status().Update(r.Context(), fn); err != nil {
|
||||
// Не фатально — контроллер подберёт через reconcile
|
||||
h.Log.Warn("failed to reset function phase", "name", name, "ns", ns, "err", err)
|
||||
}
|
||||
|
||||
writeJSON(w, http.StatusOK, map[string]string{
|
||||
"s3_key": s3Key,
|
||||
"phase": string(slessv1alpha1.FunctionPhasePending),
|
||||
|
||||
Reference in New Issue
Block a user