Вызов транзакций

Транзакции вызова используются для вызова одной или нескольких команд кластера на целевом узле. Это похоже на вызовы удалённых процедур, выполняемые для команды, определённой в кластере.

Аналогично транзакциям записи, транзакции вызова поддерживают как синхронизированные, так и несинхронизированные транзакции. Подробнее о синхронизированных транзакциях см. в разделе « Синхронизированные и несинхронизированные действия» .

Несинхронизированная транзакция вызова

Последовательность операций несинхронизированной транзакции вызова
Рисунок 1: Несинхронизированная транзакция вызова

Вызов запроса действия

Направление: Инициатор -> Цель

Подобно действию запроса на чтение и действию запроса на запись, в этом действии Инициатор предоставляет Цели:

  • Запросы на вызов : список путей к командам кластера, а также необязательные аргументы команд, называемые полями команд .
  • Запрос по времени: флаг, указывающий, является ли это действие частью транзакции вызова по времени.
  • Подавить ответ: флаг, указывающий, следует ли подавлять действие «Вызов ответа».
  • Идентификатор взаимодействия : целое число, используемое для сопоставления действия запроса вызова с действием ответа вызова.

Вызов ответного действия

Направление: Цель -> Инициатор

После того, как цель получит действие запроса Invoke, она завершит транзакцию действием ответа Invoke, которое содержит:

  • Ответы на вызовы : список ответов на команды или статусов для каждого отправленного запроса на вызов.
  • Идентификатор взаимодействия: целое число, используемое для сопоставления действия «Ответ на вызов» с действием «Запрос на вызов».

Ограничения на несинхронизированный вызов

Действие «Invoke Request Action» может быть групповым, но в этом случае необходимо установить флаг «Suppress Response» . Это связано с тем, что в противном случае сеть может быть перегружена одновременными ответами от всех участников группы.

Для реализации этого поведения путь, используемый в списке запросов Invoke, может содержать группы или подстановочные знаки, но только в поле Endpoint. Более того, если действие — groupcast, транзакция завершается без ответа.

Транзакции с заданным временем вызова

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

Последовательность операций транзакции Timed Invoke
Рисунок 2: Транзакция с заданным временем вызова

Запрос по времени

Направление: Инициатор -> Цель

Инициатор начинает транзакцию, отправляя это действие, которое содержит:

  • Тайм-аут : сколько миллисекунд эта транзакция может оставаться открытой. В течение этого времени следующее действие, отправленное Инициатором, будет считаться действительным.

После получения действия «Timed Request Action» Целевая сторона должна подтвердить его действием «Status Response Action». После получения действия «Status Response Action» с сообщением об отсутствии ошибок Инициатор отправляет действие «Invoke Request Action».

Вызов запроса действия

То же, что и ранее описанное действие «Вызов запроса» .

Вызов ответного действия

То же, что и ранее описанное действие Invoke Response .

Ограничения по времени вызова

Все команды вызова могут быть вызваны в режиме Timed Interaction. Действия Timed Request, Invoke Request и Invoke Response доступны только в Unicast и, следовательно, не могут использоваться в качестве групповой рассылки в Timed Invoke Transactions.

Действие Invoke Request поддерживает использование путей с группами, а также подстановочных знаков, но действие Invoke Response не поддерживает использование подстановочных знаков.