Перейти к содержанию

SDK 0.3 · формат v2 · Совместимость с SDK

Параллельность и ресурсы ​

concurrency управляет ветками, допуском запусков и временным владением ресурсом. Параметры зависят от места применения.

Параметры ​

ПолеГде и для чегоПо умолчанию
limitДопуск запусков / веток / владельцев ресурса4 / 2 / 1
on_busyДля запусков и ресурса: ожидание или иная реакцияwait
supersession_keyЭквивалентность заменяемых запусковНе задано
branchesИменованные ветки steps + outputsДля параллельных веток
on_errorОшибки веток: fail или collectfail
resourceКлюч ресурса внутри аккаунтаДля резервирования
lifetimeВладение до конца участка (step) или запуска (run)step
protectedЗащита короткой внешней записиfalse
steps, outputsУчасток под резервом и его результатПустые
whenУсловие выполнения участка/ветвленияБез условия

Пример ​

YAMLДве независимые ветки
yaml
- id: parallel
  concurrency:
    limit: 2
    on_error: collect
    branches:
      products:
        steps:
          - id: fetch
            block: http
            params:
              url: "{inputs.products_url}"
        outputs:
          items: "{fetch.json}"
      prices:
        steps:
          - id: fetch
            block: http
            params:
              url: "{inputs.prices_url}"
        outputs:
          items: "{fetch.json}"

Ветки используют разные источники. Одинаковое внутреннее имя fetch не смешивает результаты.

Результат ​

Ветки: branches: {name: {status, output, error}}. Резерв: acquired, output; при пропуске — false, null. Допуск запусков задаёт порядок выполнения и не создаёт результат блока.

Поведение ​

Ветвление дожидается всех веток; ручное ожидание не считается ошибкой. Лимиты веток и запусков действуют одновременно. Для очередей и резервов нужно постоянное хранилище; SDK без него отказывает до действий.

Запуски workflow ​

YAMLПоля верхнего уровня workflow
yaml
concurrency:
  limit: 1
  on_busy: wait

limit=1 сериализует запуски. latest_waiting заменяет эквивалентную ожидающую работу, supersede также запрашивает остановку активной; оба требуют limit=1 и supersession_key.

Резервирование ​

YAMLЗанять ресурс до окончания запуска
yaml
- id: claim
  concurrency:
    resource: "{inputs.resource_key}"
    limit: 1
    lifetime: run
    on_busy: skip

При занятости: wait — ждать, skip — пропустить без действий и без заявки на ожидание, fail — ошибка. Пустой участок допустим только для lifetime=run.

Резерв сохраняется через согласование и перезапуск. Повторное получение своим запуском использует тот же резерв; после завершения он освобождается. Воркеры получают ресурс согласованно; разные limit одного ключа отклоняются. Внутри занятого участка можно получить только пустой резерв lifetime: run с on_busy: skip или fail, до начала защищённой записи. Вложенное ожидание запрещено; ключ не содержит секретов.

Например, временное владение изображением и постоянная отметка «уже использовано» — разные вещи: постоянная история хранится в данных приложения.

Защита записи ​

protected откладывает отмену на время короткой записи и сохранения результата. Согласование внутри участка запрещено. Если запись могла выполниться, ресурс остаётся на проверку вместо автоматического освобождения и повтора.