Menu

#213 Внутренний подпроцесс-транзакция (упрощенный)

Next_Release
closed
nobody
None
5
2018-04-26
2017-10-05
No

Для бота в параметрах бота под строкой "Последовательное выполнение" добавляем строку "Транзакционный", в которой есть галочка и количество минут таймаута. По дефолту галочка не стоит. Если поставить в "Транзакционный" галочку, то строка "Последовательное выполнение" становится не активной и в ней ставится галочка.

Для внутреннего подпроцесса надо добавить признак "Транзакция" (по умолчанию - False).
Если признак - False, то остается текущее поведение.
Если признак - True, то:

  1. Граница подпроцесса-композиции рисуется двойной линией (скриншот в приложении)
  2. Если в подпроцессе использвется бот, в настройках которого установлена галочка "Транзакционный", то после начала выполнения этим ботом какого-либо задания подпроцесса и до выхода всех точек управления из подпроцесса или срабатывания таймаута (установленного для данного бота), бот выполняет задания только из этого подпроцесса (т.е. конкетного подпроцесса конкретного экземпляра), остальные задания игнорирует.
  3. Если сработал таймаут, генерируется событие-ошибка, которое можно "поймать", присоединив к подпроцессу соответствующее событие. Блокирование остальных заданий бота снимается
  4. Если все точки управления ушли из подпроцесса-композиции, то блокирование заданий бота снимается.

Функциональность предполагается применять, например, для бота работы с внешним хранилищем, если надо прочитать записи из таблицы, найти максимальный номер записи, прибавить к нему единицу и с этим номером добавить в таблицу новую запись.

Одна из возможных реализаций:

Транзакционный бот где-то у себя хранит информацию, связан ли он сейчас с конкретной композицией конкретного экземпляра БП.
Если не связан, - то работает как обычный бот.

Если связан, то:

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

Если да, то проверяет, что задача пришла от композиции, с которой он связан. Если да, то выполняет задачу. Если нет, то игнорирует задачу, переходит к следующей.

1 Attachments

Discussion

  • Andrei Mikheev

    Andrei Mikheev - 2018-01-31
    • Description has changed:

    Diff:

    --- old
    +++ new
    @@ -11,5 +11,13 @@
    
     Функциональность предполагается применять, например, для бота работы с внешним хранилищем, если надо прочитать записи из таблицы, найти максимальный номер записи, прибавить к нему единицу и с этим номером добавить в таблицу новую запись.
    
    +Одна из возможных реализаций:
    
    +Транзакционный бот где-то у себя хранит информацию, связан ли он сейчас с конкретной композицией конкретного экземпляра БП.
    +Если не связан, - то работает как обычный бот.
    
    +Если связан, то:
    +
    +Получив любую задачу, проверяет, остались ли в композиции, с которой он связан, точки управления. Если нет, то "отвязывает" от себя композицию и выполняет задачу.
    +
    +Если да, то проверяет, что задача пришла от композиции, с которой он связан. Если да, то выполняет задачу. Если нет, то игнорирует задачу, переходит к следующей.
    
     
  • Andrei Mikheev

    Andrei Mikheev - 2018-01-31
    • Attachments has changed:

    Diff:

    --- old
    +++ new
    @@ -1 +0,0 @@
    -screen.png (89.1 kB; image/png)
    
     
  • Andrei Mikheev

    Andrei Mikheev - 2018-01-31
    • Attachments has changed:

    Diff:

    --- old
    +++ new
    @@ -0,0 +1 @@
    +screen.png (37.6 kB; image/png)
    
     
  • Dofs

    Dofs - 2018-04-26
    • status: open --> closed
    • Group: In Future --> Next_Release
     
MongoDB Logo MongoDB