57 lines
3.4 KiB
Markdown
57 lines
3.4 KiB
Markdown
# Отчёт 2026-04-20 — Multi-language support v0.7.6
|
||
|
||
## Цель
|
||
Добиться PASS=73/FAIL=0 в `tests_v2.sh` — тесты на PHP, Ruby, Perl invoke (блоки AA/AB/AC).
|
||
|
||
## Что сделано
|
||
|
||
### 1. NodeJS ESM несовместимость (livetest `lt-node`)
|
||
**Баг:** `lt-node` была создана с ESM кодом (`export default async function`). Wrapper в `buildJSDeployZip` использует `new Function('module','exports', код)` — ESM синтаксис внутри `new Function` вызывает SyntaxError.
|
||
**Фикс:** Пересоздан `lt-node` с CJS кодом: `module.exports = async function(ctx) { return { body: "node-ok", status: 200 }; }`
|
||
**Результат:** PASS блок D (NodeJS livetest invoke).
|
||
|
||
### 2. Ruby livetest задвоенный `def handler`
|
||
**Баг:** `lt-ruby` создана с задвоенным `def handler` — SyntaxError.
|
||
**Фикс:** Пересоздана с правильным кодом.
|
||
**Результат:** PASS блок F (Ruby livetest invoke).
|
||
|
||
### 3. `fission-fetcher` SA не создавался в user namespace (ГЛАВНЫЙ БАГ)
|
||
**Баг:** Pool pod Fission запускается в user namespace с `serviceAccountName: fission-fetcher`. `ensureUserNamespace` создавала только RoleBindings (ссылки на SA из namespace `fission`), но сами SA `fission-fetcher` и `fission-builder` в user namespace не создавала.
|
||
Итог: `FailedCreate: serviceaccount "fission-fetcher" not found` → pool pod не стартует → invoke timeout → FAIL.
|
||
В livetest namespace SA были созданы ранее вручную — поэтому livetest-блоки проходили, новые тестовые namespace — нет.
|
||
|
||
**Фикс** в `ensureUserNamespace` (`console/main.go`):
|
||
```go
|
||
saGVR := schema.GroupVersionResource{Group: "", Version: "v1", Resource: "serviceaccounts"}
|
||
for _, saName := range []string{"fission-fetcher", "fission-builder"} {
|
||
saObj := &unstructured.Unstructured{Object: map[string]any{
|
||
"apiVersion": "v1",
|
||
"kind": "ServiceAccount",
|
||
"metadata": map[string]any{"name": saName, "namespace": ns},
|
||
}}
|
||
_, saErr := s.dyn.Resource(saGVR).Namespace(ns).Create(ctx, saObj, metav1.CreateOptions{})
|
||
if saErr != nil && !apierrors.IsAlreadyExists(saErr) {
|
||
log.Printf("ensureUserNamespace: create SA %s/%s: %v", ns, saName, saErr)
|
||
}
|
||
}
|
||
```
|
||
SA создаются явно перед RoleBindings, операция idempotent.
|
||
|
||
### 4. Оптимизация тестов AA-AC (один namespace)
|
||
**Проблема:** `addNSToFission` патчит deployments при каждом новом namespace → rolling update ~60-90s. 3 разных namespace = 3 rollout'а.
|
||
**Фикс в `tests_v2.sh`:** Все три блока AA/AB/AC используют один namespace `lang-multi-${RUN_ID}@test.local` → 1 rollout вместо 3. Ретраи увеличены до 20 (200s).
|
||
|
||
## Результат
|
||
|
||
| Версия | PASS | FAIL |
|
||
|--------|------|------|
|
||
| v0.7.5 (до) | 67 | 6 |
|
||
| **v0.7.6 (после)** | **73** | **0** |
|
||
|
||
Все языки: NodeJS ✅, PHP ✅, Ruby ✅, Perl ✅
|
||
|
||
## Деплой
|
||
- Docker: `naeel/fission-console:v0.7.6`
|
||
- Git commit: `e3db3cf` branch `feat/namespace-isolation`
|
||
- Container name: `console` (не `fission-console`)
|