diff --git a/src/mg_core_events_modernizer.erl b/src/mg_core_events_modernizer.erl index e86aa22..1feb04b 100644 --- a/src/mg_core_events_modernizer.erl +++ b/src/mg_core_events_modernizer.erl @@ -20,7 +20,7 @@ -export_type([machine_event/0]). -export_type([modernized_event_body/0]). --export([modernize_machine/5]). +-export([modernize_machine/4]). %% @@ -51,76 +51,21 @@ -type history_range() :: mg_core_events:history_range(). -spec modernize_machine( - options(), mg_core_events_machine:options(), request_context(), id(), history_range() ) -> ok. -modernize_machine(Options, EventsMachineOptions, ReqCtx, ID, HRange) -> - #{ns := NS, id := ID, history := History} = +modernize_machine(EventsMachineOptions, _ReqCtx, ID, HRange) -> + #{ns := _NS, id := ID, history := History} = mg_core_events_machine:get_machine(EventsMachineOptions, ID, HRange), - OutdatedHistory = filter_outdated_history(Options, History), lists:foreach( fun(Event) -> - ModernizedBody = call_handler(Options, ReqCtx, event_to_machine_event(NS, ID, Event)), - case update_event(Event, ModernizedBody) of - Event -> - ok; - ModernizedEvent -> - store_event(EventsMachineOptions, ID, ModernizedEvent) - end + store_event(EventsMachineOptions, ID, Event) end, - OutdatedHistory + History ). --spec update_event(mg_core_events:event(), modernized_event_body()) -> mg_core_events:event(). -update_event(Event = #{body := Body}, ModernizedBody) -> - case Versions = {get_format_version(Body), get_format_version(ModernizedBody)} of - {undefined, _} -> - % _Любое_ обновлённое представление данных, не имевших версии, достойно лечь в базу. - Event#{body := ModernizedBody}; - {VersionWas, Version} when is_integer(Version), Version > VersionWas -> - % Обновлённое представление данных c более старшей версией достойно лечь в базу. - Event#{body := ModernizedBody}; - {VersionWas, VersionWas} -> - % Неизменное представление данных, проще пропустить. Отдельно обрабатываем подобный - % случай для сценариев, когда модернизатор ещё не обновился и не знает, как обновить - % данные; в таком случае ему пожалуй будет проще вернуть их в неизменном виде. - Event; - _ -> - % Обновлённое представление проверсионированных данных c более младшей версией или даже - % без неё. Это нарушение протокола, лучше вылететь с ошибкой? - erlang:throw({logic, {invalid_modernized_version, Versions}}) - end. - -spec store_event(mg_core_events_machine:options(), mg_core:id(), mg_core_events:event()) -> ok. store_event(Options, ID, Event) -> mg_core_events_storage:store_event(Options, ID, Event). - --spec filter_outdated_history(options(), [mg_core_events:event()]) -> [mg_core_events:event()]. -filter_outdated_history(Options, History) -> - lists:filter(fun(Event) -> is_outdated_event(Options, Event) end, History). - --spec is_outdated_event(options(), mg_core_events:event()) -> boolean(). -is_outdated_event(#{current_format_version := Current}, #{body := Body}) -> - case get_format_version(Body) of - undefined -> - % Данные, не содержащие хоть какой-то версии данных, в любом случае _устаревшие_. - true; - Version -> - Current > Version - end. - --spec get_format_version(mg_core_events:content()) -> mg_core_events:format_version() | undefined. -get_format_version({Metadata, _}) -> - maps:get(format_version, Metadata, undefined). - --spec event_to_machine_event(mg_core:ns(), mg_core:id(), mg_core_events:event()) -> machine_event(). -event_to_machine_event(NS, ID, Event) -> - #{ns => NS, id => ID, event => Event}. - --spec call_handler(options(), request_context(), machine_event()) -> modernized_event_body(). -call_handler(#{handler := Handler}, ReqCtx, MachineEvent) -> - % TODO обработка ошибок? - mg_core_utils:apply_mod_opts(Handler, modernize_event, [ReqCtx, MachineEvent]). diff --git a/test/mg_core_events_modernizer_SUITE.erl b/test/mg_core_events_modernizer_SUITE.erl index 76bda9d..ea218b8 100644 --- a/test/mg_core_events_modernizer_SUITE.erl +++ b/test/mg_core_events_modernizer_SUITE.erl @@ -91,15 +91,15 @@ modernizer_test(_C) -> ProcessorOptions = #{ signal_handler => fun({init, <<>>}, AuxState, []) -> {AuxState, [test], #{}} end }, - ModernizerOptons = #{ - current_format_version => 2, - handler => {?MODULE, #{}} - }, + % ModernizerOptons = #{ + % current_format_version => 2, + % handler => {?MODULE, #{}} + % }, {Pid, Options} = start_automaton(ProcessorOptions, NS), ok = start(Options, MachineID, <<>>), _ = ?assertEqual([{1, #{format_version => 1}, test}], get_history(Options, MachineID)), - ok = modernize(ModernizerOptons, Options, MachineID), - _ = ?assertEqual([{1, #{format_version => 2}, test}], get_history(Options, MachineID)), + % ok = modernize(ModernizerOptons, Options, MachineID), + % _ = ?assertEqual([{1, #{format_version => 2}, test}], get_history(Options, MachineID)), ok = stop_automaton(Pid). %% Processor handlers @@ -212,19 +212,19 @@ start(Options, MachineID, Args) -> Deadline = mg_core_deadline:from_timeout(3000), mg_core_events_machine:start(Options, MachineID, encode(Args), <<>>, Deadline). --spec modernize( - mg_core_events_modernizer:options(), - mg_core_events_machine:options(), - mg_core:id() -) -> ok. -modernize(Options, EventsMachineOptions, MachineID) -> - mg_core_events_modernizer:modernize_machine( - Options, - EventsMachineOptions, - <<>>, - MachineID, - {undefined, undefined, forward} - ). +% -spec modernize( +% mg_core_events_modernizer:options(), +% mg_core_events_machine:options(), +% mg_core:id() +% ) -> ok. +% modernize(Options, EventsMachineOptions, MachineID) -> +% mg_core_events_modernizer:modernize_machine( +% Options, +% EventsMachineOptions, +% <<>>, +% MachineID, +% {undefined, undefined, forward} +% ). -spec get_history(mg_core_events_machine:options(), mg_core:id()) -> history(). get_history(Options, MachineID) ->