docs: аудит lifecycle от Соннета — 2 крит. бага (HasError guard, not_created)
This commit is contained in:
@@ -279,3 +279,43 @@ type PostgresClusterConfigurationModel struct {
|
||||
|
||||
Подполя имеют `value_list` (например `replicas: [1,3,5,7]`, `version: ["17","16"]`).
|
||||
Генерация enum-валидаторов — на этом этапе не делать. Оставить на будущее.
|
||||
|
||||
---
|
||||
|
||||
## Блок 5. Аудит lifecycle-логики (Соннет, 2026-07-16)
|
||||
|
||||
**Вывод: база корректна, но есть 2 критичных бага.**
|
||||
|
||||
### 5.1 — ПРОБЛЕМА A: нет HasError()-guard в Create (КРИТИЧНО)
|
||||
|
||||
**Где:** `instance.go`, функция Create, строка ~260.
|
||||
|
||||
После вызова `resp.Diagnostics.Append(resources_core.CreateExistingResourceDiagnosticsWithDomainAndServices(...))`
|
||||
код сразу идёт к `CreateResourceWithTimeout` **без проверки `HasError()`**.
|
||||
|
||||
При hard-error (running без adopt, suspend без adopt, not created) побочный API-вызов
|
||||
всё равно выполнится — сайд-эффект уже случился.
|
||||
|
||||
**Как должно быть:** после append диагностик — `if resp.Diagnostics.HasError() { return }`.
|
||||
|
||||
### 5.2 — ПРОБЛЕМА B: not created → auto-delete+create (КРИТИЧНО)
|
||||
|
||||
**Где:** `resources_core/crud.go`, `adoptExistingInstanceOnCreate`.
|
||||
|
||||
Философия (раздел 8): `not created → hard error «проверьте ресурс в ЛК», без auto-create`.
|
||||
|
||||
Но `adoptExistingInstanceOnCreate` при статусе `StateNotCreated` **авто-удаляет orphan и создаёт заново**.
|
||||
В сочетании с Проблемой A этот destructive сайд-эффект может выполниться несмотря на ошибку в диагностиках.
|
||||
|
||||
**Как должно быть:** либо убрать ветку (следовать философии), либо развести `not created` и `orphaned`.
|
||||
|
||||
### 5.3 — Комментарий «returns warnings» (минор)
|
||||
|
||||
`CreateExistingResourceDiagnostics` комментирует «returns warnings», но делает `AddError`.
|
||||
Это корень путаницы с отсутствующим guard. Исправить комментарий.
|
||||
|
||||
### Рекомендация Соннета:
|
||||
|
||||
**Сначала закрыть A и B, потом продолжать SubParams.**
|
||||
Строить вложенные параметры поверх Create, который выполняет сайд-эффекты
|
||||
вопреки собственным диагностикам — рискованно.
|
||||
|
||||
Reference in New Issue
Block a user