doc: Tests 3-7, 8 стресс-функций, план Go runtime v0.1.1 + pgx/v5
This commit is contained in:
+84
-1
@@ -1,6 +1,89 @@
|
||||
# Прогресс разработки
|
||||
|
||||
Последнее обновление: 2026-03-19 14:00
|
||||
Последнее обновление: 2026-03-19 21:00
|
||||
|
||||
---
|
||||
|
||||
## 2026-03-19 — Go runtime v0.1.1: pgx/v5 + stress-go-pgstorm ⏳ В РАБОТЕ
|
||||
|
||||
### Цель
|
||||
Новая функция `stress-go-pgstorm` — Go код со 100 горутинами, которые ~10 минут долбят
|
||||
PostgreSQL напрямую через `pgxpool`. Проверяем: Go runtime под нагрузкой, connection pool
|
||||
под конкурентными запросами, устойчивость кластера.
|
||||
|
||||
### Задачи
|
||||
|
||||
| # | Задача | Статус | Заметки |
|
||||
|---|--------|--------|---------|
|
||||
| 1 | `runtimes/go1.23/go.mod` — добавить `pgx/v5 v5.7.2` | ✅ | go mod tidy на remote, go.sum сгенерирован (28 строк) |
|
||||
| 2 | `runtimes/go1.23/go.sum` — создан | ✅ | Все indirect deps: pgpassfile, pgservicefile, puddle/v2, crypto, sync, text |
|
||||
| 3 | `runtimes/go1.23/Dockerfile` — добавить `go mod download` | ⏳ | |
|
||||
| 4 | Собрать `naeel/sless-runtime-go1.23:v0.1.1`, запушить | ⏳ | |
|
||||
| 5 | `internal/builder/context.go` — обновить тег `go1.23` → v0.1.1 | ⏳ | |
|
||||
| 6 | Пересобрать оператор `v0.1.39`, задеплоить | ⏳ | |
|
||||
| 7 | `code/stress-go-pgstorm/handler.go` — горутины + pgxpool | ⏳ | |
|
||||
| 8 | `resources.tf` — новая функция + trigger | ⏳ | |
|
||||
| 9 | `terraform apply`, тест | ⏳ | |
|
||||
| 10 | Коммит | ⏳ | |
|
||||
|
||||
### Архитектура функции stress-go-pgstorm
|
||||
|
||||
```
|
||||
Handle(event) → запускает N горутин (default 100)
|
||||
каждая горутина в цикле duration_sec (default 600):
|
||||
- случайная задержка 0-500ms
|
||||
- чередующиеся операции: INSERT / SELECT COUNT / SELECT MAX
|
||||
- логирует ошибки, считает ok/err
|
||||
финал → {workers, duration_sec, total_ops, ok_ops, err_ops, ops_per_sec}
|
||||
pgxpool.New() — connection pool, MaxConns=20
|
||||
env: PGHOST, PGPORT, PGDATABASE, PGUSER, PGPASSWORD, PGSSLMODE
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2026-03-19 — Tests 3-7: E2E прогон POSTGRES + 8 стресс-функций
|
||||
|
||||
### Tests 3-7
|
||||
|
||||
| Тест | Действие | Результат |
|
||||
|------|----------|-----------|
|
||||
| Test 3 | `table_rw.py`: добавлен `version: v2-with-hostname`, `host: socket.gethostname()` | ✅ Terraform apply, функция пересобрана |
|
||||
| Test 4 | `pg_info.js`: добавлен `code_version: v2-agent-test` | ✅ code_hash изменился, вернул `{"code_version":"v2-agent-test"}` |
|
||||
| Test 5 | Удалить trigger → 404 → пересоздать → работает | ✅ |
|
||||
| Test 6 | Удалить function + trigger → 404 → пересоздать (rebuild 46s) → работает | ✅ |
|
||||
| Test 7 | Новая функция `pg-stats` (Python): version, total_rows → протестирована → удалена | ✅ `{"version":"v1-test7","total_rows":3}` |
|
||||
|
||||
### 8 стресс-функций (коммит `014b99e`)
|
||||
|
||||
Задеплоены и прогнаны дважды через `stress_test.sh` (3 раунда).
|
||||
После crash-тестов все 8 подов: `Running`, 0 restarts.
|
||||
|
||||
| # | Функция | Runtime | Что проверяет | Результат |
|
||||
|---|---------|---------|---------------|-----------|
|
||||
| 1 | `stress-slow` | Python | sleep 3-N сек | ✅ `{"slept_sec":3}` |
|
||||
| 2 | `stress-bigloop` | Python | CPU n=2M | ✅ 0.31s |
|
||||
| 3 | `stress-divzero` | Python | ZeroDivisionError crash | ✅ pod restart → при d=7: `{"result":6.0}` |
|
||||
| 4 | `stress-writer` | Python | batch INSERT в PG | ✅ +3/+10 строк |
|
||||
| 5 | `stress-go-fast` | Go | factorial+fib без deps | ✅ factorial(20), fib(20) |
|
||||
| 6 | `stress-go-nil` | Go | nil pointer panic | ✅ pod restart → при crash=false: ok |
|
||||
| 7 | `stress-js-async` | NodeJS | 3 PG запроса Promise.all | ✅ version/count/max_id |
|
||||
| 8 | `stress-js-badenv` | NodeJS | TypeError (pod жив, HTTP 500) | ✅ нет restart |
|
||||
|
||||
**Итого в таблице после двух прогонов: 32 строки.**
|
||||
|
||||
### Поведение crash-функций
|
||||
|
||||
- `stress-divzero` / `stress-go-nil`: **pod restart** при краше (EOF на первый запрос после падения) — нормальное k8s поведение, runtime процесс умирает целиком
|
||||
- `stress-js-badenv`: **HTTP 500 без restart** — NodeJS поймал TypeError внутри async handler, pod остался жив
|
||||
- Это различие задокументировано: Python/Go crash = process exit, NodeJS crash = unhandled rejection в async = 500
|
||||
|
||||
### git
|
||||
|
||||
- Бинарник `event-dispatcher` (50MB) удалён из истории через `git reset --soft HEAD~2`
|
||||
- Добавлен в `.gitignore`
|
||||
- Force push: `d879817` → `014b99e`
|
||||
|
||||
---
|
||||
|
||||
## 2026-03-19 — event-trigger refactor (ветка feat/event-trigger-refactor)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user