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
+2 -4
View File
@@ -155,12 +155,11 @@ func adoptExistingInstanceOnCreate(ctx context.Context, client *core.UniversalCl
case StateNotCreated:
// P0.2: авто-cleanup orphan-инстанса при adopt_existing_on_create=true.
unlock := client.LockInstance(existing.InstanceUid)
defer unlock()
if err := client.RunInstanceOperationUniversal(ctx, existing.InstanceUid, "delete", nil); err != nil {
unlock()
return "", fmt.Errorf("не удалось авто-удалить orphan-инстанс %s (статус: %s): %w. %s",
existing.InstanceUid, statusText, err, formatInstanceDetails(existing, serviceID, displayName))
}
unlock()
return client.CreateGenericInstanceUniversalV6(ctx, serviceID, displayName, params)
case StateRunning, StateRunningPending:
@@ -182,11 +181,10 @@ func adoptExistingInstanceOnCreate(ctx context.Context, client *core.UniversalCl
return "", fmt.Errorf("required params mismatch for resource_name %s: %s. %s", displayName, FormatRequiredParamMismatchMessage(mismatches), formatInstanceDetails(existing, serviceID, displayName))
}
unlock := client.LockInstance(existing.InstanceUid)
defer unlock()
if err := client.RunInstanceOperationUniversal(ctx, existing.InstanceUid, "resume", nil); err != nil {
unlock()
return "", err
}
unlock()
resumed, err := client.GetInstanceState(ctx, existing.InstanceUid)
if err != nil {
return "", err
@@ -113,7 +113,7 @@ func IsSubresourceAlreadyExistsError(err error) bool {
if msg == "" {
return false
}
markers := []string{"уже существует", "already exists", "duplicate", "conflict"}
markers := []string{"уже существует", "already exists", "already exist", "duplicate", "conflict", " exist"}
for _, marker := range markers {
if strings.Contains(msg, marker) {
return true