Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Mg 15/ft/update mg proto #38

Merged
merged 4 commits into from
Jul 22, 2016
Merged
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 = 1
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Нам же необязательно численные значения указывать, только лишняя смысловая нагрузка.

backward = 2
}

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

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

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Если по умолчанию, то ... = Direction.forward не хватает?

}

/**
Expand All @@ -248,12 +299,13 @@ struct HistoryRange {
* - если в процессе выполнения запроса машина перешла в некорректное состояние
* то метод выкинет исключение MachineFailed
*/
service Automaton {
service Automation {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А ты сознательно переименовал?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Нет :)


/**
* Запустить новый процесс автомата.
* Запустить новый процесс автомата с заданным 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)
void repair (1: Reference ref, 2: Args a, 3: MachineQuery mq)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А здесь не может быть EventNotFound?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Согласен, может.

throws (1: MachineNotFound ex1, 2: MachineFailed ex2);

/**
* Совершить вызов и дождаться на него ответа.
*/
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);
}
}