restructure: console→client-console, add admin-console skeleton, move docs to doc/
This commit is contained in:
@@ -0,0 +1,113 @@
|
||||
# FIX: archivePruner удаляет архивы tenant namespaces
|
||||
|
||||
## Симптом
|
||||
|
||||
Node.js функции не специализируются → fetcher 404 при скачивании архива.
|
||||
Storagesvc логи: `archive_pruner` удаляет архив через ~90 сек после создания функции.
|
||||
|
||||
## Причина
|
||||
|
||||
`pkg/storagesvc/archivePruner.go`, функция `getOrphanArchives`, строка 95:
|
||||
|
||||
```go
|
||||
for _, namespace := range utils.DefaultNSResolver().Snapshot() {
|
||||
pkgList, err := pruner.crdClient.CoreV1().Packages(namespace).List(...)
|
||||
```
|
||||
|
||||
`DefaultNSResolver().Snapshot()` возвращает только namespaces зарегистрированные
|
||||
через `AddNamespace()`. Storagesvc не слушает namespace events → tenant namespaces
|
||||
(`fission-*`) туда не попадают → их Package CRD невидимы → все загруженные архивы
|
||||
считаются orphan → удаляются.
|
||||
|
||||
## Правка
|
||||
|
||||
**Файл:** `pkg/storagesvc/archivePruner.go`
|
||||
|
||||
**Заменить** (строки 94–125):
|
||||
|
||||
```go
|
||||
// get all pkgs from kubernetes
|
||||
for _, namespace := range utils.DefaultNSResolver().Snapshot() {
|
||||
pkgList, err := pruner.crdClient.CoreV1().Packages(namespace).List(ctx, metav1.ListOptions{})
|
||||
if err != nil {
|
||||
pruner.logger.Error("error getting package list from kubernetes", zap.Error(err))
|
||||
return
|
||||
}
|
||||
|
||||
// extract archives referenced by these pkgs
|
||||
for _, pkg := range pkgList.Items {
|
||||
if pkg.Spec.Deployment.URL != "" {
|
||||
archiveID, err = getQueryParamValue(pkg.Spec.Deployment.URL, "id")
|
||||
if err != nil {
|
||||
pruner.logger.Error("error extracting value of archiveID from deployment url",
|
||||
zap.Error(err),
|
||||
zap.String("url", pkg.Spec.Deployment.URL))
|
||||
return
|
||||
}
|
||||
archivesRefByPkgs = append(archivesRefByPkgs, archiveID)
|
||||
}
|
||||
if pkg.Spec.Source.URL != "" {
|
||||
archiveID, err = getQueryParamValue(pkg.Spec.Source.URL, "id")
|
||||
if err != nil {
|
||||
pruner.logger.Error("error extracting value of archiveID from source url",
|
||||
zap.Error(err),
|
||||
zap.String("url", pkg.Spec.Source.URL))
|
||||
return
|
||||
}
|
||||
archivesRefByPkgs = append(archivesRefByPkgs, archiveID)
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**На:**
|
||||
|
||||
```go
|
||||
// get all pkgs from kubernetes across ALL namespaces (including tenant namespaces)
|
||||
// Fix: DefaultNSResolver().Snapshot() returns only fission-registered namespaces,
|
||||
// not tenant namespaces (fission-*). Use NamespaceAll to scan everything.
|
||||
pkgList, err := pruner.crdClient.CoreV1().Packages(metav1.NamespaceAll).List(ctx, metav1.ListOptions{})
|
||||
if err != nil {
|
||||
pruner.logger.Error("error getting package list from kubernetes", zap.Error(err))
|
||||
return
|
||||
}
|
||||
|
||||
// extract archives referenced by these pkgs
|
||||
for _, pkg := range pkgList.Items {
|
||||
if pkg.Spec.Deployment.URL != "" {
|
||||
archiveID, err = getQueryParamValue(pkg.Spec.Deployment.URL, "id")
|
||||
if err != nil {
|
||||
pruner.logger.Error("error extracting value of archiveID from deployment url",
|
||||
zap.Error(err),
|
||||
zap.String("url", pkg.Spec.Deployment.URL))
|
||||
return
|
||||
}
|
||||
archivesRefByPkgs = append(archivesRefByPkgs, archiveID)
|
||||
}
|
||||
if pkg.Spec.Source.URL != "" {
|
||||
archiveID, err = getQueryParamValue(pkg.Spec.Source.URL, "id")
|
||||
if err != nil {
|
||||
pruner.logger.Error("error extracting value of archiveID from source url",
|
||||
zap.Error(err),
|
||||
zap.String("url", pkg.Spec.Source.URL))
|
||||
return
|
||||
}
|
||||
archivesRefByPkgs = append(archivesRefByPkgs, archiveID)
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Импорты** — удалить `"github.com/fission/fission/pkg/utils"` (больше не используется).
|
||||
|
||||
## После правки
|
||||
|
||||
```bash
|
||||
cd ~/terra/fission-src
|
||||
go build ./pkg/storagesvc/... # проверить компиляцию
|
||||
|
||||
# пересобрать storagesvc образ и передеплоить
|
||||
docker build -t naeel/fission-storagesvc:<новый-тег> -f cmd/storagesvc/Dockerfile .
|
||||
docker push naeel/fission-storagesvc:<новый-тег>
|
||||
kubectl set image -n fission deploy/storagesvc storagesvc=naeel/fission-storagesvc:<новый-тег>
|
||||
kubectl rollout status -n fission deploy/storagesvc
|
||||
```
|
||||
Reference in New Issue
Block a user