Files
fission-console/doc/report-2026-04-20.md
T

3.4 KiB
Raw Blame History

Отчёт 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):

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)