Skip to content

Commit

Permalink
Merge pull request #38 from petrkozorezov/MG-15/ft/update_mg_proto
Browse files Browse the repository at this point in the history
Mg 15/ft/update mg proto
  • Loading branch information
petrkozorezov authored Jul 22, 2016
2 parents cdbb383 + e34411f commit 7cb61d1
Showing 1 changed file with 69 additions and 17 deletions.
86 changes: 69 additions & 17 deletions proto/state_processing.thrift
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ namespace java com.rbkmoney.damsel.state_processing

exception EventNotFound {}
exception MachineNotFound {}
exception MachineAlreadyExists {}
exception MachineFailed {}

typedef binary EventBody;
Expand All @@ -36,7 +37,38 @@ struct Event {
* Сложное состояние, выраженное в виде упорядоченного набора событий
* процессора.
*/
typedef list<Event> History;
struct History {
/** Сами события */
1: list<Event> events
/** Условия выборки, по которым события были получены. */
2: HistoryRange range
}

/**
* Контекст автомата.
* Основная его идея в том, что в него можно помещать некоторую ассоциированную информацию
* (например в него можно положить свёрнутый из эвентов стейт).
*/
typedef binary Context;

/**
* Представление машины, для последующей работы с ней.
*/
struct Machine {
1: History history
2: Context context
}

/**
* Структура для описания какие конкретно поля нужны в машине при её получении.
* Она нужна, по сути, для оптимизации, чтобы каждый раз не со всеми данными работать.
*/
struct MachineQuery {
/** Какие эвенты из истории нужны */
1: HistoryRange range
/** Нужен ли контекст */
2: bool include_context
}

/**
* Желаемое действие, продукт перехода в новое состояние.
Expand All @@ -47,8 +79,12 @@ typedef list<Event> History;
* полей будет интерпретировано буквально, как отсутствие желаемых действий.
*/
struct ComplexAction {
1: optional SetTimerAction set_timer;
2: optional TagAction tag;
1: optional SetTimerAction set_timer;
2: optional TagAction tag;
3: optional UpdateContextAction update_context;
// TODO
// 4: optional TrimHistoryAction trim_history;
// 5: optional DropMachineAction drop_machine;
}

/**
Expand Down Expand Up @@ -83,6 +119,15 @@ struct TagAction {
1: required base.Tag tag;
}

/**
* Действие обновления связанного с процессом автомата контекста.
* На все последующие запросы в контексте придёт это значение, до его следующего обновления.
*/
struct UpdateContextAction {
/** Контекст для обновления */
1: required Context context;
}

/**
* Ссылка, уникально определяющая процесс автомата.
*/
Expand All @@ -108,8 +153,8 @@ typedef binary CallResponse;
* Набор данных для обработки внешнего вызова.
*/
struct CallArgs {
1: required Call call; /** Данные вызова */
2: required History history; /** История автомата */
1: required Call call; /** Данные вызова */
2: required Machine machine; /** Машина, которой пришел call */
}

/**
Expand Down Expand Up @@ -164,7 +209,7 @@ struct RepairSignal {
*/
struct SignalArgs {
1: required Signal signal; /** Поступивший сигнал */
2: required History history; /** История автомата */
2: required Machine machine; /** Машина, которой пришел сигнал */
}

/**
Expand Down Expand Up @@ -203,9 +248,10 @@ struct Args {
1: required binary arg;
}

/** Результат запуска процесса автомата. */
struct StartResult {
1: required base.ID id;

enum Direction {
forward
backward
}

/**
Expand Down Expand Up @@ -234,6 +280,11 @@ struct HistoryRange {
* был достигнут конец текущей истории.
*/
2: optional i32 limit

/**
* Направление истории, по-умолчанию вперёд.
*/
3: optional Direction direction = Direction.forward
}

/**
Expand All @@ -251,9 +302,10 @@ struct HistoryRange {
service Automaton {

/**
* Запустить новый процесс автомата.
* Запустить новый процесс автомата с заданным ID.
* Если машина с таким ID уже существует, то кинется иключение MachineAlreadyExists.
*/
StartResult start (1: Args a) throws ();
void start (1: base.ID id, 2: Args a) throws (1: MachineAlreadyExists ex1);

/**
* Уничтожить определённый процесс автомата.
Expand All @@ -265,14 +317,14 @@ service Automaton {
* Попытаться перевести определённый процесс автомата из ошибочного
* состояния в штатное и продолжить его исполнение.
*/
void repair (1: Reference ref, 2: Args a)
throws (1: MachineNotFound ex1, 2: MachineFailed ex2);
void repair (1: Reference ref, 2: Args a, 3: MachineQuery mq)
throws (1: MachineNotFound ex1, 2: MachineFailed ex2, 3: EventNotFound ex3);

/**
* Совершить вызов и дождаться на него ответа.
*/
CallResponse call (1: Reference ref, 2: Call c)
throws (1: MachineNotFound ex1, 2: MachineFailed ex2);
CallResponse call (1: Reference ref, 2: Call c, 3: MachineQuery mq)
throws (1: MachineNotFound ex1, 2: MachineFailed ex2, 3: EventNotFound ex3);

/**
* Метод возвращает список событий (историю) машины ref
Expand All @@ -282,7 +334,7 @@ service Automaton {
* раньше тех, которые располагаются в конце.
*/

History getHistory (1: Reference ref, 2: HistoryRange range)
Machine get (1: Reference ref, 2: MachineQuery mq)
throws (1: MachineNotFound ex1, 2: EventNotFound ex2);
}

Expand Down Expand Up @@ -310,4 +362,4 @@ service EventSink {
*/
base.EventID GetLastEventID ()
throws (1: NoLastEvent ex1);
}
}

0 comments on commit 7cb61d1

Please sign in to comment.