v2.0.3: submodule update + Sonnet questions
This commit is contained in:
@@ -0,0 +1,70 @@
|
|||||||
|
# Вопрос для Sonnet — проблема первого upload (без ссылок на файлы)
|
||||||
|
|
||||||
|
## Ситуация
|
||||||
|
|
||||||
|
Мигрировали сервис "Сверка договоров" с ВМ на Flask (managed Python, Штурвал).
|
||||||
|
Всё работает: классификация LLM, парсинг, группы, сравнение через SSE.
|
||||||
|
НО: **первый файл при upload из браузера падает с ERR_CONNECTION_RESET**.
|
||||||
|
|
||||||
|
Та же проблема прямо сейчас на втором сервисе — drhider (Обфускация документов).
|
||||||
|
Вчера (14 июля) drhider работал, сегодня (15 июля) — оба сервиса сломаны одинаково.
|
||||||
|
|
||||||
|
## Симптомы
|
||||||
|
|
||||||
|
- **Браузер**: первый POST с файлом (~63KB) зависает на 100% прогресса, ответ не приходит
|
||||||
|
- **curl с ВМ (5.172.178.213)**: 5/5 upload успешно, ~80-100ms каждый
|
||||||
|
- **Затрагивает оба сервиса**: contractor и drhider
|
||||||
|
- **Признак**: ERR_CONNECTION_RESET в Chrome/Electron
|
||||||
|
|
||||||
|
## Что проверено (инфраструктура)
|
||||||
|
|
||||||
|
Cilium MTU: 1400
|
||||||
|
Ingress (shturval-ingress-controller, nginx):
|
||||||
|
keep-alive: 75
|
||||||
|
use-http2: false
|
||||||
|
proxy-body-size: 1024m
|
||||||
|
client-body-timeout: 60
|
||||||
|
client-header-timeout: 30
|
||||||
|
Ingress-поды: 2/2 Ready, 1/1 Running
|
||||||
|
Образ ingress: r.shturval.tech/ingress-nginx/controller:v1.12.6
|
||||||
|
|
||||||
|
Размещение подов сейчас:
|
||||||
|
Ingress: control-plane (172.16.0.73) + workers-v8zq4 (172.16.3.149)
|
||||||
|
Contractor: workers-6f74n (172.16.1.182)
|
||||||
|
Drhider: workers-6f74n (172.16.1.99)
|
||||||
|
|
||||||
|
Кластер: 4 ноды (3 worker + 1 control-plane), Cilium с Geneve-энкапсуляцией, kube-vip.
|
||||||
|
|
||||||
|
## Что проверено (код)
|
||||||
|
|
||||||
|
- В JS добавлен warmup fetch('/health') при загрузке страницы
|
||||||
|
- Flask no_cache after_request (Cache-Control: no-cache)
|
||||||
|
- app.run(threaded=True)
|
||||||
|
|
||||||
|
## Хронология
|
||||||
|
|
||||||
|
- 13 июля: Helm ingress revision 7 — drhider работал
|
||||||
|
- 15 июля 02:00 UTC: Helm upgrade → revision 8 — сбросил ingress ConfigMap на дефолты
|
||||||
|
(keep-alive: 10, body-size: 8m, client-body-timeout: 10, client-header-timeout: 10)
|
||||||
|
- 15 июля ~08:00 UTC: патч ConfigMap обратно (keep-alive: 75, etc.) + kubectl rollout restart ingress
|
||||||
|
- После патча: curl работает, браузер — нет
|
||||||
|
- Helm values ИДЕНТИЧНЫ между revision 7 (рабочей) и 8 (сломанной):
|
||||||
|
```
|
||||||
|
controller:
|
||||||
|
hostPort.enabled: true
|
||||||
|
replicaCount: 2
|
||||||
|
service.type: LoadBalancer
|
||||||
|
```
|
||||||
|
|
||||||
|
## Что ещё
|
||||||
|
|
||||||
|
- drhider проходил эту проблему 14 июля — есть документ PROBLEM-AND-SOLUTION.md
|
||||||
|
Фиксы оттуда ВСЕ применены: MTU 1400, keep-alive 75, use-http2 false, warmup, proxy-body-size 1024m
|
||||||
|
- Там же сказано: даже после всех фиксов "5× POST 63KB | 4× OK, 1× ABORTED" — 20% отказов
|
||||||
|
|
||||||
|
## Вопрос
|
||||||
|
|
||||||
|
1. Почему после Helm upgrade (revision 7→8) браузерные upload перестали работать,
|
||||||
|
если все значения ConfigMap восстановлены вручную до прежних?
|
||||||
|
2. Что ещё мог изменить Helm upgrade кроме ConfigMap?
|
||||||
|
3. Как добиться 100% надёжности первого upload из браузера?
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
# Вопрос для Sonnet v2 — первый upload браузер vs curl
|
||||||
|
|
||||||
|
## Ситуация
|
||||||
|
|
||||||
|
Мигрировали сервис на Flask (managed Python, Штурвал). Всё работает кроме ОДНОГО:
|
||||||
|
**первый POST с файлом из браузера зависает на 100% и не завершается.**
|
||||||
|
|
||||||
|
## Ключевые факты (проверено, не врать)
|
||||||
|
|
||||||
|
1. **Curl работает, браузер — нет. С ОДНОЙ машины.**
|
||||||
|
- curl: 20/20, ~80ms каждый
|
||||||
|
- Браузер (Chrome/Electron): первый файл → XHR 100% → завис намертво
|
||||||
|
- Остальные файлы даже не начинают загружаться (первый блокирует очередь)
|
||||||
|
|
||||||
|
2. **Браузерный запрос НЕ доходит до nginx.**
|
||||||
|
- `kubectl logs ingress` показывает ТОЛЬКО curl-запросы
|
||||||
|
- Браузерный XHR: прогресс 100% (данные ушли), но ответ не приходит
|
||||||
|
- onerror НЕ срабатывает (не RST, не таймаут — просто тишина)
|
||||||
|
- xhr.timeout = 180000 (3 минуты)
|
||||||
|
|
||||||
|
3. **Инфраструктура проверена:**
|
||||||
|
- Cilium MTU: 1400 (underlay 1450, Geneve -50 = pod 1400)
|
||||||
|
- Ingress ConfigMap: keep-alive 75, client-body-timeout 60, client-header-timeout 30, proxy-body-size 1024m
|
||||||
|
- Ingress аннотации: proxy-body-size 1024m, proxy-connect-timeout 120, proxy-read-timeout 600, proxy-send-timeout 600
|
||||||
|
- HTTP/2: выключен (use-http2 false)
|
||||||
|
- Cilium: 4/4 ноды reachable, tunnel-protocol geneve
|
||||||
|
- kube-vip: DaemonSet на всех 4 нодах, все Running
|
||||||
|
- Ingress поды: 2/2 Ready, образ v1.12.6
|
||||||
|
- Helm upgrade 15 июля 02:00 UTC НЕ менял значения (revision 7 и 8 идентичны)
|
||||||
|
|
||||||
|
4. **Код:**
|
||||||
|
- warmup `fetch('/health')` при загрузке страницы — есть
|
||||||
|
- Flask no_cache (Cache-Control: no-cache) — есть
|
||||||
|
- app.run(threaded=True)
|
||||||
|
|
||||||
|
5. **Затрагивает ОБА сервиса:** и contractor, и drhider (который работал вчера)
|
||||||
|
|
||||||
|
## Вопрос
|
||||||
|
|
||||||
|
Почему curl (20/20) работает, а браузерный XHR (0/1) — нет, при том что ОБА с одной машины через один и тот же интернет-канал?
|
||||||
+1
-1
Submodule contracts-flask updated: 9e22182f9a...1bd62a51ef
Reference in New Issue
Block a user