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

Ресурсы

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

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

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

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

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

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

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

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

Удаление владельца удаляет всё его поддерево, глубже — раньше: vm прежде подсети, подсеть прежде сети. Отменённый или упавший ран — та же смерть: его поддерево уходит той же дорогой.

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

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

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

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

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