Перейти к основному содержимому

Ресурсы

Объявление возвращает хэндл​

Объявление ресурса — обычный вызов функции в пайплайне. Он возвращает хэндл немедленно, не блокируя; запись создаётся, а реальный ресурс сходится в фоне:

Выходы ресурса доступны только через Ready: первое чтение ждёт схождения, ошибка готовности валит ран в точке чтения. Неготовый ресурс невозможно использовать по построению. Кому нужна ошибка в руки — TryReady: та же операция, возвращающая ошибку значением вместо падения рана.

Запись живёт жизненным циклом​

За каждым ресурсом — ровно одна запись. Её фаза видна в любой момент:

Запись — живой процесс: пока ресурс существует, она периодически сверяет наблюдаемое состояние с желаемым. Исчезновение и расхождение — повод пересоздать или довести; что считать расхождением — знание ресурсной библиотеки.

У каждого ресурса один владелец​

Владелец — тот, вместе с кем ресурс умирает: другой ресурс, ран или стенд. Ровно один; по умолчанию — создавший ран. Владельцы образуют дерево: оно задаётся Parent и Children и меняется передачей:

Удаление владельца удаляет всё его поддерево, глубже — раньше: vm прежде подсети, подсеть прежде сети. Сиблинги — записи под одним владельцем — уходят одновременно: четыре vm под одной подсетью удаляются за время одной. Зависимость между записями — ребро владения; две записи, которые нельзя удалять одновременно, кладутся одна под другую. Отменённый или упавший ран — та же смерть: его поддерево уходит той же дорогой, и ран закрывается, как только поддерева нет: executor машины, чей агент уже не отвечает (vm только что удалена), собирается позже и ран не держит. Запись, чья декларация УПАЛА, закрыта, но объявленное под ней — нет: снос прогона обходит и закрытые записи прогона и удаляет всё, что под ними ещё живо, — машины под сетью, в которой отказало облако, не остаются работать.

Два принципа держатся везде:

  • Владение отдают — его не забирают. Передачу выполняет сторона текущего владельца; ничто не может присвоить ресурс себе.
  • Чужое нельзя ни обременить, ни отдать. Чужой ресурс можно присоединить — распознать и читать как любой хэндл, — но присоединённый ресурс не может быть родителем или ребёнком.

Пережить свой ран​

По умолчанию ресурсы рана умирают вместе с раном. Единственный способ пережить его — явная передача: другому ресурсу или стенду — постоянному владельцу, который есть у каждого пайплайна. Передача переносит ресурс вместе с поддеревом и может задать срок жизни — по его истечении сервер удаляет поддерево сам:

Без срока переданный ресурс живёт до явного удаления.

Команды stand accept, extend, release возвращают {"count": N} — число удерживаемых корней после команды. Полный список и сроки находятся в state.holdings: graphenectl get stand/<pipeline>. Ответы компактны: entity переносит последние 100 ответов через Continue-as-New. Holdings и сроки хранения сохраняются; полный state stand по-прежнему ограничен лимитом размера workflow payload в Temporal.