v5.0.64: delete idempotency, duplicate adopt, defer unlock, exist marker

This commit is contained in:
“Naeel”
2026-07-07 10:08:50 +04:00
parent 4ac21d9367
commit d70bf5d171
12 changed files with 349 additions and 73 deletions
+46
View File
@@ -0,0 +1,46 @@
# Prompt for Opus — subresource duplicate/exist + state_out
## Файлы для анализа
Только эти:
- `/home/naeel/tf_provider/provider/internal/resources_core/subresource_guard.go` — ВЕСЬ
- `/home/naeel/tf_provider/generated/test/go/90_postgres_database_resource.go` — Create (строки 130-250)
- `/home/naeel/tf_provider/artifacts/output_inventory/running_suspended_output_fields_for_docs.json` — PostgreSQL (svc 90), строки 190-575
## Контекст
После повторного apply subresource `pg_user_5` упал:
```
Операция вернула duplicate/exist, но объект не найден в state_out
```
## Найденная причина
- PostgreSQL `state_out` НЕ содержит `databases` и `users` (там только `externalConnect, internalConnect, monitoring`)
- `SubresourceListKey("database")` → эвристика `name+"s"` → ищет ключ `"databases"` в state_out → `known=false`
- Create-обработка duplicate требует `known && found` для adopt → `known=false` → всегда падает
- Adopt subresource'а для PG **физически невозможен** через текущий механизм
## Конкретные вопросы
### Вопрос 1 (ПРИОРИТЕТ)
`subresource_guard.go``FindSubresourceInStateOut`:
- При `known=false` (ключа нет в state_out) — как должен вести себя duplicate/exist?
- Сейчас: AddError "Нарушена консистентность"
- Предлагаемое: доверять API-ошибке `already exists`, считать adopt успешным, вернуть существующий ID
- Верно? Или нужен другой подход?
### Вопрос 2
`SubresourceListKey` / `SubresourceIdentityKey` в `subresource_guard.go`:
- Эвристики `name+"s"` и special-map на 2 сервиса
- Нужен ли явный маппинг ключей из YAML/метаданных API вместо угадывания?
- Где в API взять реальные имена ключей state_out для каждого сервиса?
### Вопрос 3
Есть ли в API эндпоинты для прямого запроса списка subresource'ов (list_databases, list_users) — чтобы не полагаться на state_out?
### Вопрос 4
`IsSubresourceAlreadyExistsError`:
- Маркеры: `уже существует`, `already exists`, `duplicate`, `conflict`
- Достаточно? Нужно ли добавить `409` (HTTP status), `exist`, `already exist`?
## Формат ответа
На каждый вопрос: ДА/НЕТ + код (файл:строка) + конкретное исправление.
Не читай другие файлы.