tasks(owncloud-vds-deploy): close 🟢 — 26 GB live + 60s timeout finding
Import complete: 25 044 objs / 26 GB. 99.97% залито rclone'ом (22.2 GB за ~2.5 ч), оставшиеся 6 файлов (4.04 GB) — 4× .pat ~221 MB + 2× .seospider 1.55+1.7 GB — упали с 502/500 на каждом rclone PUT из-за 60-секундного HTTP timeout в reva v2.27 datagateway (hardcoded в Go http.Client.Timeout, не env-configurable). Workaround: VDS-side curl PUT loopback через throwaway sftp key. Local network 142 MB/s → 4.04 GB за 28 секунд, все PROPFIND size match. Wiki: §Gotcha 5 в concepts/ocis-on-vds-deploy-recipe.md документирует finding + recipe для workaround. Traefik buffering middleware пробован, не помог (likely vulcand/oxy buffer bug на больших телах) — откатил. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -173,6 +173,73 @@ ssh vitya@89.253.255.94 "sed -i '\\|/opt/stacks/owncloud|d' /opt/stacks/backup/s
|
||||
pass rm owncloud/admin-password owncloud/user-vitya && pass git push
|
||||
```
|
||||
|
||||
## Gotcha 5: 60-секундный timeout на uploads через slow uplink
|
||||
|
||||
**Симптом:** rclone PUT любого файла, который не успевает залиться за 60 секунд через
|
||||
клиентский uplink, падает с 502 (no buffering) или 500 (с buffering middleware).
|
||||
Пороги при разной скорости uplink:
|
||||
|
||||
| Uplink | Cap |
|
||||
|---|---|
|
||||
| 3 MiB/s | ~180 MB |
|
||||
| 10 MiB/s | ~600 MB |
|
||||
| 50 MiB/s | ~3 GB |
|
||||
|
||||
В нашем кейсе (rclone 3.35 MiB/s) — упали все файлы ≥221 MB (4× .pat по 221-222 MB,
|
||||
508 MB zip, 1.55 GB + 1.7 GB seospider).
|
||||
|
||||
**Где сидит 60s:** не traefik (default unlimited). Не на oCIS layer per env-var
|
||||
(нет конфигурируемого ключа). Hardcoded где-то в HTTP stack — кандидаты:
|
||||
|
||||
- Go `http.Client.Timeout` в reva v2.27 datagateway.go:200 (видно в логах
|
||||
oCIS: `Put "http://localhost:9158/data/simple/...": context canceled`,
|
||||
`time_ns:59944479090` = 59.94s)
|
||||
- rclone-side `http.Client.Timeout` (default Go = no timeout, но в библиотеке
|
||||
WebDAV может быть явно установлен)
|
||||
- HTTP/2 default stream timeout
|
||||
|
||||
Bumped via env-var не починить — закопано в коде reva. Apgrade oCIS image
|
||||
до новой версии может помочь (newer reva имеет настраиваемый timeout) — defer.
|
||||
|
||||
**Что НЕ помогло:**
|
||||
- `traefik.http.middlewares.<name>.buffering.maxRequestBodyBytes=0` +
|
||||
`memRequestBodyBytes=1048576` — буферинг сам выдаёт 500 на 60s mark
|
||||
(`backend_url="-"` в access log = traefik так и не доходит до backend).
|
||||
Возможно ошибка в `vulcand/oxy` buffer на больших телах. Не разбирался —
|
||||
workaround ниже проще.
|
||||
|
||||
**Workaround: VDS-side direct upload.**
|
||||
|
||||
Когда у нескольких файлов upload-time > 60s через клиентский uplink:
|
||||
|
||||
1. **scp с throwaway-key с restricted authorized_keys на VDS:** генерим одноразовый
|
||||
ed25519 на VDS, append'им как `restrict,command="internal-sftp" <pub>`
|
||||
в `~vitya/.ssh/authorized_keys` (sftp-only, no shell, no port forwards), private
|
||||
отдаём агенту на slow-uplink машине. Cleanup ключа после.
|
||||
|
||||
2. **Агент `sftp -i <key> -b <batch>` пушит файлы в `/tmp/oc-import/`** на VDS.
|
||||
SFTP через ssh не уязвим к 60s timeout — длинная сессия с keep-alive.
|
||||
|
||||
3. **C VDS-стороны: `curl -T <local-file> <ocis-url>` loopback'ом.**
|
||||
Local network = >100 MB/s → 1.7 GB файл за 10 секунд, ≪ 60s timeout window.
|
||||
PUT через traefik websecure (https://owncloud.kzntsv.site/dav/files/<user>/<path>)
|
||||
с basic auth admin/user. URL-encode Cyrillic / spaces в path. Pattern:
|
||||
|
||||
```bash
|
||||
ENC=$(python3 -c "import urllib.parse,sys; print('/'.join(urllib.parse.quote(p) for p in sys.argv[1].split('/')))" "$REMOTE_PATH")
|
||||
curl -sS -u "vitya:$PWD" -T "$SRC" "https://owncloud.kzntsv.site/dav/files/vitya/${ENC}"
|
||||
```
|
||||
→ HTTP 201 Created.
|
||||
|
||||
4. **Verify через PROPFIND** — `<oc:size>` или `<d:getcontentlength>` должен
|
||||
match'ить `stat -c %s` source.
|
||||
|
||||
5. **Cleanup:** `rm -rf /tmp/oc-import/`, remove throwaway-key line из
|
||||
authorized_keys.
|
||||
|
||||
В нашем кейсе для 6 файлов / 4.04 GB local PUT cycle занял ~28 секунд total
|
||||
(0.5-10s per file). vs rclone failed после ~5 минут на каждый retry × 5 retries × 6 файлов = безуспешно вечность.
|
||||
|
||||
## Related
|
||||
|
||||
- [[admin-infra-project]] — общий context для admin-infra repo
|
||||
|
||||
@@ -15,3 +15,5 @@ Append-only log of wiki operations (ingests, promotions, lints, migrations).
|
||||
## [2026-05-21] regen | index.md catalog refresh after subtree import
|
||||
|
||||
## [2026-05-21] ingest | concepts/ocis-on-vds-deploy-recipe — oCIS deploy recipe + gotchas (UID mismatch, PROXY_TLS, PROXY_ENABLE_BASIC_AUTH, LibreGraph user-create); updated entities/vds-kzntsv (added owncloud row to stack/hostnames/file-layout); source: .tasks/owncloud-vds-deploy.md
|
||||
|
||||
## [2026-05-22] update | concepts/ocis-on-vds-deploy-recipe — Gotcha 5: 60s HTTP timeout caps slow-uplink uploads at ~200MB on 3 MiB/s link; traefik buffering NOT the fix (500 from oxy buffer); workaround = VDS-side curl PUT loopback via throwaway sftp key. Source: .tasks/owncloud-vds-deploy.md close-note.
|
||||
|
||||
Reference in New Issue
Block a user