feat(core): modifierDesiredEqualsCurrent + RunInstanceOperationUniversalByIdempotent + RunOperationByCodeIdempotent
This commit is contained in:
@@ -139,6 +139,26 @@ func RunOperationByCodeWithTimeout(ctx context.Context, client *core.UniversalCl
|
||||
return client.RunInstanceOperationUniversalByCode(ctxWithTimeout, instanceID, operation, params)
|
||||
}
|
||||
|
||||
// RunOperationByCodeIdempotent — то же, что RunOperationByCodeWithTimeout, но
|
||||
// с idempotency pre-check (desired==current → skip run). Для модификаторов
|
||||
// с idempotency: check_before_run.
|
||||
func RunOperationByCodeIdempotent(ctx context.Context, client *core.UniversalClient, instanceID string, operation string, params map[string]string, operationTimeout string) error {
|
||||
if strings.TrimSpace(instanceID) == "" {
|
||||
return fmt.Errorf("missing instance id for operation")
|
||||
}
|
||||
if client == nil {
|
||||
return fmt.Errorf("missing client for operation")
|
||||
}
|
||||
unlock := client.LockInstance(instanceID)
|
||||
defer unlock()
|
||||
|
||||
ctxWithTimeout, err := core.WithOperationTimeout(ctx, operationTimeout)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return client.RunInstanceOperationUniversalByIdempotent(ctxWithTimeout, instanceID, operation, params)
|
||||
}
|
||||
|
||||
func adoptExistingInstanceOnCreate(ctx context.Context, client *core.UniversalClient, serviceID int, displayName string, resumeIfExists bool, params map[int]string, existing *core.InstanceStateResponse) (string, error) {
|
||||
// Проверка: операция уже выполняется
|
||||
if existing.OperationIsInProgress || existing.OperationIsPending {
|
||||
|
||||
Reference in New Issue
Block a user