114 lines
4.1 KiB
Markdown
114 lines
4.1 KiB
Markdown
# 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
|
||
```
|