fix
This commit is contained in:
parent
b13122674e
commit
2aca3fff45
@ -45,6 +45,9 @@
|
|||||||
%%%% 主动推送的消息类型子分类, 需要返回值
|
%%%% 主动推送的消息类型子分类, 需要返回值
|
||||||
|
|
||||||
-define(PUSH_DEPLOY, 16#01).
|
-define(PUSH_DEPLOY, 16#01).
|
||||||
-define(PUSH_SERVICE_CONFIG, 16#02).
|
-define(PUSH_START_SERVICE, 16#02).
|
||||||
-define(PUSH_INVOKE, 16#03).
|
-define(PUSH_STOP_SERVICE, 16#03).
|
||||||
-define(PUSH_TASK_LOG, 16#04).
|
|
||||||
|
-define(PUSH_SERVICE_CONFIG, 16#04).
|
||||||
|
-define(PUSH_INVOKE, 16#05).
|
||||||
|
-define(PUSH_TASK_LOG, 16#05).
|
||||||
|
|||||||
@ -225,11 +225,37 @@ handle_info({server_push, PacketId, <<?PUSH_DEPLOY:8, DeployBin/binary>>}, State
|
|||||||
%% 短暂的等待,efka_inetd收到消息后就立即返回了
|
%% 短暂的等待,efka_inetd收到消息后就立即返回了
|
||||||
Reply = case efka_inetd:deploy(TaskId, ServiceId, TarUrl) of
|
Reply = case efka_inetd:deploy(TaskId, ServiceId, TarUrl) of
|
||||||
ok ->
|
ok ->
|
||||||
#async_call_reply{code = 1, message = <<"">>};
|
#async_call_reply{code = 1, result = <<"ok">>};
|
||||||
{error, Reason} when is_binary(Reason) ->
|
{error, Reason} when is_binary(Reason) ->
|
||||||
#async_call_reply{code = 0, message = Reason}
|
#async_call_reply{code = 0, message = Reason}
|
||||||
end,
|
end,
|
||||||
is_pid(TransportPid) andalso efka_transport:async_call_reply(TransportPid, PacketId, message_pb:encode_msg(Reply)),
|
efka_transport:async_call_reply(TransportPid, PacketId, message_pb:encode_msg(Reply)),
|
||||||
|
|
||||||
|
{noreply, State};
|
||||||
|
|
||||||
|
%% 启动微服务
|
||||||
|
handle_info({server_push, PacketId, <<?PUSH_START_SERVICE:8, ServiceId/binary>>}, State = #state{transport_pid = TransportPid}) ->
|
||||||
|
%% 短暂的等待,efka_inetd收到消息后就立即返回了
|
||||||
|
Reply = case efka_inetd:start_service(ServiceId) of
|
||||||
|
ok ->
|
||||||
|
#async_call_reply{code = 1, result = <<"ok">>};
|
||||||
|
{error, Reason} when is_binary(Reason) ->
|
||||||
|
#async_call_reply{code = 0, message = Reason}
|
||||||
|
end,
|
||||||
|
efka_transport:async_call_reply(TransportPid, PacketId, message_pb:encode_msg(Reply)),
|
||||||
|
|
||||||
|
{noreply, State};
|
||||||
|
|
||||||
|
%% 停止微服务
|
||||||
|
handle_info({server_push, PacketId, <<?PUSH_STOP_SERVICE:8, ServiceId/binary>>}, State = #state{transport_pid = TransportPid}) ->
|
||||||
|
%% 短暂的等待,efka_inetd收到消息后就立即返回了
|
||||||
|
Reply = case efka_inetd:stop_service(ServiceId) of
|
||||||
|
ok ->
|
||||||
|
#async_call_reply{code = 1, result = <<"ok">>};
|
||||||
|
{error, Reason} when is_binary(Reason) ->
|
||||||
|
#async_call_reply{code = 0, message = Reason}
|
||||||
|
end,
|
||||||
|
efka_transport:async_call_reply(TransportPid, PacketId, message_pb:encode_msg(Reply)),
|
||||||
|
|
||||||
{noreply, State};
|
{noreply, State};
|
||||||
|
|
||||||
@ -240,7 +266,7 @@ handle_info({server_push, PacketId, <<?PUSH_SERVICE_CONFIG:8, ConfigBin/binary>>
|
|||||||
case efka_service:get_pid(ServiceId) of
|
case efka_service:get_pid(ServiceId) of
|
||||||
undefined ->
|
undefined ->
|
||||||
Reply = #async_call_reply{code = 0, message = <<"service not run">>},
|
Reply = #async_call_reply{code = 0, message = <<"service not run">>},
|
||||||
is_pid(TransportPid) andalso efka_transport:async_call_reply(TransportPid, PacketId, message_pb:encode_msg(Reply)),
|
efka_transport:async_call_reply(TransportPid, PacketId, message_pb:encode_msg(Reply)),
|
||||||
{noreply, State};
|
{noreply, State};
|
||||||
ServicePid when is_pid(ServicePid) ->
|
ServicePid when is_pid(ServicePid) ->
|
||||||
Ref = make_ref(),
|
Ref = make_ref(),
|
||||||
|
|||||||
@ -176,8 +176,8 @@ delete_directory(Dir) when is_list(Dir) ->
|
|||||||
%% 解压文件到指定目录
|
%% 解压文件到指定目录
|
||||||
-spec tar_extract(string(), string()) -> ok | {error, term()}.
|
-spec tar_extract(string(), string()) -> ok | {error, term()}.
|
||||||
tar_extract(TarFile, TargetDir) when is_list(TarFile), is_list(TargetDir) ->
|
tar_extract(TarFile, TargetDir) when is_list(TarFile), is_list(TargetDir) ->
|
||||||
%% 判断文件的后缀名来判断
|
%% 判断文件的后缀名来判断, options: verbose
|
||||||
erl_tar:extract(TarFile, [compressed, {cwd, TargetDir}, verbose]).
|
erl_tar:extract(TarFile, [compressed, {cwd, TargetDir}]).
|
||||||
|
|
||||||
%% 下载文件
|
%% 下载文件
|
||||||
-spec download(Url :: string(), TargetDir :: string()) ->
|
-spec download(Url :: string(), TargetDir :: string()) ->
|
||||||
|
|||||||
@ -88,6 +88,8 @@ start_link(Name, ServiceId) when is_atom(Name), is_binary(ServiceId) ->
|
|||||||
{ok, State :: #state{}} | {ok, State :: #state{}, timeout() | hibernate} |
|
{ok, State :: #state{}} | {ok, State :: #state{}, timeout() | hibernate} |
|
||||||
{stop, Reason :: term()} | ignore).
|
{stop, Reason :: term()} | ignore).
|
||||||
init([ServiceId]) ->
|
init([ServiceId]) ->
|
||||||
|
%% supervisor进程通过exit(ChildPid, shutdown)调用的时候,确保terminate函数被调用
|
||||||
|
erlang:process_flag(trap_exit, true),
|
||||||
case service_model:get_service(ServiceId) of
|
case service_model:get_service(ServiceId) of
|
||||||
error ->
|
error ->
|
||||||
lager:notice("[efka_service] service_id: ~p, not found", [ServiceId]),
|
lager:notice("[efka_service] service_id: ~p, not found", [ServiceId]),
|
||||||
@ -189,7 +191,7 @@ handle_info({timeout, _, reboot_service}, State = #state{service_id = ServiceId,
|
|||||||
case efka_manifest:startup(Manifest) of
|
case efka_manifest:startup(Manifest) of
|
||||||
{ok, Port} ->
|
{ok, Port} ->
|
||||||
{os_pid, OSPid} = erlang:port_info(Port, os_pid),
|
{os_pid, OSPid} = erlang:port_info(Port, os_pid),
|
||||||
lager:debug("[efka_service] service_id: ~p, reboot success: ~p, port: ~p, os_pid: ~p", [ServiceId, Port, OSPid]),
|
lager:debug("[efka_service] service_id: ~p, reboot success, port: ~p, os_pid: ~p", [ServiceId, Port, OSPid]),
|
||||||
{noreply, State#state{port = Port, os_pid = OSPid}};
|
{noreply, State#state{port = Port, os_pid = OSPid}};
|
||||||
{error, Reason} ->
|
{error, Reason} ->
|
||||||
lager:debug("[efka_service] service_id: ~p, boot_service get error: ~p", [ServiceId, Reason]),
|
lager:debug("[efka_service] service_id: ~p, boot_service get error: ~p", [ServiceId, Reason]),
|
||||||
@ -217,6 +219,12 @@ handle_info({Port, {exit_status, Code}}, State = #state{service_id = ServiceId})
|
|||||||
try_reboot(),
|
try_reboot(),
|
||||||
{noreply, State#state{port = undefined, os_pid = undefined}};
|
{noreply, State#state{port = undefined, os_pid = undefined}};
|
||||||
|
|
||||||
|
%% 处理port的退出消息
|
||||||
|
handle_info({'EXIT', Port, Reason}, State = #state{port = Port, service_id = ServiceId}) ->
|
||||||
|
lager:debug("[efka_service] service_id: ~p, port: ~p, exit with reason: ~p", [ServiceId, Port, Reason]),
|
||||||
|
try_reboot(),
|
||||||
|
{noreply, State#state{port = undefined, os_pid = undefined}};
|
||||||
|
|
||||||
%% 处理channel进程的退出
|
%% 处理channel进程的退出
|
||||||
handle_info({'DOWN', _Ref, process, ChannelPid, Reason}, State = #state{channel_pid = ChannelPid, service_id = ServiceId}) ->
|
handle_info({'DOWN', _Ref, process, ChannelPid, Reason}, State = #state{channel_pid = ChannelPid, service_id = ServiceId}) ->
|
||||||
lager:debug("[efka_service] service_id: ~p, channel exited: ~p", [ServiceId, Reason]),
|
lager:debug("[efka_service] service_id: ~p, channel exited: ~p", [ServiceId, Reason]),
|
||||||
|
|||||||
@ -46,7 +46,9 @@ connect(Pid) when is_pid(Pid) ->
|
|||||||
send(Pid, Method, Packet) when is_pid(Pid), is_integer(Method), is_binary(Packet) ->
|
send(Pid, Method, Packet) when is_pid(Pid), is_integer(Method), is_binary(Packet) ->
|
||||||
gen_server:cast(Pid, {send, Method, Packet}).
|
gen_server:cast(Pid, {send, Method, Packet}).
|
||||||
|
|
||||||
-spec async_call_reply(Pid :: pid(), PacketId :: integer(), Response :: binary()) -> no_return().
|
-spec async_call_reply(Pid :: pid() | undefined, PacketId :: integer(), Response :: binary()) -> no_return().
|
||||||
|
async_call_reply(undefined, PacketId, Response) when is_integer(PacketId), is_binary(Response) ->
|
||||||
|
ok;
|
||||||
async_call_reply(Pid, PacketId, Response) when is_pid(Pid), is_integer(PacketId), is_binary(Response) ->
|
async_call_reply(Pid, PacketId, Response) when is_pid(Pid), is_integer(PacketId), is_binary(Response) ->
|
||||||
gen_server:cast(Pid, {async_call_reply, PacketId, Response}).
|
gen_server:cast(Pid, {async_call_reply, PacketId, Response}).
|
||||||
|
|
||||||
|
|||||||
@ -155,7 +155,7 @@ get_running_services() ->
|
|||||||
|
|
||||||
display_services() ->
|
display_services() ->
|
||||||
F = fun() ->
|
F = fun() ->
|
||||||
Q = qlc:q([E || E <- mnesia:table(?TAB), E]),
|
Q = qlc:q([E || E <- mnesia:table(?TAB)]),
|
||||||
qlc:e(Q)
|
qlc:e(Q)
|
||||||
end,
|
end,
|
||||||
case mnesia:transaction(F) of
|
case mnesia:transaction(F) of
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user