fix(console): sync function package resourceversion after code update
This commit is contained in:
@@ -46,7 +46,7 @@ spec:
|
|||||||
serviceAccountName: fission-console
|
serviceAccountName: fission-console
|
||||||
containers:
|
containers:
|
||||||
- name: console
|
- name: console
|
||||||
image: naeel/fission-console:v0.2.4
|
image: naeel/fission-console:v0.2.5
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 8090
|
- containerPort: 8090
|
||||||
env:
|
env:
|
||||||
|
|||||||
+17
-1
@@ -430,7 +430,23 @@ func (s *server) handleUpdateFunctionCode(w http.ResponseWriter, r *http.Request
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
writeAnyJSON(w, http.StatusOK, map[string]any{"updated": true, "package": pkgName})
|
updatedPkg, err := s.dyn.Resource(packageGVR).Namespace(s.ns).Get(ctx, pkgName, metav1.GetOptions{})
|
||||||
|
if err != nil {
|
||||||
|
writeJSONError(w, http.StatusBadGateway, fmt.Sprintf("get updated package %q: %v", pkgName, err))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := unstructured.SetNestedField(fn.Object, updatedPkg.GetResourceVersion(), "spec", "package", "packageref", "resourceversion"); err != nil {
|
||||||
|
writeJSONError(w, http.StatusInternalServerError, fmt.Sprintf("set function package resourceversion: %v", err))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err := s.dyn.Resource(functionGVR).Namespace(s.ns).Update(ctx, fn, metav1.UpdateOptions{}); err != nil {
|
||||||
|
writeJSONError(w, http.StatusBadGateway, fmt.Sprintf("update function %q package ref: %v", name, err))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
writeAnyJSON(w, http.StatusOK, map[string]any{"updated": true, "package": pkgName, "package_resourceversion": updatedPkg.GetResourceVersion()})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *server) handleInvokeFunction(w http.ResponseWriter, r *http.Request, name string) {
|
func (s *server) handleInvokeFunction(w http.ResponseWriter, r *http.Request, name string) {
|
||||||
|
|||||||
@@ -302,3 +302,27 @@
|
|||||||
|
|
||||||
### Проверка
|
### Проверка
|
||||||
- `GET /console/api/functions/fn-go-acc` теперь возвращает читаемый Go-код, без `PK...` сигнатур.
|
- `GET /console/api/functions/fn-go-acc` теперь возвращает читаемый Go-код, без `PK...` сигнатур.
|
||||||
|
|
||||||
|
## 2026-04-15 (дополнение) — Полный пользовательский прогон UI и invoke-fix
|
||||||
|
|
||||||
|
### Что проверено как пользовательский сценарий
|
||||||
|
- Прогнан массовый invoke через UI API (`POST /console/api/functions/{name}/invoke`) для всех функций в списке.
|
||||||
|
- Итого: `31` функций, из них `25` успешно отработали, `6` вернули 502/timeout (ожидаемо проблемные/сломанные кейсы).
|
||||||
|
- Проверен полный edit flow через UI API на рабочей функции:
|
||||||
|
- `GET function` -> `PUT /code` -> `POST /invoke` -> `PUT /code` (restore) -> `POST /invoke`.
|
||||||
|
|
||||||
|
### Найденный UI-баг и исправление
|
||||||
|
- Баг: после обновления кода через UI следующий invoke мог отдавать старую специализацию/кэш.
|
||||||
|
- Причина: обновлялся только `Package`, но не обновлялся `Function.spec.package.packageref.resourceversion`.
|
||||||
|
- Фикс в `console/main.go`:
|
||||||
|
- после `package update` читается новый `package.resourceVersion`
|
||||||
|
- выполняется update `Function` с новым `packageref.resourceversion`
|
||||||
|
- invoke сразу использует новую (или восстановленную) версию кода.
|
||||||
|
|
||||||
|
### Проверка фикса
|
||||||
|
- После update через UI invoke возвращает новый ответ.
|
||||||
|
- После restore через UI invoke возвращает исходный ответ (без зависания старого кэша).
|
||||||
|
|
||||||
|
### Статус `fn-go-acc`
|
||||||
|
- `fn-go-acc` продолжает падать не из-за UI, а из-за runtime specialization на стороне Fission.
|
||||||
|
- Подтверждено логами `router/executor`: `GetServiceForFunction ... context canceled` и постоянными readiness-fail у poolmgr pod-ов `go-acc`.
|
||||||
|
|||||||
Reference in New Issue
Block a user